2008-10-30 16 views
33

Cuando veo a Lua, lo único que leo es "genial para incrustar", "rápido", "liviano" y más a menudo que cualquier otra cosa: "World of Warcraft" o en pocas palabras "WoW".Lua como lenguaje de scripting de propósito general?

¿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?

Parece que Lua se está desempeñando bien en aspectos como la velocidad y el uso de la memoria (el lenguaje de scripting más rápido), ¿por qué nunca veo a Lua como un "lenguaje de scripting de escritorio" para automatizar tareas? Por ejemplo:

  • Cambiar el nombre de un montón de archivos
  • descargar algunos archivos de la Web
  • web scraping

¿Es la falta de la biblioteca estándar?

+6

Escriba títulos de preguntas que estén alineados con el contenido de su pregunta. Si la respuesta intuitiva al título de su pregunta es "Sí", pero la respuesta intuitiva al texto de su pregunta es "Bueno, nadie implementó un buen corredor de ejecución de scripts independiente para LUA", entonces el título de la pregunta no es realmente bueno. Es como tener un título de "¿Son las vacas dioses?" y luego un cuerpo de preguntas como "Cuando bebo leche, siento ganas de vomitar, ¿por qué es eso?". –

Respuesta

10

El hecho de que esté "comercializado" (en un sentido general) como un lenguaje de propósito especial para motores de scripts incrustados, no significa que esté limitado a eso. De hecho, WoW podría haber elegido Python como su lenguaje de scripts incorporado.

+14

No creo que Python sea una buena opción. La diferencia entre Lua y Python para la incrustación es que la semántica de Lua está diseñada para minimizar los problemas que funcionan junto con otros códigos, mientras que Python generalmente asume que es control. –

9

Probablemente se deba a que Lua fue diseñado como lenguaje de scripting y extensión. En el official site se describe como un lenguaje de scripts potente, rápido, ligero e integrable. No hay nada que te impida escribir programas de propósito general (si mal no recuerdo se envía con un intérprete y compilador), pero los diseñadores del lenguaje pretendían que se utilizara principalmente como un lenguaje incrustado (por lo tanto, era liviano y todo)

6

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

34

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

Pero el punto es: ¿El rendimiento es tan importante para las tareas que usted mencionó?

  • Cambiar el nombre de un montón de archivos
  • descargar algunos archivos de la Web
  • web scraping

Usted escribe esos programas una vez, y ejecutar una vez, tal vez demasiado. ¿Por qué te importa tanto el rendimiento de un programa de ejecución única?

Por ejemplo:

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

Si elige la primera, ahorra tiempo para ejecutar el programa, pero le costó el tiempo para desarrollar el programa.

Por otro lado, si elige el segundo, pierde el tiempo para ejecutar el programa , pero puede hacer otras cosas cuando se ejecuta el programa . ¿Qué le parece jugar World of Warcraft, matar monstruos con su brujo? ¡Coma 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 lo que es más, hay pequeños módulos para Lua, pero hay muchos módulos para Python. Usted no quiere portar una biblioteca de C para Lua solo para un programa de ejecutar una vez, ¿verdad? En cambio, 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 me tiene que importar demasiado el rendimiento del lenguaje. El cuello de botella de webscraping es no en el rendimiento del lenguaje. El cuello de botella está en E/S de red, análisis de HTML y multitarea. Todo lo que tengo que hacer es asegurarme de que el programa funcione y encontrar el cuello de botella. Finalmente, elegí Python en lugar de Lua. Hay tan muchos módulos excelentes de Python; No tengo ninguna razón para construir mi propio .

De acuerdo a mi experiencia sobre web scraping, he elegido torcida para la red de E/S y lxml de análisis de HTML como backend de mi programa web scraping. He escrito un artículo para una introducción a esta tecnología.

The best choice to grab data from websites: Python + Twisted + lxml

la esperanza que esto sea útil.

+5

Una buena respuesta, aunque estoy tratando de pensar en qué esquema de uso de un solo loco podría ocurrir que se ejecute 10 veces más lento en un Python que en C ... la mayoría de estos guiones únicos tienden a estar limitados por disco de todos modos. –

