2008-08-18 13 views
6

Estoy buscando agregar funcionalidad de scripting a una base de código existente y estoy sopesando las ventajas y desventajas de varios paquetes. Lua es probablemente la opción más obvia, pero me preguntaba si la gente tiene alguna otra sugerencia basada en su experiencia.¿Qué lenguaje de scripting apoyar en una base de código existente?

Las secuencias de comandos se activarán ante determinados eventos y pueden permanecer como residentes durante un período de tiempo. Por ejemplo, al inicio una secuencia de comandos puede definir varias opciones que el programa presenta al usuario como una cantidad de botones. Al seleccionar uno de estos botones, el programa notificará al script dónde pueden ocurrir otros eventos.

Estos son los únicos requisitos reales;

  1. debe ser una biblioteca multiplataforma que es compilables de la fuente
  2. secuencias de comandos deben ser capaces de llamar a las funciones del lado del código registrados
  3. código debe ser capaz de llamar a las funciones del lado del guión
  4. Ser utilizado dentro de una base de código C/C++.

Respuesta

3

basa en mi propia experiencia:

  • Python. En mi humilde opinión esta es una buena opción. Tenemos una base de código bastante grande con muchos usuarios y les gusta mucho.
  • Ruby. Hay algunas aplicaciones realmente agradables como Google Sketchup que usan esto. Escribí un plugin de Sketchup y pensé que era bastante agradable.
  • Tcl. Este es el lenguaje de scripting incrustable de la vieja escuela, pero no tiene mucho impulso en estos días. Sin embargo, es de alta calidad, ¡lo usan en el Telescopio Espacial Hubble!
  • Lua. Solo he hecho cosas para bebés con él, pero IIRC solo tiene un tipo numérico de coma flotante, así que asegúrese de que no haya ningún problema con los datos con los que trabajará.

Tenemos suerte de estar viviendo en la edad de oro de secuencias de comandos, por lo que es difícil hacer una mala elección si elige entre cualquiera de los más populares.

1

He jugado un poco con Spidermonkey. Parece que al menos valdría la pena echarle un vistazo en su situación. También he escuchado cosas buenas sobre Lua. El gran argumento para usar un lenguaje de scripting de JavaScript es que muchos desarrolladores ya lo saben y probablemente sea más cómodo desde el comienzo, mientras que Lua probablemente tenga una curva de aprendizaje.

No soy completamente positivo, pero creo que spidermonkey sus 4 requisitos.

1

He utilizado Python extensamente para este propósito y nunca me he arrepentido.

1

Lua tiene la API C más directa para enlazar en una base de código que he usado alguna vez. De hecho, suelo enrollarlo rápidamente a mano. Mientras que, a menudo no consideraría hacerlo sin un generador como swig para otros. Además, es típicamente más rápido y ligero que las alternativas, y coroutines es una característica muy útil que ofrecen pocos otros idiomas.

1

AngelScript

le permite llamar a funciones C estándar y métodos de C++, sin necesidad de funciones de proxy. La aplicación simplemente registra las funciones, los objetos y los métodos con los que las secuencias de comandos deberían poder trabajar y nada más tiene que hacerse con su código. Las mismas funciones utilizadas internamente por la aplicación también pueden ser utilizadas por el motor de scripting, que elimina la necesidad de duplicar la funcionalidad.

Para el guionista, el lenguaje de guiones sigue la sintaxis ampliamente conocida de C/C++ (con pequeños cambios), pero sin la necesidad de preocuparse por los punteros y las pérdidas de memoria.

0

Ya hubo algunas sugerencias excelentes, pero solo quería mencionar que Perl también se puede llamar/puede llamar a C/C++.

0

Probablemente pueda utilizar cualquier lenguaje moderno de scripting/bytecode.

Si está dispuesto a aguantar las penas de crecimiento de un nuevo producto, puede usar la VM Parrot. Que tiene soporte para muchos, sino todos los idiomas listados en esta página. Lamentablemente, aún no está hecho, pero eso no ha impedido que algunas personas lo usen en un entorno de producción.

1

La pregunta original describía Tcl como una "T".

Tcl fue diseñado desde el principio como un lenguaje de scripts incrustado. Ha evolucionado para ser un lenguaje dinámico de primera clase por derecho propio, pero todavía se usa en todo el mundo como un lenguaje embebido. Está disponible bajo la licencia BSD, por lo que es casi tan gratis como sea posible. También se compila en casi cualquier plataforma de moden, y muchos no tan modernos. Y no solo funciona en sistemas de escritorio, hay variaciones disponibles para plataformas móviles.

Tcl se destaca como un lenguaje de "pegamento", donde puede escribir funciones de alto rendimiento en C sin dejar de beneficiarse de las ventajas de un lenguaje de scripting para partes menos críticas de la aplicación.

Tcl también viene con un kit de herramientas GUI de primera clase (Tk) que es sin duda uno de los juegos de herramientas GUI multiplataforma más fáciles de usar. También se conecta muy bien con SQLite y otras bases de datos, y ha tenido soporte integrado para Unicode durante bastante tiempo.

Si la interfaz de scripting estará disponible para sus clientes (en lugar de simplemente permitir que sus propios ingenieros trabajen a nivel de scripting), Tcl es extremadamente fácil de aprender ya que hay un total de solo 12 reglas que gobiernan el todo el lenguaje (a partir de tcl 8.6). De hecho, Tcl brilla como una forma de inventar lenguajes específicos de dominio que a menudo se usa como una solución de scripting para el usuario final.

0

Creo que la mayoría de la gente probablemente esté mencionando el lenguaje de scripts con el que están más familiarizados. Desde mi punto de vista, Tcl fue diseñado específicamente para interactuar con C, por lo que su dominio de problema está hecho a medida para el idioma. Sin embargo, estoy seguro de que Python, Perl o Lua estarían bien. Probablemente deberías elegir el idioma más familiar para tu equipo actual, ya que eso reducirá el tiempo de aprendizaje.

Cuestiones relacionadas