/* import js-ctypes */
Components.utils.import("resource://gre/modules/ctypes.jsm");
/* open a library */
var libc = ctypes.open("libc.so.6");
/* import a function */
var puts = libc.declare("puts", /* function name */
ctypes.default_abi, /* call ABI */
ctypes.int32_t, /* return type */
ctypes.string /* argument type */
);
var ret = puts("Hello World from js-ctypes!");
== Conclusioni ==
Al momento mancano molte delle feature descritte nella pagina
wiki di lavoro (in particolare le strutture, i puntatori e le callback):
* https://wiki.mozilla.org/Jsctypes/api
Dovremo quindi aspettare di avere un'API un po' piu' completa per poterne
saggiare realmente le potenzialità e magari svilupparci qualcosa di simile a
ruby-ffi-swig-generator per velocizzare la parte più noiosa e ripetitiva
della creazione di un binding ffi.
La nuova API JS-CTypes sembra farà il suo ingresso nei build stable per cui
le speranze che l'api maturi in fretta sono probabilmente tutt'altro che vane.
Have fun,
rpl
JS-CTypes - Test Drive
By rpl - Posted on November 14th, 2009
XPCOM è la gioia e dolore di tutti gli sviluppatori della piattaforma Mozilla XULRunner:
la porta d'accesso a tutta una serie di servizi privilegiati che il WebContent si sogna :-)
ma al tempo stesso è la porta d'accesso ad un inferno in terra :-(
Accedere alle interfacce XPCOM fa molto CORBA, anche nei linguaggi ad alto livello
come Javascript, Python o Java... realizzare nuove interfacce XPCOM fa ancora più
CORBA... anche realizzandole in Javascript...
Per non parlare poi dei componenti binari... effettuare il binding di una libreria
nativa in una (o più) interfacce XPCOM richiederà la scrittura di un buon numero di
linee di codice in C++, composto da una quantità abnorme di macro "semplificative"
e stub generati dall'IDL :-(
JS-CTypes nasce da una iniziativa di Mark Finkle ed ha lo scopo di fornire al linguaggio
di scripting principe della piattaforma Mozilla XULRunner (Javascript) un modo
più naturale per effettuare il binding di libreria native attraverso libffi e un
API simile a CTypes (che troviamo di serie in Python).
Dopo l'introduzione del primo prototipo nel source tree di mozilla-central,
nelle versioni >=1.9.3 di gecko/xulrunner (e di conseguenza dalla versione 3.7 di firefox),
JS-CTypes sarà presente di serie in tutti i build.
E' arrivato quindi il momento di vedere all'opera una feature che potrebbe cambiare il modo
di fornire funzionalità native alle applicazioni ed estensioni a base XULRunner.
== Test Drive ==
Per prima cosa occorre procurarsi un nighly build di xulrunner-1.9.3 per la
propria piattaforma (Linux nel mio caso) e provare l'API mediante una
applicazione xulrunner minimale:
* http://ftp.mozilla.org/pub/mozilla.org/xulrunner/nightly/latest-trunk/
* http://github.com/rpl/xulrunner-jsctypes-testdrive
Su MDC (https://developer.mozilla.org/en/JavaScript_code_modules/ctypes.jsm)
è già presente una prima bozza di documentazione dell'API di JS-CTypes e
alcuni snippet di esempio per Window e MacOSX, allora perchè non contribuire
con uno snippet di esempio per Linux?
(ottenuto aggiornando alla nuova api ctypes l'esempio contenuto nel post http://analogmountains.blogspot.com/2008/02/having-fun-with)