13 pontos por GN⁺ 2025-07-15 | 2 comentários | Compartilhar no WhatsApp
  • No desenvolvimento de sistemas embarcados, Lua oferece mais estabilidade e escalabilidade do que MicroPython
  • Lua tem uma estrutura de integração fácil com C, leve e determinística, trazendo mais vantagens em manutenibilidade do código e redução de custos no longo prazo
  • MicroPython é adequado para prototipagem rápida, mas encontra limites em projetos de grande porte ou ambientes de produção
  • Lua pode ser compilada em um executável pequeno e eficiente, operando sem recursos desnecessários, com alta escalabilidade e facilidade de manutenção da prototipagem ao produto final
  • O framework Xedge otimiza Lua para sistemas embarcados e oferece recursos robustos de IoT e web

Lua vs. MicroPython em ambientes embarcados profissionais

  • Em projetos embarcados profissionais como automação industrial, dispositivos médicos e IoT comercial, há uma preferência crescente por ambientes de alto nível, mas leves
  • MicroPython se destaca em prototipagem rápida e implantação em campo, mas seu ecossistema é centrado principalmente em placas hobby/educacionais
  • Grandes bibliotecas que são pontos fortes do Python, como NumPy e pandas, não existem no MicroPython, e a biblioteca padrão também é bastante reduzida
  • A integração com extensões em C também é relativamente mais complexa no MicroPython
  • Lua adota como filosofia central a integração com aplicações em C
    • Fornece uma API C estável e minimalista e uma máquina virtual de bytecode
    • Permite expor facilmente funções e estruturas de dados em C/C++ para Lua
    • A biblioteca ANSI C do Lua foi projetada para embarcados, com uma estrutura simples, leve e determinística
  • MicroPython é uma reimplementação do Python 3 e ainda carrega pressupostos de uma linguagem voltada ao desktop, por isso as limitações aparecem rapidamente em ambientes com recursos restritos

A integração transparente com C é o núcleo do Lua

  • A maior vantagem do Lua é a integração fluida com C
  • A API é estável e minimalista, e permite expor facilmente suas próprias funções e estruturas de dados em C/C++ ao Lua
  • MicroPython também oferece suporte a extensões em C, mas exige build de firmware customizado e um fluxo de trabalho mais complexo
  • No Lua, a integração com C faz parte da própria filosofia de design
    • É possível usar a API C do Lua manualmente ou recorrer a ferramentas de binding automático como SWIG para chamar funções/structs em C a partir do Lua
    • A lógica crítica para desempenho pode ficar em C, enquanto a lógica de negócio de alto nível pode ficar em Lua, aumentando manutenibilidade e escalabilidade

Footprint mínimo e escalabilidade

  • Lua tem um interpretador central muito pequeno, e recursos desnecessários podem ser removidos com facilidade
  • MicroPython também é otimizado para embarcados, mas a imagem base é maior e o tamanho cresce ao ativar módulos essenciais
  • Ambos são adequados para prototipagem rápida, mas Lua escala melhor até a produção
  • Lua facilita projetar uma estrutura com separação entre alto e baixo nível, permitindo evoluir rapidamente de um protótipo para uma arquitetura híbrida sustentável
  • Lua já nasce integrado ao código C, então o scale-up é natural e o fluxo de desenvolvimento não é interrompido
  • Com MicroPython, pode ser necessário reescrever a lógica central depois do protótipo, ou esbarrar em limitações

Ecossistema e acesso a bibliotecas - Quality Over Quantity

  • MicroPython tem um ecossistema ativo centrado em hardware hobby/educacional, como placas com Wi‑Fi, mas carece das principais bibliotecas do grande ecossistema Python
  • Lua tem menos bibliotecas, mas pode ser estendido facilmente em C, sofrendo menos com limitações do ecossistema

Vantagens em manutenção e custos

  • Lua tem uma base de código menor e facilita testes, depuração e transferência de conhecimento
  • À medida que o projeto cresce, é mais fácil manter a separação em camadas entre scripts Lua e núcleo em C, favorecendo handoff e colaboração
  • MicroPython também é altamente legível, mas conforme o projeto cresce, o código de sistema e a camada de scripting tendem a se misturar, o que pode elevar os custos de manutenção

Conclusão: Choose What Scales

  • Para educação e prototipagem, MicroPython também é uma excelente escolha
  • Para produtos embarcados em que segurança, confiabilidade e manutenção são importantes, Lua é mais prático e oferece escalabilidade, flexibilidade e estabilidade ao mesmo tempo
  • Lua não é apenas uma linguagem de script, mas uma estratégia de desenvolvimento embarcado

