17 pontos por xguru 2024-04-23 | Ainda não há comentários. | Compartilhar no WhatsApp
  • Compilador que converte programas Python para WebAssembly
  • Funciona 3 vezes mais rápido que CPython (WASM) ao eliminar a sobrecarga do interpretador
    • Em comparação com CPython (nativo), atinge cerca de 60% da velocidade
  • Há várias maneiras de executar Python rapidamente em WebAssembly
    • Usar um subconjunto de Python que possa ser compilado em código com bom desempenho: CPython, RPython (PyPy) e Codon
    • Usar JIT dentro do Python: PyPy
    • Otimizar o código gerado com análise estática: mypy & mypy-c, Nuitka
  • Aqui, a decisão final foi usar o compilador otimizador de Python, Nuitka

Nuitka

  • O Nuitka funciona convertendo chamadas Python executadas pelo programa em C usando chamadas internas da API do CPython
  • Suporta a maioria dos programas Python e converte o código Python nessas chamadas do CPython
  • Também pode funcionar como um ofuscador de código (ninguém consegue descompilar o programa!)
  • Depois de analisar profundamente todas as opções, ficou claro que a forma mais rápida de executar Python em WebAssembly provavelmente é usando o Nuitka

Compilando Python para WebAssembly com Nuitka

  • O Nuitka parece ser a opção mais simples para acelerar Python no contexto de WebAssembly, porque grande parte do trabalho de converter código Python em chamadas do interpretador CPython subjacente já está pronta
  • Como o Nuitka ainda não funciona com Python 3.12, foi necessário recompilar o Python 3.11 para WASI e usar o arquivo libpython.a gerado
  • Ao tentar executar o arquivo Wasm gerado, surgiu outro problema, então foi enviado um PR para incorporar as mudanças ao projeto principal do Nuitka
  • No momento, o py2wasm usa um fork do Nuitka, mas o plano é transformar o py2wasm em uma camada fina sobre o Nuitka quando as mudanças forem integradas ao upstream
  • O requisito inicial era acelerar ao máximo a execução de Python para migrar um backend Python Django do Google Cloud para o Wasmer Edge
  • O py2wasm ajudará a aproximar a execução de apps backend em Python na Edge com desempenho impressionante, oferecendo uma alternativa muito mais barata para hospedar esses apps do que os provedores de nuvem atuais

Roteiro futuro

  • No futuro, a ideia é publicar o py2wasm como um pacote do Wasmer para que seja possível executá-lo apenas com o seguinte comando
    wasmer run py2wasm --dir=. -- myfile.py -o myfile.wasm  
    

Ainda não há comentários.

Ainda não há comentários.