13 puntos por GN⁺ 2025-07-15 | 2 comentarios | Compartir por WhatsApp
  • En el desarrollo de sistemas embebidos, Lua ofrece mayor estabilidad y escalabilidad que MicroPython
  • Lua tiene una estructura fácil de integrar con C, ligera y determinista, y ofrece mayores ventajas en mantenibilidad del código y reducción de costos a largo plazo
  • MicroPython es adecuado para el prototipado rápido, pero encuentra límites en proyectos a gran escala o entornos de producción
  • Lua puede compilarse como un ejecutable pequeño y eficiente, funcionando sin características innecesarias, y ofrece alta escalabilidad y mantenibilidad desde el prototipado hasta la conversión en producto
  • El framework Xedge optimiza Lua para sistemas embebidos y ofrece potentes capacidades de IoT y web

Lua vs. MicroPython en entornos embebidos profesionales

  • En proyectos embebidos profesionales como automatización industrial, dispositivos médicos e IoT comercial, cada vez se prefieren más los entornos de alto nivel pero ligeros
  • MicroPython destaca en el prototipado rápido y el despliegue en campo, pero su ecosistema está centrado principalmente en placas para hobby/educación
  • Las grandes bibliotecas que son fortalezas de Python, como NumPy y pandas, no existen en MicroPython, y su biblioteca estándar también está muy reducida
  • La integración con extensiones en C también es relativamente más compleja en MicroPython
  • Lua adopta como filosofía fundamental la integración con aplicaciones en C
    • Proporciona una API de C estable y minimalista y una máquina virtual de bytecode
    • Permite exponer fácilmente funciones y estructuras de datos en C/C++ a Lua
    • La biblioteca ANSI C de Lua fue diseñada para embebidos, por lo que su estructura es simple, ligera y determinista
  • MicroPython es una reimplementación de Python 3, y al conservar supuestos de un lenguaje orientado al escritorio, sus límites aparecen rápidamente en entornos con recursos restringidos

La integración fluida con C es el núcleo de Lua

  • La mayor ventaja de Lua es su integración fluida con C
  • Su API es estable y minimalista, y permite exponer fácilmente tus propias funciones y estructuras de datos en C/C++ a Lua
  • MicroPython también soporta extensiones en C, pero requiere compilar firmware personalizado y el flujo de trabajo es más complejo
  • En Lua, la integración con C es parte de su filosofía de diseño
    • Es posible usar la API de C de Lua manualmente o aprovechar herramientas de binding automático como SWIG para invocar funciones/estructuras en C desde Lua
    • La lógica donde el rendimiento de C es importante puede quedar en C, mientras que la lógica de negocio de alto nivel puede separarse en Lua para mejorar la mantenibilidad y la escalabilidad

Huella mínima y escalabilidad

  • Lua tiene un intérprete central muy pequeño, y las funciones innecesarias pueden eliminarse fácilmente
  • MicroPython también está optimizado para embebidos, pero su imagen base es más grande y el tamaño aumenta al activar módulos esenciales
  • Ambos son adecuados para el prototipado rápido, pero Lua escala mucho mejor hasta producción
  • Lua facilita diseñar una estructura de separación entre alto y bajo nivel, lo que permite desarrollar prototipos rápidamente y luego evolucionar hacia una arquitectura híbrida mantenible
  • Lua puede combinarse desde el inicio con código en C, por lo que escalar resulta natural y el flujo de desarrollo no se interrumpe
  • En MicroPython, después del prototipo puede ser necesario reescribir la lógica central o chocar con sus límites

Ecosistema y acceso a bibliotecas - Quality Over Quantity

  • MicroPython tiene un ecosistema activo centrado en hardware para hobby/educación, como placas con Wi-Fi, pero carece de bibliotecas clave del gran ecosistema de Python
  • Lua tiene menos bibliotecas, pero puede ampliarse fácilmente con C, por lo que choca menos con los límites del ecosistema

Ventajas en mantenimiento y costos

  • Lua tiene una base de código pequeña, y facilita las pruebas, depuración y transferencia de conocimiento
  • A medida que el proyecto crece, mantiene la separación por capas entre scripts en Lua y el núcleo en C, lo que favorece la entrega y la colaboración
  • MicroPython también tiene alta legibilidad, pero a medida que el proyecto crece, el código del sistema y la capa de scripting tienden a mezclarse, lo que puede elevar los costos de mantenimiento

Conclusión: Choose What Scales

  • Para educación y prototipado, MicroPython también es una excelente opción
  • Para productos embebidos donde la seguridad, la confiabilidad y el mantenimiento son importantes, Lua es más práctico y ofrece escalabilidad, flexibilidad y estabilidad al mismo tiempo
  • Lua no es solo un lenguaje de scripting, sino una estrategia de desarrollo embebido

