Pregunta

Cuando veo a Lua, lo único que he leído es "genial para incrustar", "rápido", "ligero" y más a menudo que cualquier otra cosa: " World of Warcraft " o en breve " WoW " ;.

¿Por qué se limita a incrustar todo en otra aplicación? ¿Por qué no escribir scripts de propósito general como lo hace con Python o Perl?

Lua parece estar funcionando muy bien en aspectos como la velocidad y el uso de la memoria (el lenguaje de scripting más rápido), ¿por qué es que nunca veo a Lua como un "lenguaje de scripting de escritorio"? automatizar tareas? Por ejemplo:

  • Cambiar el nombre de un grupo de archivos
  • Descarga algunos archivos de la web
  • Webscraping

¿Es la falta de la biblioteca estándar?

¿Fue útil?

Solución

Simplemente porque se comercializa " " (en un sentido general) como un lenguaje de propósito especial para los motores de secuencias de comandos incorporados, no significa que esté limitado a eso. De hecho, WoW probablemente podría haber elegido Python tanto como su lenguaje de scripting incorporado.

Otros consejos

¡Lua es un lenguaje genial, ligero y extremadamente rápido!

Pero el punto es: ¿El rendimiento es tan importante para aquellos? tareas que mencionaste?

  • Cambiar el nombre de un grupo de archivos
  • Descarga algunos archivos de la web
  • Webscraping

Usted escribe esos programas una vez y los ejecuta una vez, quizás también. ¿Por qué te importa tanto el rendimiento de un programa run-once?

Por ejemplo:

  1. El costo de 3 horas para escribir un programa C / C ++, para manejar los datos una vez, el programa tardará 1 hora en ejecutarse.
  2. El costo de 30 minutos para escribir un programa Python para manejar datos una vez, el programa tardará 10 horas en ejecutarse.

Si elige el primero, ahorra tiempo para ejecutar el programa, pero le cuesta su tiempo desarrollar el programa.

Por otro lado, si elige el segundo, perderá tiempo para ejecutar El programa, pero puede hacer otras cosas cuando el programa es corriendo. ¿Qué tal si juegas World of Warcraft, mata monstruos? con tu brujo? Comer mi D.O.T ! : P

Eso es todo! Aunque Lua no es tan difícil de escribir, todo sobre Lua está diseñado para ser eficiente. Y, además, hay pequeños módulos para Lua, pero hay muchos módulos para Python. No desea portar una biblioteca de C para Lua solo para un programa de ejecución una sola vez, ¿verdad? En su lugar, elegir Python y usar esos módulos para lograr su tarea fácilmente podría ser una mejor idea.

FYI: En realidad, he tratado de usar Lua para hacer webscraping, pero, finalmente, me di cuenta de que no tengo que preocuparme tanto por el rendimiento del lenguaje. El cuello de botella de webscraping es no en el rendimiento del lenguaje . El cuello de botella está en Red de E / S, análisis de HTML y multitarea. Todo lo que tengo que hacer Asegúrese de que el programa funcione y encuentre el cuello de botella. Finalmente, elegí Python en lugar de Lua. Hay tan muchos excelentes módulos de Python; No tengo ninguna razón para construir mi propio.

Según mi experiencia sobre webscraping, elegí Torcido para la red de E / S y lxml para el análisis de HTML como el backend de mi programa de webscraping. He escrito un artículo para una introducción a esta tecnología.

La mejor opción para obtener datos de sitios web: Python + Twisted + lxml

Espero que esto sea útil.

Lua tiene menos bibliotecas que Python. Pero asegúrese de echar un vistazo a LuaForge . Tiene muchas bibliotecas interesantes, como LuaCURL , wxLua o getopt .

Luego, visite LuaRocks , el sistema de administración de paquetes para Lua. Con él, puede buscar e instalar la mayoría de los módulos Lua maduros con dependencias. Se siente como RubyGems o aptitude .

El sitio lua-users.org también tiene muchos recursos interesantes, como tutoriales o Lua Wiki .

Lo que me gusta de Lua no es su velocidad, es su lenguaje básico mínimo, flexibilidad y extensibilidad.

Dicho esto, probablemente usaría Python para las tareas que mencionaste debido a que la comunidad en general hace esas cosas en Python.

