¿Por qué Python y no Lua? [cerrado]

45

¿Por qué Python ha sido respaldado por Google y se ha vuelto tan rápidamente popular y Lua no?

¿Sabes por qué Lua se ha quedado en segundo plano?

BenjaminB
fuente
3
A Lua le gusta fingir que las matrices y los diccionarios son lo mismo, y tiene un captador de longitud que no solo puede devolver resultados incorrectos, sino también resultados no deterministas. No sé cuáles son las razones de Google, pero esta es una razón suficiente para que no me guste.
Steve314
44
Para mí, Python es más fácil de codificar, más agradable y tiene más funciones. Algunos ejemplos de la parte superior de mi cabeza: los generadores vienen como ciudadanos de primera clase en Python ( yield), y Lua requiere una configuración más engorrosa. La indexación de la lista de Python [::]es una gran ventaja. Python tiene clases legítimas y herencia. Lua es más rápido, sí, pero en realidad me gusta escribir código Go para usar en Python cuando la velocidad es importante.
Frank Bryce
Me encanta LuaJIT, pero gran parte de mi amor por él es su facilidad de integración, velocidad y huella adolescente. Si tuviera que programar algo durante todo el día, podría inclinarme más hacia Python.
@FrankBryce lo tienes al revés. Los generadores de Python son un subconjunto de las corutinas de Lua. Ver inf.puc-rio.br/~roberto/docs/MCC15-04.pdf
capr

Respuestas:

37

Realmente amo a Lua, pero tiene algunas limitaciones reales, y como otros han mencionado, se derivan principalmente de los orígenes de Lua como un lenguaje de archivo de configuración y luego como un lenguaje de secuencias de comandos incrustado.

Debido al objetivo de mantener a Lua pequeña, solo existe una biblioteca estándar muy pequeña , que solo tiene una funcionalidad básica.

Esto ha llevado a una cultura desafortunada en los círculos de Lua, donde a los desarrolladores de Lua les gusta volver a implementar la funcionalidad que ofrecen las bibliotecas estándar de muchos otros idiomas en lugar de trabajar colectivamente en un conjunto universalmente aceptado de bibliotecas principales.

Cosas como subprocesos múltiples, expresiones regulares, métodos de acceso a archivos independientes de la plataforma e incluso operaciones de bits (hasta 5.2) estaban "no incluidas", ya que harían a Lua mucho más grande y más lento. Seguro que puede hacer que las bibliotecas hagan estas cosas, pero esas tienen mantenedores independientes y niveles de calidad.

No me malinterpretes. Amo a Lua por las mismas razones que acabo de enumerar.

sylvanaar
fuente
54

Simple: Lua tiene más objetivos de "nicho" que Python .

Se piensa que Python es útil como lenguaje de programación general. Por lo tanto, es útil en muchos casos. Cubre muchos tipos de aplicaciones bien conocidas, pero no entra directamente en competencia con otros lenguajes que podrían estar dirigidos a restricciones específicas, sino a la simplicidad de su sintaxis.

Lua está totalmente dirigido a ser un lenguaje de script integrado. Su propósito inicial, incluso si se usa actualmente en otros contextos, como los sistemas de compilación; se incrustará en el software y permitirá una fácil implementación de funciones y estructuras de script específicas del dominio. Es tan minimalista que incluso se puede usar en hardware realmente limitado (usé Lua en NintendoDS), es liviano, fácil de usar, RÁPIDO y es un lenguaje tan minimalista, pero se cree que se extiende mucho dialecto (importando paradigmas como orientación a objetos) están disponibles. Es tan portátil (ANSI C) que puede usarlo en cualquier hardware embebido con una cantidad decente de memoria para el software embebido moderno (si recuerdo bien, el lua vm predeterminado es de alrededor de 400ko y casi nunca crecerá si no crea objetos en bucle) ...)

Por lo tanto, Lua se usa inicialmente en un contexto en el que debe incrustar un lenguaje de script para su aplicación .

Python se usa para ... casi cualquier cosa que no requiera un lenguaje más específico (puedes hacer juegos bastante efectivos usando Python, pero algún tipo de juego de alto rendimiento realmente requiere evitar ese sistema).