Cómo integrar la biblioteca C de Lua en dispositivos embebidos

  • La biblioteca C de Lua es ligera, compatible con ANSI C y casi no tiene dependencias más allá de la biblioteca estándar de C
  • Es adecuada para sistemas bare-metal y basados en RTOS, aunque al hacer el port hay que prestar atención a algunos elementos del C estándar, como stdin/stdout
  • Xedge Framework de Real Time Logic

    • El Xedge Framework ofrece un runtime de Lua y un conjunto de APIs optimizados para entornos embebidos
    • Integra funciones de IoT/web como comunicaciones seguras con TLS, MQTT5, WebSocket, servicios web RESTful, procesamiento de datos en tiempo real y protocolos Modbus/OPC UA
    • Mantiene la flexibilidad y ligereza de Lua, al tiempo que ofrece un framework embebido completo listo para uso real en producción
  • Si se quiere integrar Lua en un producto embebido, Xedge es la opción más práctica, ya que simplifica la integración, acelera el desarrollo y permite enfocarse en la lógica diferenciadora

2 comentarios

 
cnaa97 2025-07-15

Para empezar, los fabricantes de componentes que producen el equipo casi no ofrecen buen soporte ni para Lua ni para Python. ¿A lo mucho C?

 
GN⁺ 2025-07-15
Opiniones de Hacker News
  • Cuando decidí crear un motor de juegos y escribir todo el juego en un lenguaje de scripting, estuve evaluando tres opciones: JavaScript (QuickJS), Python (Boost.Python) y Lua (Sol2)
    Integrar Lua es realmente fácil, y usarlo junto con un wrapper de C++ también es muy sencillo
    En poco tiempo terminé con un motor que me hizo pensar: "esto ya se puede usar de inmediato"
    Además, la VM de Lua es muy ligera
    Se pueden ver más detalles en el proyecto carimbo

    • Me gusta que cuando un motor o una aplicación soporta Lua como lenguaje de scripting, también puedes usar Fennel
      Fennel es un lenguaje que transpila a Lua
      Enlace oficial de Fennel

    • Personalmente, creo que Boost.Python no es muy bueno como herramienta de scripting
      Pienso que eso también puede influir en la decisión

    • Me da curiosidad si Sol2 es una VM de Lua, o si solo es un wrapper para la VM estándar de Lua

  • Me cuesta aceptar la frase "Lua no es solo un lenguaje de alto nivel simple, sino una estrategia de desarrollo embebido"
    Me cuesta tomar en serio un texto que use ese tipo de expresiones

    • En general, el texto transmite una sensación de "he usado Lua durante mucho tiempo, así que ya puedo sacar conclusiones"
      Pero no parece tener mucha experiencia real con MicroPython, y hay varias críticas exageradas
      Por ejemplo, la afirmación de que "en el proyecto MicroPython el código del sistema y la capa de scripting están mezclados y eso dificulta el mantenimiento" tiene una base débil
      Eso podría deberse al lenguaje o a la gestión del proyecto / diseño de la estructura, así que creo que la causa debería evaluarse con más rigor

    • Este texto se siente más como publicidad del framework Xedge Lua que como un artículo real
      Es simplemente un anuncio

    • En general, el texto tiene estilo de chatgpt
      En el caso de un texto publicitario, no parece importar mucho si lo escribió una persona o un LLM

    • Como también mencionaron en los comentarios, tenía una vibra de chatgpt, así que leerlo no fue muy agradable

  • En la lista PLDB Top 1000, Lua está mejor posicionado que MicroPython
    En esta comparación, el usuario de Github SkipKaczinksi considera que Lua suele ser más rápido
    Michael Polia, en un artículo de Hackaday, también menciona que Lua es pequeño y rápido
    El lenguaje Toit afirma ser 30 veces más rápido que MicroPython
    El fundador de Toit fue uno de los primeros responsables del desarrollo de V8

  • Hace falta distinguir entre "embedded" y "embeddable"
    MicroPython se usa en plataformas embebidas, pero no es un "runtime integrable" en aplicaciones existentes como Lua
    El objetivo de MicroPython es reemplazar el runtime tradicional de C, inicializar con un wrapper mínimo en C y luego escribir el resto de la lógica de negocio en scripts de MicroPython
    No tiene una estructura como lua_State, ni permite usar varios intérpretes al mismo tiempo o hacer sandboxing
    Es decir, MicroPython está más optimizado para "leer datos de sensores con Python en una placa IoT" que para "desarrollo iterativo rápido con scripts dentro de un motor de juegos"

    • MicroPython no es integrable como Lua, pero tampoco es completamente imposible
      No funciona del todo de forma directa, y sí requiere algo de glue code
      Como referencia, se puede ver este ejemplo del puerto embed
  • Creo que Lua también es un excelente lenguaje para uso embebido
    También me parecen buenos los productos basados en Lua, pero este texto no convence mucho en su argumento de "por qué Lua vence a MicroPython"
    Extender MicroPython con C es más fácil de lo que parece, y los módulos externos se desarrollan igual que los módulos oficiales
    Por eso, no es difícil agregarlos en un build personalizado del firmware
    Y aunque se criticó que no se pueden usar bibliotecas del ecosistema Python como numpy, en la práctica también existe la biblioteca ulab, que reimplementa partes de numpy y scipy

  • Personalmente, lo que escuché me suena a discurso de marketing
    Si en un microcontrolador hay suficientes recursos, uso micropython
    Si el control de energía, memoria y CPU es realmente crítico, al final uso C/C++
    El desarrollo relacionado con redes es difícil en C/C++, pero han faltado opciones para hacerlo de forma rápida y segura (aunque supongo que últimamente el soporte integrado de TLS habrá mejorado)
    Lua se siente como una envoltura amigable para C
    Está bien si hay muchas bibliotecas, pero sigue existiendo la carga de portar por cuenta propia el toolchain de Lua, el toolchain del microcontrolador y todas las bibliotecas necesarias
    Por eso, si esto es un texto de marketing, creo que el mensaje es usar el producto Xedge y subcontratar ese trabajo

    • Sobre eso de que "para usar micropython necesitas recursos holgados"
      alguien solo respondió brevemente que también corre bien hasta en el 2350
  • Me pregunto si realmente hay gente que use micropython o lua "seriamente" para desarrollo embebido

    • Llevo casi 20 años como freelance creando productos embebidos centrados en Lua
      He usado Lua en áreas muy diversas, como dispositivos VOIP, automatización del hogar, routers industriales y grabadores de video digital
      Normalmente el sistema está compuesto por el kernel de Linux, libc, el intérprete de Lua y algunas bibliotecas externas
      El código fuente de las aplicaciones en Lua suele tener entre 30 mil y 100 mil líneas, y hoy en día incluso hay productos "pequeños" de ese tipo (flash de 8 MB, RAM de 64 MB, etc.)
      Lua funciona bien en ese entorno
      Todos son productos en uso real y además generan dinero para los clientes
      La integración entre Lua y C es muy sencilla, y para trabajo asíncrono Lua resolvió desde hace mucho cosas con las que los lenguajes modernos todavía siguen lidiando
      El lenguaje es simple pero potente, y con corrutinas, closures y metatables permite usar varios paradigmas
      En proyectos de esta escala, seguiría eligiendo la combinación Lua + C/C++
      He probado otros ecosistemas (Elixir, Rust, Nim), pero no he encontrado un lenguaje tan potente y flexible como Lua

    • Nosotros incluso desarrollamos dispositivos médicos clase B con MicroPython

    • El mundo embebido tiene un alcance muy amplio
      Si se trata de algo sensible a la seguridad, por normativa puede que no se pueda usar, pero en equipos de prueba, por ejemplo, como no hay esas restricciones, se usa lo que resulte más cómodo
      También en IoT, en general cada quien usa lo que le resulta más práctico

    • MicroPython realmente se usa incluso en misiones satelitales, como cubesats
      Hay casos relacionados en conferencias y podcasts

    • Miles de productos usan Lua internamente, aunque sea solo en alguna parte
      Hace poco también revisé LuaJIT y me parece subestimado

  • Creo que la mayoría de los "desarrolladores embebidos serios" usan lenguajes compilados

    • Al final se compila a bytecode, así que en cierto sentido también podría verse como un lenguaje compilado
  • Como hobby, simplemente uso Arduino (Platformio)
    En microcontroladores, compilar y flashear toma poco tiempo, así que realmente no hace falta un intérprete
    Algún día me gustaría probar otro lenguaje compilado que pueda reemplazar a C++
    Me pregunto si habrá algún lenguaje recomendado que funcione bien en Raspberry Pi Pico

    • No soy un experto, pero siento que Rust es una de las alternativas más populares
      Está de moda, corrige muchos de los problemas de C++ y sus herramientas son bastante decentes
      Zig también se ve interesante y me gustaría probarlo
      Raspberry Pi tiene buenas especificaciones, así que incluso pueden funcionar lenguajes que no sean de sistemas
      También me gusta Kotlin, y aunque normalmente requiere la JVM, puede compilarse en modo nativo
      Eso sí, en Pico tal vez tengas que controlar GPIO tocando directamente el sistema de archivos (y además no estoy seguro del soporte de Kotlin en Pico)

    • Nim parece una opción bastante buena
      Como referencia, se puede ver el soporte de Nim en picostdlib

  • Lua es, en esencia, un lenguaje mucho más simple
    Python sostiene la idea de "solo hay una forma de hacerlo", pero en la práctica se siente más como una "navaja suiza" donde hay un poco de todo
    Eso hace que sea más fácil empezar y desarrollar gracias a su gran cantidad de bibliotecas
    Pero no encaja tan bien en entornos pequeños con pocos recursos
    Hay un límite para convertir a la fuerza una silla elegante en una silla Eames hecha de tablas

    • Python es fácil y Lua es simple
      El problema de la "facilidad" es que la complejidad interna queda oculta, mientras que la "simplicidad" implica que el usuario debe poner más esfuerzo

    • Python tiene compatibilidad de versiones débil, así que al pasar de 3.x a 3.x+1 suelen aparecer problemas
      Lua tampoco es perfecto, pero aun así tiene la ventaja de que hay muchos casos de soporte para varias versiones de Lua, por lo que no te ves forzado a actualizaciones de versión tan bruscas