Probablemente se deba a que Lua fue diseñado como un lenguaje de scripting y extensión. En el sitio oficial se describe como un lenguaje de secuencias de comandos potente, rápido, ligero y que se puede insertar. No hay nada que le impida escribir programas de propósito general para él (si recuerdo correctamente, se envía con un intérprete y compilador), pero los diseñadores de lenguaje intentaron que se usara principalmente como un lenguaje incrustado (por lo tanto, es ligero y todo)

Esta es una pregunta sociológica, no una pregunta de programación.

Uso Lua para scripts de propósito general casi exclusivamente. Pero tuve que escribir unos cientos de líneas de código para que Lua jugara mejor con el shell. Esto incluía trucos como

  • Citar una cadena para que sea vista como una sola palabra por el shell
  • Escribiendo una función para capturar la salida de un comando como en shell $ (comando)
  • Escribiendo una función para rastrear el sistema de archivos usando la biblioteca de Lua posix y expandiendo los patrones de shell globbing

(Para aquellos que puedan estar interesados, he dejado el código en mi Lua drop box , que también contiene otras cosas. Lo interesante está probablemente en osutil en os.quote , os.runf , os.capture , y tal vez os.execve . El globo está en posixutil.lua . Ambos usan el biblioteca de Lua Posix .)

Para mí, el esfuerzo adicional vale la pena porque puedo manejar la sintaxis simple y las grandes estructuras de datos. Para otros, podría preferirse una conexión más directa con el shell.

Definitivamente una falta de bibliotecas estándar También es menos conocido que Python, Perl o Ruby.

Ha habido un impulso reciente para crear una instalación de baterías incluidas para Lua en Windows. El resultado se puede encontrar en el proyecto Lua para Windows en LuaForge. Incluye el intérprete y una gran colección de módulos adicionales que permiten escribir y utilizar scripts útiles de forma inmediata.

Sé que varias distribuciones de Linux incluyen Lua y algunos módulos ahora, y más por venir.

También hay un par de bibliotecas de módulos propuestos en discusión en la lista de correo, pero la comunidad aún no se ha conformado con uno como el " oficial " mecanismo.

Uso Lua tanto como lenguaje de scripting como " main " bucle de mi aplicación típica, compatible con uno o más archivos DLL que contienen código que se implementó mejor en C, o envolviendo bibliotecas existentes o funciones de API que son necesarias para un proyecto en particular. Se utiliza con un kit de herramientas GUI como IUP o wxLua (un enlace de Lua para wxWindows), Lua hace que escribir aplicaciones de GUI de tamaño pequeño a mediano sea bastante agradable.

Creo que la respuesta es que es un " marketing " La cosa es probablemente correcta, junto con la falta de un gran conjunto de bibliotecas para elegir. Me gustaría señalar otro caso de esto: Ruby. Ruby está destinado a ser un lenguaje de scripting de propósito general. El problema es que, dado que Ruby on Rails se ha vuelto tan popular, se está volviendo difícil encontrar algo que no esté relacionado con Rails. Me temo que Lua también sufrirá esto, ya que es popular debido a algunas cosas importantes que lo usan, pero nunca es capaz de liberarse de ese estigma.

Falta de biblioteca estándar. Período. Incluso la lista de todos los archivos en un directorio requiere un módulo no estándar .

Hay buenas razones para eso (mantener una portabilidad ANSI estricta, que no requiere POSIX) pero el resultado es que, para la programación general, prefiero Python.

Lua se usa en LuaTeX , una extensión de TeX, como lenguaje incrustado, y ha ganado popularidad rápidamente entre los desarrolladores de TeX por eso. Se usa como un lenguaje de scripting para algunas utilidades en la distribución de TeX Live, ya sea solo porque ahora hay un binario luatex , disponible en todas las plataformas, que también se puede usar como un intérprete de Lua (con se agregaron algunos módulos vitales & # 8211; slnunicode, luafilesystem, etc.) Eso es muy importante para las instalaciones de Windows, que se basaron en herramientas de scripts Unix adicionales anteriormente (ActivePerl, etc.) El lenguaje de macros ConTeXt usa los scripts Lua ampliamente en la actualidad.

Es cierto que es un campo muy especial :-) ¡Pero no tiene nada que ver con los juegos!

Para que Lua sea fácil de incrustar, debe tener pocas dependencias y ser pequeño. Eso lo hace poco adecuado como un lenguaje de scripting de propósito general. Porque utilizarlo como un lenguaje de script de propósito general requeriría muchas bibliotecas estándar. Pero si Lua tuviera muchas bibliotecas estándar, sería más difícil de incrustar (debido a las dependencias y la huella de memoria).

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