Como integrar a biblioteca C do Lua em dispositivos embarcados

  • A biblioteca C do Lua é leve, compatível com ANSI C e quase não tem dependências além da biblioteca C padrão
  • É adequada para sistemas bare metal e baseados em RTOS, embora alguns elementos do C padrão, como stdin/stdout, exijam atenção no porting
  • Xedge Framework da Real Time Logic

    • O Xedge Framework fornece um runtime Lua e um conjunto de APIs otimizados para ambientes embarcados
    • Inclui recursos de IoT/web, como comunicação segura com TLS, MQTT5, WebSocket, serviços web RESTful, processamento de dados em tempo real e protocolos como Modbus/OPC UA
    • Mantendo a flexibilidade e leveza do Lua, oferece ao mesmo tempo um framework embarcado completo, pronto para uso em produção
  • Para embutir Lua em um produto embarcado, o Xedge é a opção mais prática, simplificando a integração, acelerando o desenvolvimento e permitindo foco na lógica diferenciada

2 comentários

 
cnaa97 2025-07-15

Para começar, os fabricantes de componentes que produzem os equipamentos em si geralmente não oferecem bom suporte nem para Lua nem para Python. Talvez C, no máximo?

 
GN⁺ 2025-07-15
Comentários do Hacker News
  • Quando decidi criar um motor de jogo e escrever o jogo inteiro em uma linguagem de script, fiquei entre JavaScript (QuickJS), Python (Boost.Python) e Lua (Sol2)
    Embutir Lua é realmente muito fácil, e mesmo usando junto com um wrapper de C++ fica bem simples
    Em pouco tempo eu já tinha um motor com cara de "isso já dá para usar direto"
    Além disso, a VM do Lua é extremamente leve
    Dá para ver mais detalhes no projeto carimbo

    • Gosto do fato de que, quando vejo um motor ou aplicativo oferecendo suporte a Lua como linguagem de script, isso também significa que posso usar Fennel
      Fennel é uma linguagem que transpila para Lua
      Link oficial do Fennel

    • Pessoalmente, acho o Boost.Python bem fraco como ferramenta de scripting
      Acho que isso também pode influenciar a decisão

    • Fico curioso se Sol2 é uma VM de Lua ou se é só um wrapper da VM padrão do Lua

  • Achei difícil concordar com a frase "Lua não é apenas uma linguagem de alto nível simples, mas uma estratégia de desenvolvimento embarcado"
    Fica difícil levar a sério textos com esse tipo de formulação

    • No geral, o texto passa aquela sensação de "uso Lua há muito tempo, então agora posso tirar uma conclusão"
      Sobre MicroPython, não parece haver muita experiência prática, mas há algumas críticas exageradas
      Por exemplo, a afirmação de que "no projeto MicroPython o código de sistema e a camada de script ficam misturados e isso dificulta a manutenção" tem base fraca
      Isso pode ser efeito da linguagem ou da gestão do projeto/estrutura da arquitetura, então acho que a causa precisaria ser avaliada com mais rigor

    • Esse texto parece mais um anúncio do framework Xedge Lua do que um artigo de verdade
      É só propaganda

    • No geral, o texto parece ter estilo de ChatGPT
      No caso de um texto publicitário, tanto faz se foi escrito por uma pessoa ou por um LLM

    • Como outros comentários também mencionaram, parecia texto de ChatGPT e não foi muito agradável de ler

  • Na lista PLDB Top 1000, Lua aparece melhor colocado que MicroPython
    Neste texto comparativo, o usuário do GitHub SkipKaczinksi considera que Lua tende a ser mais rápido
    Michael Polia, neste artigo do Hackaday, também comenta que Lua é pequeno e rápido
    A linguagem Toit afirma ser 30 vezes mais rápida que MicroPython
    O fundador da Toit foi um dos primeiros líderes de desenvolvimento do V8

  • É preciso diferenciar os conceitos de "embedded" e "embeddable"
    MicroPython é usado em plataformas embarcadas, mas não é um "runtime embutível" para integrar a aplicações existentes como o Lua
    O objetivo do MicroPython é substituir o runtime tradicional em C, fazendo só a inicialização com wrappers mínimos em C e escrevendo o restante da lógica de negócio em scripts MicroPython
    Não há uma estrutura como lua_State, nem a possibilidade de usar vários interpretadores ao mesmo tempo ou de fazer sandboxing
    Em outras palavras, MicroPython é mais otimizado para "ler dados de sensores em Python numa placa IoT" do que para "desenvolvimento iterativo rápido com scripts dentro de um motor de jogo"

    • MicroPython não é embutível como Lua, mas também não é impossível usá-lo assim
      Não funciona totalmente de forma pronta, e algum código de integração é necessário
      Como referência, dá para ver o exemplo da porta embed
  • Acho que Lua também é uma excelente linguagem para uso embarcado
    Também considero bons os produtos baseados em Lua, mas este texto não convence muito sobre "por que Lua vence MicroPython"
    Estender MicroPython em C é mais fácil do que parece, e basta desenvolver módulos externos do mesmo jeito que os módulos oficiais
    Assim, dá para adicioná-los sem muita dificuldade em builds customizadas de firmware
    E houve a crítica de que bibliotecas do ecossistema Python, como numpy, não funcionam, mas na prática também existe a biblioteca ulab, que reimplementa partes de numpy e scipy

  • Pessoalmente, o que ouviu me soa como frase de marketing
    Em microcontroladores, se houver recursos suficientes, usa-se micropython
    Se consumo de energia, memória e controle de CPU realmente importam, no fim usa-se C/C++
    Desenvolvimento de rede sempre foi difícil em C/C++, mas faltavam opções para fazer isso com rapidez e segurança (embora imagino que hoje o suporte embutido a TLS esteja melhor)
    Lua parece uma camada mais amigável em cima de C
    É ótimo quando há muitas bibliotecas, mas existe o peso de portar por conta própria a toolchain de Lua, a toolchain do microcontrolador e todas as bibliotecas necessárias
    Então, se isso for texto de marketing, a mensagem me parece ser: use o produto Xedge e terceirize isso

    • Sobre essa história de que "para usar micropython é preciso ter recursos sobrando"
      só comentaram brevemente que até no 2350 ele roda bem
  • Fico me perguntando se realmente existe alguém usando micropython ou lua de forma "séria" em desenvolvimento embarcado

    • Trabalhei por quase 20 anos como freelancer criando produtos embarcados centrados em Lua
      Usei Lua em várias áreas, incluindo dispositivos VOIP, automação residencial, roteadores industriais e gravadores digitais de vídeo
      Em geral, os sistemas consistem em kernel Linux, libc, interpretador Lua e algumas bibliotecas externas
      O código-fonte da aplicação em Lua costuma ter entre 30 mil e 100 mil linhas, e hoje em dia há até produtos "pequenos" nessa faixa (flash de 8 MB, RAM de 64 MB etc.)
      Lua funciona bem nesse tipo de ambiente
      Todos são produtos em produção e também geram dinheiro para os clientes
      A integração entre Lua e C é muito fácil, e, para trabalho assíncrono, Lua já resolvia há muito tempo coisas com as quais linguagens modernas ainda quebram a cabeça
      A linguagem é simples e poderosa, e com corrotinas, closures, metatabelas etc. dá para usar vários paradigmas
      Em projetos dessa escala, eu ainda escolheria a combinação Lua + C/C++
      Já usei outros ecossistemas (Elixir, Rust, Nim), mas não encontrei nenhuma linguagem tão poderosa e flexível quanto Lua

    • Nós estamos desenvolvendo até dispositivos médicos classe B com MicroPython

    • O mundo embarcado tem um escopo muito amplo
      Se houver sensibilidade de segurança, as normas podem impedir esse tipo de uso, mas equipamentos de teste, por exemplo, não sofrem com esse tipo de regulamentação, então cada um usa o que for mais conveniente
      No universo de IoT, dá para dizer que cada um usa o que achar mais prático

    • MicroPython é realmente usado até em missões de satélite, como cubesats
      Também existem casos em conferências e podcasts sobre isso

    • Milhares de produtos usam Lua internamente, nem que seja em alguma parte
      Recentemente também dei uma olhada no LuaJIT e acho que ele é subestimado

  • Acho que a maioria dos "desenvolvedores embarcados sérios" usa linguagens compiladas

    • No fim, tudo é compilado para bytecode, então talvez também dê para considerar como uma espécie de linguagem compilada
  • Como hobby, eu simplesmente uso Arduino (Platformio)
    Em microcontroladores, compilar e gravar o firmware é rápido, então não sinto tanta necessidade de um interpretador
    Um dia ainda queria experimentar alguma outra linguagem compilada que pudesse substituir C++
    Fico curioso se alguém teria alguma recomendação que rode bem no Raspberry Pi Pico

    • Não sou especialista, mas sinto que Rust é uma das alternativas mais populares
      É moderno, corrige muitos dos problemas do C++ e também tem tooling razoavelmente bom
      Zig também parece interessante, e eu queria experimentar
      O Raspberry Pi tem boas especificações, então dá para rodar coisas que não sejam necessariamente linguagens de sistema
      Também gosto de Kotlin; em princípio ele exige a JVM, mas dá para fazer build nativo
      Só que, no Pico, talvez para controlar GPIO seja preciso mexer diretamente no sistema de arquivos (e, aliás, não tenho certeza sobre suporte a Kotlin no Pico)

    • Nim parece ser uma opção bem interessante
      Veja este material sobre suporte a Nim no picostdlib

  • Lua é, em essência, uma linguagem muito mais simples
    Python tem a crença de "há apenas uma maneira de fazer isso", mas na prática parece mais um "canivete suíço" com tudo enfiado dentro
    Isso até facilita para começar e há mais bibliotecas, o que ajuda no desenvolvimento rápido
    Mas não combina tão bem com ambientes com poucos recursos
    Há um limite para transformar uma cadeira cheia de enfeites numa cadeira Eames feita de tábuas

    • Python é fácil, e Lua é simples
      O problema do "fácil" é que a complexidade interna fica escondida, e "simples" significa que mais esforço é exigido do usuário

    • Python tem compatibilidade de versão frágil, então ao passar de 3.x para 3.x+1 frequentemente surgem problemas
      Lua também não é perfeita, mas ainda assim há muitos casos de suporte a várias versões de Lua, com a vantagem de não forçar upgrades bruscos de versão