Es simplemente que Python se usa en más contextos que Lua. Hasta donde yo sé, aparte de Android (que proporciona soporte para Java y lenguaje nativo), Google no es una compañía de software integrada, por lo que realmente no necesitan Lua en todas partes, mientras que Python es útil para todo lo que hacen (web, sistema de compilación , comunicación, web y web).

Python también se usa en muchos juegos para secuencias de comandos integradas, pero es pesado y más lento que Lua. La sintaxis de Python lo hace más apropiado para juegos grandes que dependen mucho de la información escrita en su estructura de juego (no estoy seguro de que esté claro, pero solo piense que si necesita un "lenguaje completo real" para la creación de secuencias de comandos, incrustar Python podría ser una buena idea, si el rendimiento es bueno para ti). Python no fue hecho para ser incrustado, así que está bien. Un equivalente de Python destinado a ser incrustado en C ++ es Falcon.

Para una comparación extrema, algunos lenguajes que apuntan a la integración e intentan tener una sintaxis más completa que la minimalista Lua, y compiten en rendimiento: ChaiScript, AngelScript, Io ...

Por cierto, he visto que nuevos sistemas de compilación como PreMake o Bam usan Lua como lenguaje de archivo de compilación. La idea es que sea ligero y bien conocido por los desarrolladores de juegos (construir sistemas en el desarrollo de juegos es un problema importante). Entonces tal vez ese es otro dominio donde Lua podría ser más apreciado. Ciertamente es más fácil de usar que la sintaxis de CMake ...

Klaim
fuente
44
Creo que el objetivo de Lua como lenguaje incrustado es probablemente un contribuyente importante. Pero aún así, creo que la "popularidad" de un lenguaje tiene menos que ver con el diseño o la capacidad del lenguaje en sí y más con el "momento y lugar correctos" (ver PHP, por ejemplo).
Dean Harding
Bueno, creo que un lenguaje dirigido a un propósito específico naturalmente atrae a usuarios específicos, haciendo que su audiencia sea más moderada que cualquier lenguaje de propósito general. Tener menos audiencia que los lenguajes de uso general impacta directamente en la cantidad de personas que alguna vez hablarán de ello. Aparte de eso, objetivos específicos significa características específicas. Por lo tanto, no es bueno para todas las situaciones. Aquí, por ejemplo, lua solo no es un muy buen lenguaje de programación gui. Requiere algunas adiciones para ser realmente útil.
Klaim
Dicho esto, estoy totalmente de acuerdo: si php no se usara para un campo tan ampliamente utilizado como el desarrollo de sitios web, ahora no estaría en todas partes.
Klaim
Lua se usa principalmente como lenguaje incrustado, pero es un lenguaje de programación de propósito general, por ejemplo, puede hacer un script CGI con mod_lua. Podría cambiar mi pregunta de por qué lua se quedó como un lenguaje incrustado?
BenjaminB
Porque es su origen. Puede usarlo como un lenguaje de propósito general, sí, ya que también puede usar php para fines generales. También puedes usar Perl para hacer lo mismo. Pero sus orígenes hacen sus orientaciones. Nuevamente, su propósito inicial los hace menos útiles que otros idiomas para idiomas de propósito general. Lua carece de un lenguaje de funciones que sea fácil de usar con el sistema GUI, por ejemplo, como la orientación a objetos (que puede agregar fácilmente, pero no es nativo). Asegúrese de ver la diferencia entre un idioma creado originalmente para un propósito específico y uno general. Todos tienen restricciones de todos modos.
Klaim
4

Puedes hacer todo con Lua, ¿está creado como un lenguaje de script para extender programas? Sí, pero está lejos de estar limitado, hay muchas bibliotecas para Lua, y con las herramientas adecuadas (FFI o tolua de LuaJIT) incluso puede usar una biblioteca C / C ++ en él. La razón que hace que Python sea más utilizado en mi punto de vista es solo la edad, Python se usa como primer idioma en muchos colegios y escuelas, hay más personas que conocen Python que Lua, y es mucho más fácil encontrar una buena biblioteca para Python que para Lua, porque el idioma es más maduro. Además, no sé mucho acerca de Python, pero por lo que sé, es fácil ocultar su código al usuario final, ¿qué pasa en Lua, no es tan fácil, estoy en lo cierto?

Gustavo
fuente