2015-02-14 7 views
5

Ci sono some interessanti descriptions di scrittura dei kernel di lingua per consentire l'esecuzione di una lingua precedentemente non supportata da IPython da IPython.Creare i kernel della lingua per IPython per una lingua senza associazioni ZeroMQ

In tutti i casi, la fase di creazione del kernel comporta l'uso dei binding della lingua di destinazione ZeroMQ (poiché ZeroMQ è un componente architettonico principale del protocollo di comunicazione del front-end per kernel di IPython).

Nella mia azienda, un linguaggio proprietario è stato creato alcuni anni fa e viene mantenuto con i compilatori in bytecode (con un bytecode runner scritto in C++), Flash e JavaScript ... è ancora molto usato oggi ma non ha mai aveva qualcosa come un REPL.

Questa lingua è un linguaggio funzionale simile a Haskell o SML e non ha associazioni ZeroMQ senza piani per i manutentori della lingua da aggiungere.

C'è un modo per scrivere ancora un kernel che può comunicare con IPython?

risposta

1

Se la tua lingua ha collegamenti Python, oppure puoi pilotare un REPL da Python usando qualcosa come Pexpect, puoi creare un kernel wrapper, riutilizzando il meccanismo di comunicazione IPython.

Questo è documentato qui: http://ipython.org/ipython-doc/dev/development/wrapperkernels.html

+0

Non è così, purtroppo, ma questo è utile conoscere. La lingua in questione viene in genere compilata in Javascript o Flash per le applicazioni Web, ma può anche essere compilata in bytecode tramite neko e quindi eseguita con un runner bytecode personalizzato. Se ha estensioni a qualcosa, sarebbe solo Haxe, ma non ne sono nemmeno sicuro. Attualmente sto usando una raccolta di funzioni di magia cellulare che si occupano della compilazione di back-end di una cella nel notebook, indirizzando sia .js che .swf, e quindi usando 'display.HTML' per visualizzare un iframe dei risultati nel cella di uscita. – ely

+0

Si potrebbe costruire un kernel lungo linee simili, dove l''esecuzione' del kernel in realtà ha compilato il codice in js e poi lo ha inviato al frontend per essere realmente eseguito. Probabilmente non saresti in grado di usare cose come il completamento della tabulazione, perché il kernel non sarebbe a conoscenza dello spazio dei nomi, ma l'esecuzione dovrebbe essere possibile. –

Problemi correlati