Sobre o projeto
qzjs fornece um runtime QuickJS-ng incorporável com uma Platform Abstraction Layer (PAL) para aplicações C. Ele executa um engine ES2023 completo em seu próprio thread interno com um loop de eventos libuv, eliminando a necessidade de bombeamento de loop de eventos no lado do host. O runtime implementa 21 módulos compatíveis com WinterTC incluindo fetch, console, crypto.subtle, ReadableStream, setTimeout, fs, URL, TextEncoder, e mais.
Principais capacidades:
- Suporte a ES2023 com inicialização rápida (~4,82ms de mediana após lazy WAMR init) e baixo footprint de memória
- Execução nativa libuv: qzjs possui um thread interno + loop libuv; o host nunca toca JS diretamente
- HTTP/TLS streaming via mbedTLS com decodificação de transferência chunked e verificação de certificado
- Extensões nativas para compressão (miniz), crypto (mbedTLS), codecs de texto (UTF-8/Base64) e WebAssembly (WAMR padrão, wasm3 alternativo)
- Execução multi-contexto com soft suspend/resume para disco; Web Workers executam como threads paralelas reais ou processos isolados (padrão desde o marco multi-process M-P2)
- Mensagens thread-safe host ↔ runtime via JSON (qz_post_message / message_cb) e postMessage/onmessage no lado JS
- Executável CLI standalone para executar APIs Web WinterTC diretamente (sem APIs Node.js)
- DAP step-debugger integrado à biblioteca (ative com -DQZ_BUILD_DEBUGGER=ON)
- Suite de testes abrangente com GoogleTest, mock_libuv para testes offline determinísticos e categorias de teste rotuladas (offline, network, benchmark, test262)
O sistema de build usa CMake com feature toggles (QZ_WITH_*) para extensões opcionais, perfis de build (minimal/standard) e targets para testes, exemplos e debugger. Todas as dependências (QuickJS-ng, libuv, mbedTLS, miniz, WAMR, wasm3) são construídas a partir da fonte como git submodules sob C99 estrito. A reconstrução do polyfill usa npm devDependencies (esbuild, urlpattern-polyfill, @ungap/structured-clone, web-streams-polyfill) mas elas não são enviadas em binários.
Arquitetura: a aplicação host se comunica com o runtime qz_t via mensagens JSON thread-safe. O runtime executa em seu próprio thread com loop libuv, JSContext e ponte I/O. Por padrão (QZ_PROCESS_MODEL=ISOLATED), host e runtime são processos separados se comunicando via envelopes com moldura FlatBuffers sobre um socketpair para isolamento de falhas. Licenciado MIT.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.