GTK-server

GTK-server
Originalförfattare Peter van Eerten
Utvecklare Peter van Eerten
Initial release 2003 ; 20 år sedan ( 2003 )
Stabil frisättning
2.4.5 / 30 juni 2019 ; för 3 år sedan ( 2019-06-30 )
Operativ system Cross-plattform
Licens GNU General Public License
Hemsida www .gtk-server .org

GTK-server är ett öppen källkodsprojekt släppt under GNU General Public License . GTK-serverprojektet syftar till att föra grafiskt användargränssnitt till alla tolkade språk med hjälp av GIMP Tool Kit ( GTK ) eller XForms .

Filosofi

GTK-servern tillhandahåller ett strömorienterat gränssnitt till GTK . Om GTK-servern är kompilerad som en fristående binär tillåter den fem olika gränssnitt: stdin, fifo ( named pipe ), ipc ( message queue ), tcp eller udp. Alla tolkade språk eller shellscript med I/O-funktioner kan starta GTK-servern med ett argument som anger typen av gränssnitt och kan börja skicka GTK-funktionsanrop i S-Expression- format. Efter varje begäran returnerar GTK-servern ett resultat, beroende på vilken typ av GTK-funktion som anropas.

Om GTK-servern är kompilerad som ett delat objekt exporterar den funktionen 'gtk', som först måste importeras i klientprogrammet. Efter det kan klientprogrammet börja skicka GTK-funktionsanrop i S-Expression-format som argument till den importerade 'gtk'-funktionen.

Innan GTK-servern faktiskt kan köra GTK-funktioner måste den läsa en konfigurationsfil där prototyperna för GTK-funktionerna beskrivs. Sedan version 2.2.3 kan detta också göras direkt, vilket gör att GTK-servern kan köras utan konfigurationsfil.

Genomförande

Implementering av GTK-servern leder till följande överväganden.

  • Åtkomst till främmande funktioner är endast möjligt när de öppnade biblioteken skapas med ett icke objektorienterat programmeringsspråk som C eller Pascal. Bibliotek skapade med C++ till exempel använder namnmangling för att förena överbelastade funktioner . Detta betyder att det faktiska funktionsnamnet i ett C++-bibliotek inte kan vara känt när det delade biblioteket väl har kompilerats. Funktionerna i ett sådant bibliotek kan därför inte nås. Därför kan bibliotek som wxWidgets , Qt toolkit , FLTK som är programmerade i C++ inte nås med GTK-serverkonceptet.
  • GTK - biblioteket implementerades i programmeringsspråket C . Eftersom C är ett starkt skrivet programmeringsspråk måste det tolkade programmet känna till typen av argument och typen av returvärde för varje GTK-funktion under körning. Dessa kan definieras direkt eller i en konfigurationsfil, som tolkas av GTK-servern under uppstart. GTK-servern känner dock inte till de faktiska funktionerna som kommer att användas av det tolkade klientprogrammet, så för GTK-servern är alla argument och returvärden för varje GTK-funktion variabeltyper.

Detta leder till ett problem för implementeringen, eftersom GTK-funktionerna och motsvarande argument och returvärden inte kan hårdkodas till GTK-serverns binär.

Sättet att lösa detta är genom att använda ett främmande funktionsgränssnitt . För närvarande stöds fyra externa främmande funktionsgränssnitt av GTK-server: libffi , FFCALL, C/Invoke och dyncall. Ett av dessa bibliotek bör vara tillgängligt på målsystemet för att kompilera GTK-servern framgångsrikt.

Exempel

Följande KornShell- skript startar GTK-servern i stdin-läge och skapar ett enkelt fönster med en utgångsknapp:






  
     

  


         



 #!/bin/ksh  # Starta GTK-server  gtk-server -stdin  |&  # Kommunicera med GTK-server och tilldela funktionsfunktionen  gtk  {  print  -p  $1  ;  läs  -p GTK  ;  }  funktion  definiera  {  $2  "  $3  "  ;  eval  $1  =  "  $GTK  "  ;  }  # Konfigurera 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_000   default_size $WINDOW_gtkfine   "  0 gtkfine 1 10 1"  gtk  "gtk_container_add  $WINDOW  $TABLE  "  define BUTTON gtk "gtk_button_new_with_label   '  Klicka för att avsluta'"  gtk  "gtk_table_attach_defaults  $TABLE  $BUTTON  5 9 5 9"  gtk  "gtk_widget_show_all  $  WINDOW  "  # EVENTloop  till  $[  $UTTON  |  $EVENT  =  $WINDOW  ]]  definiera  HÄNDELSE gtk  "gtk_server_callback vänta"  klar  # Avsluta GTK-server  gtk  "gtk_server_exit" 

Fördelar och begränsningar

Även om GTK var tänkt att användas med programmeringsspråket C , är det nu möjligt att använda GTK från vilket tolkat språk som helst utan att ändra den faktiska implementeringen av tolken. Dessutom kan GTK 1.x, GTK2.x och GTK 3.x nås. Valfritt kan alla andra delade bibliotek användas, som OpenGL- relaterade bibliotek, Poppler , Mozilla , men också libc , sqlite och ett musikbibliotek som MikMod .

När du använder GTK-servern som en fristående binär, skapar den oundvikligen en ytterligare process i processlistan. Dessutom kan GTK-funktioner definierade som ett makro inte nås av ett klientprogram.