Pregunta

Tengo un proyecto del lado del servidor c ++ en el que necesito incrustar algún tipo de script. Es parte de un tipo de servidor MMO en línea. Tengo una experiencia significativa en el uso de TCL, y me parece el ajuste natural. He hecho una cantidad mínima de Lua en mis días de desarrollo del juego, y me pregunto si este podría ser un lenguaje mejor para las secuencias de comandos incrustadas. También es bueno aprender un nuevo idioma. ¿Cuáles son las fortalezas y debilidades relativas de TCL vs Lua? Gracias!

¿Fue útil?

Solución

Honestamente, ambos están muy bien preparados para la tarea. Ambos son fáciles de incrustar en una aplicación y tienen una sintaxis bastante simple. Sé que es extremadamente sencillo agregar nuevos comandos (para interactuar con la aplicación) en Tcl, y me dicen que Lua también es muy bueno en este tipo de cosas.

Mi recomendación sería jugar con Lua por un tiempo para ver cómo te gusta (porque ya sabes Tcl) ... y luego elegir el que te resulte más cómodo. Si está escribiendo gran parte del código, terminará trabajando mucho con él, por lo que también necesitará algo que pueda usar. Al final, ambas opciones de idioma deberían ser bastante fáciles para que los usuarios finales realicen una secuencia de comandos.

Mi preferencia personal es Tcl, tanto porque no me gusta Lua (he hecho una cantidad razonable de programación en ella para las adiciones de Warcraft) y porque me encanta Tcl (he hecho MUCHA programación en ella para trabajo tanto profesional como privado).

Editar: Se agregó la nota sobre que ambos son fáciles para los usuarios finales. Obtuve 2 votos a la baja y no pude pensar en otra cosa que podría ser más que no aclarar el por qué de mi declaración.

Otros consejos

Supongo que soy lo contrario de RHSeeger allí. He usado tanto Lua como TCL integrados en los juegos (juegos en línea, por cierto) y no volvería a tocar TCL con un juego de bar de 10 'si tuviera la opción. Mi opinión muy subjetiva es que Lua es un lenguaje sano y TCL no lo es. En relación con las otras opciones de lenguajes de scripting, la sintaxis de TCL es muy oscura para la mayoría de las personas, con todos los signos establecidos y de expr y de dólares y muchos corchetes, etc. ese departamento tampoco.

Si esta interfaz de scripting es puramente para ti, entonces puedes ir con TCL porque Lua no te ofrecerá nada nuevo (a menos que la orientación a objetos sea lo tuyo). En manos de un usuario experto, TCL es una herramienta razonable. Sin embargo, si espera que los usuarios menos experimentados utilicen el sistema, elija Lua, ya que la sintaxis más simple les permitirá ganar mucha productividad.

Sospecho que Tcl tendrá más bibliotecas que podría encontrar necesarias o convenientes en el camino.

Como han dicho otros, ambos idiomas funcionarían muy bien. Una tercera opción que también es probable que funcione también es JavaScript, ya que encaja aproximadamente en el mismo nicho. En lugar de tratar de atraerlo a uno u otro (ya que me gustan mucho los dos idiomas), trataré de centrarme en algunas de las diferencias objetivas y señalaré dónde creo que uno está por delante del otro.

Es probable que el problema más importante en un servidor de juegos sea el rendimiento en bruto. Ambos idiomas son maduros y están bien optimizados, pero ambos también reconocen que algunos problemas se optimizan mejor mediante el aplazamiento del código compilado. Ambos lenguajes usan básicamente el mismo mecanismo para realizar esto. Desde el punto de vista de los idiomas, parece que Lua es un poco más rápido. enlace

Desde el punto de vista de las bibliotecas, que es el siguiente factor importante, ninguno de los dos idiomas requiere el uso de bibliotecas para ser útil; Es decir, ambos lenguajes son muy compactos, en comparación con lenguajes como Java que requieren bibliotecas de tiempo de ejecución grandes para ser útiles; Una vez más, esto es una consecuencia de sus requisitos de diseños originales. Ambos idiomas tienen abundantes bibliotecas complementarias para elegir, pero tengo la impresión de que TCL tiene algo más de variedad en esta categoría. tcl :( Tcl Extension Archive / Tcl Extension Repository ) lua: ( LuaForge )

Otra diferencia es entre los lenguajes centrales. Ambos idiomas valoran la simplicidad sobre el estilo, pero ahí es donde termina la similitud. Lua usa lo que podría ser una sintaxis familiar para la mayoría de los programadores, con una gramática libre de contexto muy simple. La sintaxis de TCL también es simple, pero en realidad no tiene nada en común con otros lenguajes existentes, aunque se parece un poco al lenguaje de shell de Unix. Es probable que Tcl solo sea más fácil para los no programadores porque su sintaxis de comandos orientada a líneas es bastante clara, pero los programadores experimentados en otros lenguajes generalmente se oponen a su sintaxis arcana. Ninguno de los dos es terriblemente indulgente en términos de generación de código, pero ambos tienen facilidades de metaprogramación sólidas (comparables, pero quizás no tan robustas como las macros CLISP).

La API de Lua C es extremadamente fácil de integrar en una aplicación. Desde C tiene acceso completo al estado Lua y a sus tipos de datos nativos. He recomendado usar Lua solo para obtener la implementación de la tabla hash, incluso sin necesidad de scripting, por ejemplo.

Las funciones Lua escritas en C se pueden inyectar como nombres globales, recopilarse en una tabla como la mayoría de las funciones de biblioteca estándar, o implementarse en DLL y cargarse dinámicamente en tiempo de ejecución. Eso permite que la aplicación proporcione una API estable, así como que admita complementos escritos en Lua o C.

Lua como lenguaje es sorprendentemente poderoso, con soporte para estilos de programación tanto funcionales como orientados a objetos. También es sorprendentemente ligero: el kit fuente completo y la documentación completa se ajustan a menos de 1 MB, y la VM completa, el compilador y las bibliotecas estándar en una DLL solo tienen 164KB en Windows.

No he examinado seriamente el TCL desde la versión 2 o algo así ... No intentaré compararlos de manera concreta. Creo que ambos fueron inventados para encajar en el mismo nicho, y casi al mismo tiempo. Sin duda, ambos son idiomas maduros con comunidades de usuarios ávidos.

Lua tiene LuaJIT , que es un compilador JIT que alcanza velocidades de C en bucles ajustados y se usa para proyectos como Snabb Switch , donde el rendimiento es crítico (Snabb puede manejar gigabits por segundo, todo procesado a través de LuaJIT). LuaJIT también tiene un FFI fácil de usar que le permite a uno acceder a las funciones de C sin tener que escribir el código de código C.

PUC-Lua (la implementación estándar) admite la recuperación después de quedarse sin memoria. Ni LuaJIT ni TCL lo hacen.

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