python - sirve - Lua como un lenguaje de scripting de propósito general?
que se puede hacer con python (11)
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".
¿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 muy 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 siendo utilizada como un "lenguaje de scripting de escritorio" para automatizar tareas? Por ejemplo:
- Cambiar el nombre de un grupo de archivos
- Descargue algunos archivos de la web
- Webscraping
¿Es la falta de la biblioteca estándar?
El hecho de que se "comercialice" (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.
Probablemente sea porque Lua fue diseñado como un lenguaje de scripting y extensión. En el sitio oficial se describe como un lenguaje de scripting potente, rápido, ligero e integrable. No hay nada que te impida escribir programas de propósito general para él (si mal no recuerdo se envía con un intérprete y compilador), pero los diseñadores del lenguaje pensaron que se usaría principalmente como un lenguaje incrustado (por lo tanto, era liviano y todo)
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.
La falta de una biblioteca estándar. Período. Incluso el listado 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 requiera POSIX) pero el resultado es que, para la programación general, prefiero Python.
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 para 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 de Linux incluyen 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".
Utilizo 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 API que son necesarias para 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.
Lua se utiliza en LuaTeX , una extensión de TeX, como un lenguaje incrustado, y ha ganado popularidad rápidamente entre los desarrolladores de TeX debido a eso. Se utiliza 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 Lua (con algunos módulos vitales agregados - slnunicode, luafilesystem, etc.) Eso es muy importante para las instalaciones de Windows, que se basaron en herramientas de scripts adicionales de Unix anteriormente (ActivePerl, etc.) El lenguaje de macros ConTeXt usa extensamente los scripts de Lua hoy en día.
Es cierto que es un campo muy especial :-) ¡Pero sin relación con los juegos!
Lua tiene menos bibliotecas que Python. Pero asegúrese de echarle un vistazo a LuaForge . Tiene muchas librerías interesantes, como LuaCURL , wxLua o getopt .
Luego, visite LuaRocks , el sistema de administració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 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.
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 bibliotecas estándar, sería más difícil integrarlas (debido a las dependencias y la huella de memoria).
Definitivamente una falta de bibliotecas estándar. También es menos conocido que Python, Perl o Ruby.
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 caparazón. Esto incluye trucos como
- Citando una cadena para que se vea como una palabra por el intérprete de comandos
- Escribir una función para capturar la salida de un comando como en shell $ (comando)
- Escribir una función para rastrear el sistema de archivos utilizando la biblioteca Lua posix y expandir los patrones globbing del shell
(Para aquellos que puedan estar interesados, he dejado el código en mi buzón de Lua , que también contiene otras cosas. Lo más interesante es probablemente en osutil
en os.quote
, os.runf
, os.capture
, y quizás os.execve
. El globbing está en posixutil.lua
. Ambos usan la biblioteca Lua Posix de Luiz Henrique de Figuereido.)
Para mí, el esfuerzo extra lo vale porque puedo manejar la sintaxis simple y las excelentes estructuras de datos. Para otros, se puede preferir una conexión más directa con el caparazón.
¡Lua es un lenguaje genial, liviano y extremadamente rápido!
Pero el punto es: ¿el rendimiento es tan importante para las tareas que mencionaste?
- Cambiar el nombre de un grupo de archivos
- Descargue algunos archivos de la web
- Webscraping
Usted escribe esos programas una vez, y los ejecuta una vez, también tal vez. ¿Por qué te importa tanto el rendimiento para un programa run-once?
Por ejemplo:
- Cuesta 3 horas escribir un programa C / C ++, para manejar los datos una vez, el programa tardará 1 hora en ejecutarse.
- Coste de 30 minutos para escribir un programa de Python para manejar los datos una vez, el programa tardará 10 horas en ejecutarse.
Si elige el primero, ahorra tiempo para ejecutar el programa, pero le cuesta tiempo desarrollar el programa.
Por otro lado, si eliges el segundo, pierdes tiempo para ejecutar el programa, pero puedes hacer otras cosas cuando el programa se está ejecutando. ¿Qué tal jugar World of Warcraft, matar monstruos con tu brujo? ¡Come mi DOT ! :PAG
¡Eso es! 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 no depende del 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 tantos excelentes módulos de Python; No tengo ninguna razón para construir el mío.
De acuerdo con mi experiencia sobre webscraping, elegí Twisted para I / O de red y lxml para analizar html como back-end de mi programa webscraping. He escrito un artículo para una introducción a esta tecnología.
La mejor opción para captar datos de sitios web: Python + Twisted + lxml
Espero que esto sea útil.