GTK-server
Originalförfattare | Peter van Eerten |
---|---|
Utvecklare | Peter van Eerten |
Initial release | 2003 |
Stabil frisättning | 2.4.5 / 30 juni 2019
|
Operativ system | Cross-plattform |
Licens | GNU General Public License |
Hemsida |
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.