2008-09-27 10 views
7

Estoy escribiendo una aplicación de gráficos en Java. Eventualmente me gustaría construir en un lenguaje de scripting para que las cosas sean programables. ¿Qué biblioteca de idiomas recomiendas?Java: lenguaje de scripting (macro) para incrustar en una aplicación de escritorio Java

sospechosos probables son:

menos probables candidatos son:

El público objetivo no son, probablemente, los programadores incondicionales, por lo que se prefiere menos lenguaje arcano. Supongo 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.

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


preguntas relacionadas:

Respuesta

1

Acabo de leer el The Universal Design Pattern de Steve Yegge. El artículo trata sobre un tema mucho más amplio que los scripts incorporados en la aplicación Java, pero dado que el autor escribe una aplicación Java que permite la creación de scripts (usando Jython), hay puntos interesantes que me parecieron interesantes.

y Javascript es uno de los dos mejores lenguajes de script en el planeta, en el sentido más correcto del "lenguaje de programación" plazo : a saber, idiomas que fueron diseñados específicamente para ser embebido en grande sistemas host y luego se usan para manipular objetos o "guiones" en el sistema host . Esto es lo que JavaScript fue diseñado para hacer. Es bastante pequeña con algunas extensiones opcionales, tiene un razonablemente apretado especificación informal , y tiene una interfaz de cuidadosamente diseñada para el revestimiento de huésped-objetos del sistema de forma transparente en JavaScript.

En contraste, Perl, Python y Ruby son grandes aglomeraciones, todos tratando (como C++ y Java ) para ser el mejor lenguaje para cada tarea. El único otro lenguaje dominante que compite con JavaScript para scripting arbitrario sistemas host es Lua, famoso por ser el lenguaje de scripting de elección para la industria del juego.

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

Sin los ejemplos prácticos, todo lo que puedo hacer es decir que el uso de JavaScript/Rhino (o Lua, una vez que quedó 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 más grande. Como dice Yegge, es "el lenguaje de programación más incomprendido del mundo", pero la cantidad de recursos disponibles en el idioma es un plus. Rhino parece ser una bestia madura.

9

si el público objetivo es "sin conocimientos 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 "thinking in java".

por el peligro conseguir una pitón "abajo-voto" es más fácil ya :-) BÁSICO

+1

+1 para -BASIC; o) –

3

Lua se aprecia, entre otras cosas, por la simplicidad de la lengua, por lo que es fácil de aprender. LuaJava utiliza la implementación original de Lua, por lo que es completa, pero como usted señala, puede ser difícil de instalar. Sé al menos una implementación pura de Java de Lua: Kahlua. No está completo (sin soporte de corutina, entre otras cosas, pero se puede hacer mucho sin ellos) pero quizás ya se puede utilizar para su objetivo.
A diferencia de, por ejemplo, Groovy, no debería agregar demasiada sobrecarga a su aplicación ...

1

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

http://www.beanshell.org/

+0

lado positivo: es básicamente Java dinámico, por lo que es muy fácil de adjuntar a un programa Java. Menos lado: es básicamente Java dinámico, por lo que podría no ser el idioma más fácil de aprender. –

+0

Si me gusta Java y uso Java, pero no quiero que mis usuarios sepan que están ejecutando la aplicación Java, ¿es como estar avergonzado de una amiga fea? No, ¿verdad? –

0

Usted podría considerar Jacl. Se basa en Tcl, que originalmente se diseñó para ser un lenguaje de scripts incrustable. Por lo tanto, uno podría argumentar que es mucho más adecuado para ese propósito que otros lenguajes de scripting que tenían la capacidad de ser incrustados.

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

2

Si quisiera hacer todo lo posible, podría utilizar secuencias de comandos para la plataforma Java como defined por JSR 223. Tomar ese enfoque le permitiría a la aplicación utilizar cualquier lenguaje que tenga un script engine conforme.

+0

"El motor Mozilla Rhino para el lenguaje de programación JavaScript, sin embargo, se incluye actualmente como una característica en las bibliotecas JDK 6 y JRE 6". ¿Esto pone a Rhino un poco más adelantado que los demás? –

+0

En teoría, sí. Realmente no estoy seguro de que eso es lo que ha sucedido en la realidad todavía. – laz

1

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

+0

Se envía con Rhino, que también comenté en la respuesta de laz. En teoría, este es el endoso oficial. –

1

Actualmente estoy buscando una biblioteca que me permita usar objetos y métodos de Java a partir 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 desconcertó el hecho de que usa una lib compilada además de Java. Solo están disponibles los binarios precompilados de Windows, 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 implementar la API C descrita en el Lua doc, así como la API de LuaJava.

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

Voy a probar esto en Windows y Mac, también. 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 (corutinas, también), y otra dirigida a J2ME, que carece de 2 o 3 libs, creo (incluidas las cosas LuaJava, que necesita reflexión).

0

Puede usar RelProxy - Java, proporciona Java real y puro como lenguaje de scripting, incluidos los scripts de shell creados con Java, gracias a su compilación sobre la marcha. Debido a que el "script" de Java se ejecuta compartiendo el iniciador ClassLoader, la integración es sencilla.

Cuestiones relacionadas