Python, uma das linguagens de programação mais populares do mundo, pode em breve se tornar ainda mais onipresente ao encontrar um lar dentro dos navegadores da web. Ethan Smith, um desenvolvedor de software baseado em Berkeley, revelou recentemente um projeto que permite que o CPython, a implementação padrão da linguagem de programação Python, seja executado em navegadores da web via WebAssembly ou WASM. Assim, o script Python pode ser rodado em um navegador graças a novos avanços.
WASM é um formato binário que fornece desempenho quase nativo em navegadores da web. É um alvo de compilação para linguagens como C/C ++, C# e Rust. É comumente usado para criar código sensível ao desempenho que o JavaScript não é adequado para lidar; casamento Python com WASM, embora seu compilador Emscripten seja mais sobre facilidade de uso e distribuição do que desempenho, pelo menos neste ponto.
O projeto
O projeto, criado com a ajuda do desenvolvedor principal de Python, Christian Heimes, pode tornar o Python uma alternativa viável ao JavaScript para alguns aplicativos da web e pode mitigar um dos pontos persistentes do desenvolvimento do Python: os problemas de instalação, dependência e gerenciamento de ambiente virtual memorizados no presente XKCD quadrinhos que ainda assolam desenvolvedores inexperientes.
CPython on WASM segue o rastro de um projeto que estreou em abril, chamado Pyodide, que permite que o código Python seja executado em um navegador da web.
“O novo projeto no qual Christian Heimes e eu estamos trabalhando tem o objetivo de tornar a web uma plataforma com suporte para CPython, assim como o Windows ou o macOS”, explicou Smith em uma nota ao The Register.
“Minha esperança é que isso possibilite um ecossistema mais amplo de desenvolvedores Python voltados para a web e permita uma integração mais fácil com ferramentas e processos Python existentes, muitos dos quais o Pyodide teve que reinventar como micropip para substituir o instalador de pacote pip padrão. Eu também gostaria de olhar para WASI, a WebAssembly System Interface, como um meio de colocar em sandbox o código Python do lado do servidor. “
Script Python pode ser rodado em um navegador graças a novos avanços
Pyodide, disse Smith, tem um foco estreito – executar código de computação científica no navegador – e, portanto, usa alguns hacks para fazer o empacotamento funcionar corretamente. Ele vê o projeto CPython no WASM como tendo objetivos mais amplos.
“Não quero que este projeto seja tão específico quanto o Pyodide, mas definitivamente queremos trabalhar com eles para garantir que não duplicemos o trabalho e que as cargas de trabalho de computação científica funcionem bem com CPython no WASM”, explicou ele.
“A principal diferença técnica entre nosso projeto e o Pyodide é que não construímos uma versão corrigida do CPython”, disse ele. “Em vez disso, estamos atualizando nossos patches, o que já tornou a compilação cruzada em geral muito mais fácil.”
O jeito WASM
Uma das limitações do WASM é que ele não suporta operações de E/S de bloqueio/síncronas, a fim de acomodar a arquitetura de loop de eventos sem bloqueio/assíncrona do JavaScript. No entanto, Smith diz: “Tenho planos de investigar a permissão de E/S síncrona para o loop de eventos do navegador, o que, até onde eu sei, o Pyodide não faz atualmente. Isso permitiria uma integração mais fácil com o código existente.”
Aqueles que desejam executar o código Python no navegador não terão acesso imediato ao Document Object Model ou DOM do navegador. Smith espera que isso seja possível, mas levará tempo para implementar. A interação do DOM terá que ser feita via JavaScript até que o WebAssembly implemente uma maneira de falar diretamente com o DOM.
“Eu vejo o uso mais antigo de CPython em WASM sendo Javascript chamando Python para executar código Python, não vice-versa”, disse ele. “Sempre haverá lugares onde o Javascript será um ajuste melhor do que o Python no navegador, mas acho que um dos melhores recursos do Python é sua capacidade de agir de forma simples para escrever código de adesão.”
Smith espera que o JavaScript continue a ser a linguagem preferida para a criação de interfaces de usuário em aplicativos da web, mas disse que não ficaria surpreso ao ver uma estrutura de front-end baseada em Python emergir que tenta tirar vantagem do CPython na conexão WASM.
Ele também disse que o CPython no WASM pode ser útil para o desenvolvimento de aplicativos de plataforma cruzada baseado na web, embora ele reconheça que já há trabalho sendo feito para trazer o suporte do CPython para iOS e Android e há outros projetos de plataforma cruzada como BeeWare.
Questionado sobre se a ligação WASM tornará o Python mais competitivo em termos de velocidade, Smith reconhece que isso pode ser um problema.
“Nossa primeira batalha aqui é o tempo de carregamento da página, mas já conseguimos reduzir o tamanho da biblioteca padrão para cerca de 5 por cento de seu tamanho original e há mais que podemos fazer”, explicou ele.
“Quanto à velocidade em tempo de execução, acho que a história será na verdade a mesma que rodar em um servidor: se parte do seu código não for rápido o suficiente, chame C, C ++ ou Rust. É aqui que o ‘código de cola “O aspecto do Python brilha. Rust em particular tem um ótimo suporte de plataforma para WASM e eu acho que seria um bom par para acelerar o código Python rodando em WASM.”
CPython no WASM, ele advertiu, ainda está nos estágios iniciais de desenvolvimento e que o projeto é mais aspiracional do que funcional no momento.
“Se alguém quisesse iniciar um projeto hoje, provavelmente recomendaria que começassem com Pyodide, que existe há muito mais tempo e é mais polido”, disse ele. “Mas estou ansioso para trabalhar com os desenvolvedores CPython e Pyodide para continuar melhorando o Python no WASM.
Via The Register