Jump to content

GTK-сервер

GTK-сервер
Оригинальный автор(ы) Петер ван Эртен
Разработчик(и) Петер ван Эртен
Первоначальный выпуск 2003 год ; 21 год назад ( 2003 )
Стабильная версия
2.4.6 / 11 октября 2022 г .; 22 месяца назад ( 11.10.2022 )
Операционная система Кросс-платформенный
Лицензия Стандартная общественная лицензия GNU
Веб-сайт www .gtk-сервер .org

Проект GTK-сервера направлен на то, чтобы перенести программирование графического пользовательского интерфейса (GUI) на любой интерпретируемый язык с помощью GNU Image Manipulation Program ( GIMP ), ToolKit ( GTK ) или XForms . Он выпускает бесплатное программное обеспечение с открытым исходным кодом под лицензией GNU General Public License .

Философия

[ редактировать ]

GTK-сервер предоставляет поточно -ориентированный интерфейс для GTK . Если GTK-сервер скомпилирован как самостоятельная двоичная программа , он допускает пять различных интерфейсов: стандартный ввод (stdin), «первым вошел — первым вышел » (FIFO) ( именованный канал ), межпроцессное взаимодействие (IPC) ( очередь сообщений ), Протокол управления передачей (TCP) или протокол пользовательских датаграмм (UDP). Любой интерпретируемый язык или сценарий оболочки с возможностями ввода/вывода (I/O) может запустить GTK-сервер с аргументом, определяющим тип интерфейса, и может начать отправку функций вызовов S-выражения GTK в формате . После каждого запроса GTK-сервер возвращает результат, в зависимости от типа вызванной функции GTK.

Если GTK-сервер скомпилирован как общий объект , он экспортирует функцию «gtk», которую сначала необходимо импортировать в клиентскую программу. После этого клиентская программа может начать отправлять вызовы функций GTK в формате S-выражения в качестве аргумента импортированной функции gtk.

Прежде чем GTK-сервер сможет выполнять функции GTK, он должен прочитать файл конфигурации , в котором описаны прототипы функций GTK. Начиная с версии 2.2.3 это также можно делать «на лету», позволяя GTK-серверу работать без файла конфигурации.

Выполнение

[ редактировать ]

Реализация GTK-сервера приводит к следующим соображениям.

  • Доступ к внешним функциям возможен только в том случае, если библиотеки, к которым осуществляется доступ , созданы с использованием необъектно программирования, -ориентированного языка такого как C или Pascal . библиотеки, созданные на C++ Например, , используют преобразование имен для унификации перегруженных функций . Это означает, что имя функции в библиотеке C++ не может быть известно после компиляции общей библиотеки. Следовательно, функции в такой библиотеке недоступны. Следовательно, такие библиотеки, как wxWidgets , набор инструментов Qt , Fast Light Toolkit ( FLTK ), которые запрограммированы на C++, не могут быть доступны с помощью концепции GTK-сервера. [ 1 ]
  • Библиотека GTK была реализована на языке программирования C. Поскольку C является строго типизированным языком программирования , интерпретируемой программе необходимо знать тип данных аргументов и тип возвращаемого значения для каждой функции GTK во время выполнения . Они могут быть определены «на лету» или в файле конфигурации, который анализируется GTK-сервером во время запуска. Однако GTK-серверу не известны функции, которые будут использоваться интерпретируемой клиентской программой, поэтому для GTK-сервера все аргументы и возвращаемые значения для каждой функции GTK являются типами переменных.

Это приводит к проблемам реализации, поскольку функции GTK и соответствующие аргументы и возвращаемые значения не могут быть жестко запрограммированы в двоичном файле GTK-сервера.

Способ решения этой проблемы — использование интерфейса внешней функции . В настоящее время GTK-сервер поддерживает четыре интерфейса внешних внешних функций: libffi , FFCALL, [ 2 ] С/Вызов [ 3 ] и Динколл. [ 4 ] Одна из этих библиотек должна быть доступна в целевой системе для успешной компиляции GTK-сервера.

Следующий скрипт KornShell запускает GTK-сервер в режиме stdin и создает простое окно с кнопкой выхода:

#!/bin/ksh

# Start GTK-server
gtk-server -stdin |&

# Communicate with GTK-server and assign function
function gtk { print -p $1; read -p GTK; }
function define { $2 "$3"; eval $1="$GTK"; }

# Setup GUI
gtk "gtk_init NULL NULL"
define WINDOW gtk "gtk_window_new 0"
gtk "gtk_window_set_title $WINDOW 'Korn GTK-server demo'"
gtk "gtk_window_set_default_size $WINDOW 400 200"
define TABLE gtk "gtk_table_new 10 10 1"
gtk "gtk_container_add $WINDOW $TABLE"
define BUTTON gtk "gtk_button_new_with_label 'Click to Quit'"
gtk "gtk_table_attach_defaults $TABLE $BUTTON 5 9 5 9"
gtk "gtk_widget_show_all $WINDOW"

# Mainloop
until [[ $EVENT = $BUTTON || $EVENT = $WINDOW ]]
do 
    define EVENT gtk "gtk_server_callback wait"
done

# Exit GTK-server
gtk "gtk_server_exit"

Преимущества и ограничения

[ редактировать ]

Хотя GTK предназначался для использования с языком программирования C , теперь можно использовать GTK из любого интерпретируемого языка без изменения реализации интерпретатора. Также доступны GTK 1.x, GTK2.x и GTK 3.x. При желании можно использовать любую другую общую библиотеку, например библиотеки, связанные с OpenGL , Poppler , Mozilla , а также libc , sqlite и музыкальную библиотеку, например MikMod .

При использовании GTK-сервера в качестве автономного двоичного файла неизбежно создается дополнительный процесс в списке процессов. Кроме того, клиентская программа не может получить доступ к функциям GTK, определенным как макрос.

  1. ^ Изоттон, Аарон (16 марта 2006 г.), «C++ dlopen mini HOWTO» , Проект документации Linux , заархивировано из оригинала 12 августа 2021 г. , получено 7 сентября 2021 г.
  2. ^ Библиотеки FFCALL , заархивировано из оригинала 1 июля 2021 г. , получено 7 сентября 2021 г.
  3. ^ C/Invoke , заархивировано из оригинала 20 августа 2021 г. , получено 7 сентября 2021 г.
  4. ^ dyncall.org - динамический вызов функций C , заархивировано из оригинала 16 апреля 2021 г. , получено 7 сентября 2021 г.
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 76889ef6d78c5cd4243197d2b339eb04__1696762380
URL1:https://arc.ask3.ru/arc/aa/76/04/76889ef6d78c5cd4243197d2b339eb04.html
Заголовок, (Title) документа по адресу, URL1:
GTK-server - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)