+0

@TM, de acuerdo. Y, en general, puede usar algunas de las 2.5 horas ahorradas para usar un mejor algoritmo y terminar ejecutando más rápido que C de todos modos, sin mencionar que tiene más confianza de que funciona correctamente y es más fácil de mantener. –

3

Creo que la respuesta acerca de que se trata de una cuestión de "marketing" 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 ha llegado a ser tan popular, cada vez es más difícil encontrar algo que no esté relacionado con Rails. Me temo que Lua sufrirá esto también, siendo popular debido a algunas cosas importantes que lo usan, pero nunca capaz de liberarse de ese estigma.

22

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

Luego, visite LuaRocks, el sistema de gestión de paquetes para Lua. Con él, puede buscar e instalar módulos de Lua más maduros con dependencias. Se siente como RubyGems o aptitude.

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

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

Dicho esto, probablemente usaría Python para las tareas que mencionó debido a la gran comunidad que hace tales cosas en Python.

8

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

Utilizo Lua para scripting 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 caparazón. Esto incluyó trucos tales como

  • Citando una cadena por lo que es visto como una palabra por el shell
  • Escribir una función para capturar la salida de un comando como en la cáscara $ (comando)
  • Escribir una función para rastrear el sistema de archivos utilizando la biblioteca POSIX Lua y ampliar patrones de englobamiento del shell

(para aquellos que puedan estar interesados, he dejado el código en mi Lua drop box, que también contiene algunas otras cosas. el material interesante es probablemente en osutil en os.quote, os.runf, os.capture, y tal vez os.execve. El globbing está en posixutil.lua. Ambos usan el Lua Posix library de Luiz Henrique de Figuereido.)

Para mí, el esfuerzo extra lo vale porque puedo manejar la sintaxis simple y las estructuras de datos excelentes. Para otros, se puede preferir una conexión más directa con el caparazón.

+0

¿Tiene algún enlace a esos cientos de líneas de código en alguna parte? – RyanE

+0

@RyanE: ¡vinculado! –

4

Falta de biblioteca estándar. Período. Incluso enumerar todos los archivos en un directorio requiere a non-standard module.

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

4

Ha habido un impulso reciente para crear una instalación incluida con baterías para Lua en Windows. El resultado se puede encontrar en el proyecto Lua for Windows en LuaForge. Incluye el intérprete y una gran colección de módulos adicionales que permiten que las secuencias de comandos y aplicaciones útiles se escriban y utilicen de forma inmediata.

Sé que varias distribuciones Linux están incluyendo Lua y algunos módulos ahora, y más por venir.

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

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

+0

¿Qué kit de herramientas GUI prefieres, IUP o wxLua? – Jimmy

+0

@Jimmy, personalmente, he usado IUP para varios proyectos pequeños y he estado muy contento con él. Su mayor fortaleza es también su debilidad: le gusta hacer su propio diseño de controles con un modelo de cajas y pegamento, por lo que es muy fácil especificar un cuadro de diálogo lleno de controles, pero difícil hacer que su diseño coincida perfectamente con otros diálogos con un diferente mezcla de controles. Probé las demos de wxLua, y es claramente un producto de calidad, pero no he tenido un motivo personal para cambiar. – RBerteig

3

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

3

Lua se usa en LuaTeX, una extensión TeX, como lenguaje incrustado, y ha ganado popularidad rápidamente entre TeX desarrolladores debido a eso. Se usa como lenguaje de scripting para algunas utilidades en la distribución de TeX Live, ya sea porque ahora hay un binario luatex, disponible en todas las plataformas, que también se puede usar como un intérprete de Lua (con algunos módulos vitales agregados - slnunicode, luafilesystem, etc.) Eso es muy importante para las instalaciones de Windows, que se basaron anteriormente en otras herramientas de scripting de Unix (ActivePerl, etc.). El lenguaje de macro ConTeXt usa extensamente los scripts de Lua hoy en día.

Sin duda, es un campo muy especial :-) ¡Pero sin relación con los juegos!

Cuestiones relacionadas