Embora o JavaScript tenha sido originalmente criado para scripts em páginas da Web, agora ele é usado para escrever aplicativos de desktop, software de servidor e tudo mais. Agora, pode se tornar uma opção para software em sistemas embarcados e microcontroladores com pouca memória, graças ao projeto MicroQuickJS.
MicroQuickJS é um novo projeto de Fabrice Bellard, que criou muitos outros projetos de código aberto, incluindo QEMU, FFmpeg, o compressor de dados sem perdas NNCP e o emulador JSLinux. Este último esforço é baseado em outro de seus projetos, QuickJS, que é um mecanismo JavaScript mínimo escrito na linguagem C.
O objetivo do MicroQuickJS é compilar e executar código JavaScript “usando apenas 10 kB de RAM”, com todo o mecanismo exigindo apenas cerca de 100 kB de armazenamento ROM, incluindo a dependência da biblioteca C. Ele suporta um “subconjunto de JavaScript” próximo ao ES5 (ECMAScript 2009), portanto, recursos mais recentes do ES6 e posteriores, como palavras-chave let e const, funções de seta e objetos de mapa, provavelmente não funcionarão. Também é mais rígido do que um mecanismo JavaScript típico e bloqueia algumas operações propensas a erros ou ineficientes, como matrizes com furos.
A documentação do projeto explica: “Embora MQuickJS compartilhe muito código com QuickJS, [its] os internos são diferentes para consumir menos memória. Em particular, ele depende de um coletor de lixo de rastreamento, a VM não usa a pilha da CPU e as strings são armazenadas em UTF-8.”
MicroQuickJS não substituirá o Node.js na maioria dos projetos, especialmente porque não parece fornecer suporte de rede ou acesso ao sistema de arquivos do dispositivo. No entanto, pode ser útil em dispositivos como placa Arduino ou Raspberry Pi Pico, onde motores mais comuns não são uma opção.
O que é Node.JS e para que ele é usado?
Se você estiver fazendo algum tipo de desenvolvimento web, provavelmente terá que aprender e escrever JavaScript em algum momento. O Node tem como objetivo simplificar o desenvolvimento de aplicativos da web, unificando as linguagens do servidor e do cliente.
A documentação explica parte da arquitetura interna do mecanismo, incluindo um emulador de ponto flutuante se o processador fornecido não suportar esse recurso e “quase nenhuma dependência da biblioteca C”. Mesmo que os possíveis casos de uso no mundo real sejam limitados, é um empreendimento impressionante.
Você pode visitar o repositório GitHub para verificar o código, instruções de compilação e benchmarking e mais informações sobre como o mecanismo funciona. Não há binários disponíveis no momento, então você mesmo terá que compilá-lo se quiser testá-lo.
Fonte: GitHub através do blog de Simon Willison