Pregunta

Estoy escribiendo una aplicación de gráficos en Java. Eventualmente, me gustaría construir un lenguaje de scripting para que las cosas sean programables. ¿Qué biblioteca de idiomas me recomiendan?

Los sospechosos probables son:

Los candidatos menos probables son:

El público objetivo probablemente no son programadores hardcore, por lo que se prefiere menos lenguaje arcano. Mi conjetura es que JavaScript es más aceptable para ellos incluso con sus peculiaridades solo porque lo han visto más.

Lua parece ser popular en C / C ++, pero al menos LuaJava requiere .dll / .so adicional, lo que hace que la implementación sea complicada.

EDITAR: PhiLho escribió que hay una implementación de Lua en Java llamada kahlua .


Preguntas relacionadas:

¿Fue útil?

Solución 6

Acabo de leer . El artículo trata sobre un tema mucho más amplio que solo los scripts incrustados en la aplicación Java, pero como el autor escribe una aplicación Java que permite los scripts (usando Jython), hay puntos interesantes que me parecen interesantes.

  

Y JavaScript es uno de los dos mejores   lenguajes de scripting en el planeta, en   El sentido más correcto del término.   " lenguaje de scripting " ;: a saber,   lenguajes que fueron diseñados   específicamente para ser incrustado en grandes   sistemas host y luego solía   manipular o " secuencia de comandos " objetos en el   sistema host Esto es lo que JavaScript   fue diseñado para hacer. Es razonablemente   pequeño con algunas extensiones opcionales,   tiene un informal razonablemente apretado   especificación, y tiene un cuidado   interfaz hecha a mano para la superficie   objetos del sistema host de forma transparente en   JavaScript.

     

En contraste, Perl, Python y Ruby son   enormes extensiones, todos tratando (como C ++ y   Java) para ser el mejor lenguaje para   cada tarea La única otra corriente principal   lenguaje por ahí que compite con   JavaScript para scripting arbitrario   sistemas host es Lua, famoso por ser   el lenguaje de script de elección para   La industria del juego.

Estoy de acuerdo con él en limitarse a JavaScript y Lua.

  

Sin los ejemplos a la mano, todo lo que puedo   es decir que usando JavaScript / Rhino   (o Lua, una vez que estuvo disponible en   la JVM) podría haber hecho mi vida   más fácil.

Personalmente prefiero JavaScript en la plataforma Java. La población de la base de usuarios es mayor. Como lo expresa Yegge, es " el lenguaje de programación más incomprendido del mundo, " pero la cantidad de recursos disponibles en el idioma es una ventaja. Rhino parece una bestia madura.

Otros consejos

si el público objetivo es " no tiene habilidades de programación ... " elegir jython (python) es fácil de aprender. (mi hija de 7 años lo aprendió muy rápido)

Bruce Eckel hizo un capítulo con jython en " pensando en java " ;.

en el peligro de obtener un " voto negativo " python es más fácil como BASIC :-)

Lua es apreciada, entre otras cosas, por la simplicidad del lenguaje, por lo que es fácil de aprender. LuaJava usa la implementación original de Lua, completándola, pero a medida que la apuntas, quizás sea delicada de instalar. Conozco al menos una implementación Java pura de Lua: Kahlua . No está completo (sin el apoyo de coroutine, entre otras cosas, pero se puede hacer mucho sin ellos) pero quizás ya sea utilizable para su objetivo.
A diferencia de, digamos, Groovy, no debería agregar mucha sobrecarga a su aplicación ...

Si desea hacer todo lo posible, puede utilizar scripts para la Plataforma Java como definido por JSR 223. Tomar ese enfoque permitiría a la aplicación utilizar cualquier lenguaje que tenga un motor de script .

También está BeanShell, que tiene la ventaja de ser un JSR totalmente aprobado y, por lo tanto, es más probable que se mantenga.

http://www.beanshell.org/

Java 6 ya tiene javascript disponible como lenguaje de scripts JSR 223, listo para usar.

Actualmente estoy buscando una biblioteca que me permita usar objetos y métodos Java de los scripts de Lua.

Mi primera idea fue usar LuaJava también, pero como quiero que esto funcione en Linux, Mac y Windows, me decepcionó el hecho de que utiliza una biblioteca compilada además de las cosas de Java. Solo los binarios precompilados de Windows están disponibles, y no soy un experto en Mac, así que traté de encontrar algo en Java puro, y encontré esto: http://sourceforge.net/projects/luaj

Parece que implementa la API de C descrita en el documento de Lua, así como la API de LuaJava.

El proyecto parece muy avanzado, hay ejemplos de llamadas Swing desde Lua (!), y funcionaron en mi caja de Linux. Pero curiosamente, las listas de correo, los foros y la documentación son muy escasos.

También voy a intentar esto en Windows y Mac. Espero que funcione.

Kahlua ha sido mencionado, pero solo está dirigido a J2ME, por eso carece de algunas partes de Lua. Creo que hay un proyecto llamado Mochalua que tiene los mismos objetivos.

LuaJ, por otro lado, viene en dos versiones, una dirigida a J2SE que implementa todo (también a las rutinas) y otra dirigida a J2ME, que carece de 2 o 3 libs, creo (incluyendo el material de LuaJava, que necesita reflexión).

Puede considerar Jacl . Se basa en Tcl, que fue diseñado originalmente para ser un lenguaje de secuencias de comandos incorporable. Por lo tanto, se podría argumentar que es mucho más adecuado para ese propósito que otros lenguajes de secuencias de comandos que tenían la capacidad de ser incrustados.

Particularmente si la audiencia objetivo no es "programadores hardcore", Jacl hace una buena elección. Las personas inteligentes (y especialmente las que no tienen prejuicios de programación alámbricos) pueden captar fácilmente la sintaxis de Tcl en una mañana.

Puede usar RelProxy - Java, proporciona Java real y puro como lenguaje de scripting, incluido Shell scripts hechos con Java, gracias a su compilación sobre la marcha. Porque la secuencia de comandos " de Java " " se ejecuta compartiendo el lanzador ClassLoader, la integración es sencilla.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top