Java: linguaggio di scripting (macro) da incorporare in un'applicazione desktop Java
-
02-07-2019 - |
Domanda
Sto scrivendo un'applicazione grafica in Java. Alla fine vorrei creare un linguaggio di scripting in modo che le cose siano programmabili. Quale biblioteca di lingue mi consigliate?
Probabili sospetti sono:
I candidati meno probabili sono:
Il pubblico di destinazione probabilmente non è programmatore hardcore, quindi si preferisce un linguaggio meno arcano. La mia ipotesi è che JavaScript sia più accettabile da parte loro anche con le sue stranezze solo perché l'hanno visto di più.
Lua sembra essere popolare in C / C ++, ma almeno LuaJava richiede .dll / .so aggiuntivo, il che rende complicata la distribuzione.
EDIT: PhiLho ha scritto che c'è un'implementazione Java di Lua chiamata kahlua .
Domande correlate:
Soluzione 6
Ho appena letto di Steve Yegge Il modello di design universale . L'articolo è su un argomento molto più ampio rispetto al semplice scripting incorporato nell'applicazione Java, ma poiché l'autore scrive un'applicazione Java che consente lo scripting (usando Jython), ci sono punti interessanti che ho trovato interessanti.
E JavaScript è uno dei due migliori linguaggi di scripting sul pianeta, in il senso più corretto del termine "linguaggio di scripting", vale a dire, lingue progettate specificamente da incorporare in dimensioni maggiori sistemi host e quindi utilizzato manipolare o " script " oggetti nel sistema host. Questo è JavaScript è stato progettato per fare. È ragionevole piccolo con alcune estensioni opzionali, ha un informale ragionevolmente stretto specifica, e ha un attento interfaccia artigianale per la superficie oggetti del sistema host in modo trasparente JavaScript.
Al contrario, Perl, Python e Ruby lo sono enormi tentacoli, tutti provanti (come C ++ e Java) per essere la lingua migliore per ogni compito. L'unico altro mainstream lingua là fuori che compete JavaScript per lo scripting arbitrario sistemi host è Lua, famosa per essere il linguaggio di scripting preferito da l'industria dei giochi.
Sono d'accordo con lui sul restringimento a JavaScript e Lua.
Senza gli esempi utili, tutto ciò che posso si dice che usando JavaScript / Rhino (o Lua, una volta diventato disponibile su la JVM) potrebbe aver reso la mia vita più facile.
Personalmente preferisco JavaScript sulla piattaforma Java. La popolazione della base di utenti è maggiore. Come dice Yegge, è "il linguaggio di programmazione più frainteso al mondo". ma la quantità di risorse disponibili sulla lingua è un vantaggio. Rhino sembra una bestia maturata.
Altri suggerimenti
se il pubblico di destinazione non ha "capacità di programmazione ...." scegli jython (python) è facile da imparare. (la mia figlia di 7 anni l'ha imparato molto rapidamente)
Bruce Eckel ha realizzato un capitolo con jython in "pensando in java".
al pericolo che ottiene un "voto negativo" python è più semplice come BASIC :-)
Lua è apprezzata, tra l'altro, dalla semplicità della lingua, che lo rende facile da imparare. LuaJava utilizza l'implementazione originale di Lua, rendendola completa, ma come indicato, forse delicata da installare. Conosco almeno un'implementazione pura di Java di Lua: Kahlua . Non è completo (manca il supporto coroutine tra le altre cose, ma si può fare molto senza di loro) ma forse già utilizzabile per il tuo obiettivo.
A differenza, diciamo, Groovy, non dovrebbe aggiungere molto sovraccarico alla tua applicazione ...
Se volessi fare tutto il possibile, potresti utilizzare gli script per la piattaforma Java come definito da JSR 223. L'adozione di questo approccio consentirebbe all'applicazione di utilizzare qualsiasi linguaggio che abbia un motore di script .
C'è anche BeanShell, che ha il vantaggio di essere una JSR completamente approvata e quindi forse più probabilità di rimanere in giro.
Java 6 ha già javascript disponibile come linguaggio di scripting JSR 223, pronto all'uso.
Attualmente sto cercando una libreria che mi permetta di usare oggetti e metodi Java dagli script Lua.
La mia prima idea è stata quella di utilizzare anche LuaJava, ma poiché voglio che funzioni su Linux, Mac e Windows, sono stato scoraggiato dal fatto che utilizza una libreria compilata oltre alle cose Java. Sono disponibili solo i binari precompilati di Windows e non sono un esperto su Mac, quindi ho cercato di trovare qualcosa in Java puro e ho trovato questo: http://sourceforge.net/projects/luaj
Sembra implementare l'API C descritta nel documento Lua, così come l'API di LuaJava.
Il progetto sembra davvero avanzato, ci sono esempi di chiamate Swing di Lua (!) e hanno funzionato sul mio Linux box. Ma stranamente, le mailing list, i forum e la documentazione sono davvero scarsi.
Lo proverò anche su Windows e Mac. Spero che funzioni.
Kahlua è stato menzionato, ma è mirato solo a J2ME, ecco perché manca alcune parti di Lua. Penso che ci sia un progetto chiamato Mochalua che ha gli stessi obiettivi.
LuaJ, d'altra parte, è disponibile in due versioni, una mirata a J2SE che implementa tutto (anche le coroutine) e una mirata a J2ME, che manca di 2 o 3 librerie credo (inclusa la roba LuaJava, che necessita riflessione).
Potresti prendere in considerazione Jacl . Si basa su Tcl, originariamente progettato per essere un linguaggio di script incorporabile. Quindi, si potrebbe sostenere che è molto più adatto a tale scopo rispetto ad altri linguaggi di scripting che hanno avuto la possibilità di essere incorporati.
Soprattutto se il pubblico di destinazione non è "programmatori hardcore", Jacl fa una buona scelta. Le persone intelligenti (e soprattutto quelle senza pregiudizi della programmazione cablata) possono facilmente rilevare la sintassi Tcl in una mattina.
Puoi usare RelProxy - Java, fornisce Java reale e puro come linguaggio di scripting, incluso script di shell realizzati con Java, grazie alla sua compilazione al volo. Perché Java " script " viene eseguito condividendo il programma di avvio ClassLoader, l'integrazione è semplice.