Articulo de referencia

Servidor GTK

El proyecto GTK-server tiene como objetivo llevar la programación de interfaces gráficas de usuario (GUI) a cualquier lenguaje interpretado utilizando el kit de herramientas del...

El proyecto GTK-server tiene como objetivo llevar la programación de interfaces gráficas de usuario (GUI) a cualquier lenguaje interpretado utilizando el kit de herramientas del programa de manipulación de imágenes GNU ( GIMP ) ( GTK ) o XForms . Publica software libre y de código abierto bajo la Licencia Pública General de GNU .

Filosofía

El servidor GTK proporciona una interfaz orientada a flujos para GTK . Si el servidor GTK se compila como un programa binario independiente , permite cinco interfaces diferentes: entrada estándar (stdin), FIFO ( primero en entrar, primero en salir ) ( tubería con nombre ), comunicación entre procesos (IPC) ( cola de mensajes ), TCP ( Protocolo de Control de Transmisión ) o UDP ( Protocolo de Datagramas de Usuario ). Cualquier lenguaje interpretado o script de shell con capacidad de entrada/salida (E/S) puede iniciar el servidor GTK con un argumento que especifique el tipo de interfaz y comenzar a enviar llamadas a funciones GTK en formato de expresión S. Después de cada solicitud, el servidor GTK devuelve un resultado, dependiendo del tipo de función GTK invocada.

Si el servidor GTK se compila como un objeto compartido , exporta la función 'gtk', que debe importarse primero en el programa cliente . Después, el programa cliente puede empezar a enviar llamadas a funciones GTK en formato de expresión S como argumento a la función 'gtk' importada.

Antes de que el servidor GTK pueda ejecutar funciones GTK, debe leer un archivo de configuración donde se describen los prototipos de dichas funciones. Desde la versión 2.2.3, esto también se puede hacer sobre la marcha, lo que permite que el servidor GTK funcione sin archivo de configuración.

Implementación

La implementación del servidor GTK conlleva las siguientes consideraciones.

  • El acceso a funciones externas solo es posible cuando las bibliotecas a las que se accede se crean con un lenguaje de programación no orientado a objetos como C o Pascal . Las bibliotecas creadas con C++ , por ejemplo, utilizan la modificación de nombres para unificar las funciones sobrecargadas . Esto significa que el nombre de la función en una biblioteca de C++ no se puede conocer una vez que la biblioteca compartida se ha compilado. Por lo tanto, no se puede acceder a las funciones de dicha biblioteca. En consecuencia, bibliotecas como wxWidgets , el kit de herramientas Qt y Fast Light Toolkit ( FLTK ), programadas en C++, no se pueden acceder con el concepto de servidor GTK. [ 1 ]
  • La biblioteca GTK se implementó en el lenguaje de programación C. Dado que C es un lenguaje de programación fuertemente tipado , el programa interpretado necesita conocer el tipo de datos de los argumentos y el tipo del valor de retorno de cada función GTK durante la ejecución . Estos se pueden definir sobre la marcha o en un archivo de configuración, que el servidor GTK analiza al iniciarse. Sin embargo, el servidor GTK desconoce las funciones que utilizará el programa cliente interpretado, por lo que para el servidor GTK todos los argumentos y valores de retorno de cada función GTK son tipos variables.

Esto genera un problema para la implementación, ya que las funciones GTK, sus argumentos correspondientes y sus valores de retorno no pueden estar codificados directamente en el binario del servidor GTK.

La solución consiste en utilizar una interfaz de función externa . Actualmente, GTK-server admite cuatro interfaces de función externa: libffi , FFCALL, [ 2 ] C/Invoke [ 3 ] y dyncall. [ 4 ] Una de estas bibliotecas debe estar disponible en el sistema de destino para compilar GTK-server correctamente.

Ejemplo

El siguiente script de KornShell inicia el servidor GTK en modo stdin y crea una ventana simple con un botón de salida:

#!/bin/ksh# Iniciar el servidor GTK gtk-server -stdin |&# Comunicarse con el servidor GTK y asignar la función function gtk { print -p $1 ; read -p GTK ; } function define { $2 " $3 " ; eval $1 = " $GTK " ; }# Configuración de la GUI gtk "gtk_init NULL NULL" define WINDOW gtk "gtk_window_new 0" gtk "gtk_window_set_title $WINDOW 'Demostración del servidor Korn GTK'" 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 'Haga clic para salir'" gtk "gtk_table_attach_defaults $TABLE $BUTTON 5 9 5 9" gtk "gtk_widget_show_all $WINDOW "# Bucle principal hasta que [[ $EVENT = $BUTTON || $EVENT = $WINDOW ]] haga definir EVENT gtk "gtk_server_callback wait" hecho# Salir del servidor GTK gtk "gtk_server_exit"

Ventajas y limitaciones

Aunque GTK fue diseñado para usarse con el lenguaje de programación C , ahora es posible usarlo desde cualquier lenguaje interpretado sin modificar la implementación del intérprete. Además, se puede acceder a GTK 1.x, GTK 2.x, GTK 3.x y GTK 4.x. Opcionalmente, se puede usar cualquier otra biblioteca compartida, como las relacionadas con OpenGL , Poppler , Mozilla , libc , sqlite y una biblioteca de música como MikMod .

Al usar el servidor GTK como binario independiente, inevitablemente se crea un proceso adicional en la lista de procesos. Además, las funciones GTK definidas como macros no son accesibles para un programa cliente.

Referencias

  1. Isotton, Aaron (16 de marzo de 2006), "C++ dlopen mini HOWTO" , The Linux Documentation Project , archivado del original el 12 de agosto de 2021 , consultado el 7 de septiembre de 2021.
  2. Bibliotecas FFCALL , archivadas desde el original el 1 de julio de 2021 , consultadas el 7 de septiembre de 2021.
  3. C/Invoke , archivado del original el 20/08/2021 , recuperado el 07/09/2021.
  4. dyncall.org – Llamada dinámica a funciones C , archivado del original el 16/04/2021 , recuperado el 07/09/2021.
Obtenido de " https://en.wikipedia.org/w/index.php?title=GTK-server&oldid=1255558892 "