![Microsoft aposta em IA para atrair desenvolvedores para o Windows on Arm](https://optimuscloud.com.br/wp-content/uploads/2024/06/1719508925_Microsoft-aposta-em-IA-para-atrair-desenvolvedores-para-o-Windows-150x150.jpg)
Microsoft aposta em IA para atrair desenvolvedores para o Windows on Arm
27 de junho de 2024![Canonical oferece aplicativos em contêiner LTS 'Distroless' para K8s](https://optimuscloud.com.br/wp-content/uploads/2024/06/Canonical-oferece-aplicativos-em-conteiner-LTS-Distroless-para-K8s-150x150.jpg)
Canonical oferece aplicativos em contêiner LTS ‘Distroless’ para K8s
27 de junho de 2024A promessa original do WebAssembly era que muitas linguagens poderiam ser compiladas nele e depois executadas no navegador ou em outros ambientes. O problema, no entanto, é que linguagens existentes como Java, Go e até mesmo Rust geram uma enorme quantidade de código WebAssembly quando compiladas, mesmo quando estão apenas imprimindo “Hello World”, disse o cientista e desenvolvedor de linguagens do IDEA, Hongbo Zhang.
“A vantagem do WebAssembly não é entregue”, disse ele. “Dizemos que o WebAssembly é seguro e rápido, mas quando Go é compilado para WebAssembly, ele gera uma quantidade muito grande de código WebAssembly e não é mais rápido porque a semântica da linguagem não combina muito bem com o Golang”, disse Zhang. “Portanto, achamos que há uma oportunidade, uma grande oportunidade, de ter uma linguagem projetada para a semântica do WebAssembly.”
É por isso que Zhang criou o MoonBit, uma nova linguagem de programação de código aberto ponta a ponta otimizada para WebAssembly e projetada para computação em nuvem e de ponta, e também para aplicativos frontend.
“A razão pela qual temos uma prioridade muito alta para o WebAssembly é porque achamos que o WebAssembly tem um potencial muito grande. É o novo conjunto de instruções e é multiplataforma – é seguro e rápido”, disse ele.
Zhang não é novato na criação de linguagens. Ele foi um contribuidor fundamental da linguagem de programação OCaml, popular entre os acadêmicos. Ele também trabalhou com ReScript e Flow, a linguagem de programação interna da Meta. Enquanto estava na Bloomberg, ele criou o compilador BuckleScript, que compilava OCaml para JavaScript. (Nota do editor: BuckleScript foi renomeado como compilador ReScript.)
MoonBit foi escrito para aproveitar as vantagens do WebAssembly de uma forma que uma linguagem existente não consegue, explicou ele.
“Você não pode mudar a semântica do Golang para se adaptar ao WebAssembly”, disse ele. “Se precisar fazer uma nova linguagem, então podemos aproveitar, pois o padrão WebAssembly já está finalizado. Então você pode fazer isso muito rápido, gerar um código WebAssembly muito pequeno e podemos obter uma vantagem muito boa.”
Moonbit se inspira em Rust, Go
Isso o coloca em uma categoria semelhante à linguagem Grain, que também foi projetada para compilar no Wasm. Curiosamente, os criadores do Grain citaram OCaml como inspiração. Mas a diferença entre os dois é que Grain é apenas Wasm, enquanto MoonBit adota uma abordagem de linguagem multi-backend e é otimizado para outros backends – aqui significando desenvolvimento do lado do servidor – incluindo JavaScript. Ele afirma ter uma vantagem de desempenho quase oito vezes maior que o Json5 no back-end JavaScript. MoonBit também está explorando a possibilidade de um conjunto de ferramentas em linguagem nativa de IA para desenvolver aplicativos de IA.
“Na verdade, oferecemos suporte a WebAssembly, JavaScript e back-end nativo, mas temos prioridade muito alta para WebAssembly”, disse Zhang. “Se as pessoas se preocupam com a plataforma WebAssembly, elas já conhecem o WebAssembly e querem ter uma solução ideal para esta plataforma, então MoonBit pode ser uma escolha muito boa, porque geramos um código que é comparável em termos de desempenho ao Rust, e também gera código Wasm ainda menor do que Rust.”
De muitas maneiras, MoonBit se inspira em Rust, disse ele. Possui correspondência de padrões, tipos estáticos e inferência de tipos, por exemplo. É uma linguagem fortemente tipada, como Rust, Kotlin e Java, acrescentou, o que significa que impõe regras estritas sobre tipos de dados.
“Pegamos as partes boas do Rust e tentamos torná-lo fácil de aprender”, disse ele.
Ele o descreveu como o melhor de Rust, sem alguns de seus pontos fracos.
“Outra vantagem é que temos uma compilação muito rápida, então um ponto problemático do Rust é que leva muito tempo para compilar”, disse ele. “Podemos compilar todo o código em um tempo muito, muito rápido… uma ou duas ordens de magnitude mais rápido que a compilação Rust.”
O que difere do Rust é que em breve ele será fornecido com um coletor de lixo, que usa contagem automática de referência (ARC). Isso é semelhante à abordagem do Swift para a coleta de lixo. Isso permite fazer gerenciamento automático de memória.
MoonBit também se inspira em seu sistema de pacotes e filosofia do Go, disse ele.
“Go tem uma filosofia de que menos é mais e achamos que isso é muito importante”, disse Zhang. “Você tem que tornar a linguagem em si coesa. Não queremos continuar adicionando à sintaxe.”
IDE já disponível
Também é diferente do Rust porque possui sistemas de tipo tolerantes a falhas e movimentos de design, disse ele.
“A razão pela qual decidimos ter um sistema de tipo tolerante a falhas é porque queremos que o IDE compartilhe a mesma base de código com um compilador”, disse ele. “Então, para o compilador tradicional, quando você vê um primeiro erro… o compilador irá parar ali mesmo. Mas para o desenvolvedor, ainda quero ter um IDE para me dizer (que as) outras informações (estão) corretas, mesmo que o programa esteja incorreto. Temos o sistema de tipo tolerante a falhas, tolerante a falhas para o analisador, então mesmo quando o problema está em um estado muito ruim, o verificador de tipo ainda pode… fornecer algumas informações para orientá-lo no preenchimento automático.”
Quando o IDE não compartilha a mesma base de código do compilador, pode levar a resultados inconsistentes, acrescentou.
O IDE é outro motivo pelo qual os desenvolvedores podem achar o MoonBit atraente para o Wasm. É incomum que novas linguagens comecem com um IDE. Normalmente, isso leva anos, segundo Zhang.
“Como eu tinha muita experiência trabalhando com ferramentas de linguagem, acho que uma coisa importante para fazer com que uma linguagem seja utilizável e agradável para o desenvolvedor é que eles tenham um IDE (que é) muito rápido e confiável”, disse ele. “Para que isso acontecesse, projetei todo o sistema de tipos de linguagem, para quebrá-lo muito rápido, para verificar o tipo, (e) após a verificação do tipo, o IDE funcionará a partir daí.”
O compilador verifica apenas os caminhos modificados, o que cria um ciclo de edição IDE muito rápido, acrescentou.
Casos de uso para a linguagem Moonbit
Os desenvolvedores que se preocupam com o desempenho podem querer dar uma chance ao MoonBit, propôs Zhang.
“Esta é a primeira escolha (se) eles quiserem usar o WebAssembly para o frontend no navegador ou para a codificação sem servidor”, disse ele. “Eles podem se preocupar com o WebAssembly e então um uso muito importante também é compilado para JavaScript. Não apenas compilando para JavaScript, também compilamos para código JavaScript de alto desempenho; todo o código JavaScript gerado é ainda mais rápido que o JavaScript manuscrito.”
MoonBit pode rodar na nuvem ou no limite, disse ele. Ele pode ser usado especificamente para Cloudflare Workers, uma plataforma que suporta a execução de código sem servidor na borda da rede global da Cloudflare porque “o tempo de execução é essencialmente integrado”, disse ele. “Você também pode usá-lo para computação de ponta e computação sem servidor.”
Zhang também tem experiência com frontend graças ao seu trabalho no ReScript, que é para desenvolvedores de JavaScript.
“Para o pessoal do JavaScript, temos várias vantagens”, disse ele. “Primeiro, ele tem um IDE muito forte e sólido e oferece o melhor desempenho.”
Ele também compila o JavaScript, acrescentou, usando um “otimizador muito sofisticado para tornar o código JavaScript mais rápido”. Por exemplo, a empresa comparou um analisador JSON5, que foi escrito em JavaScript, e migrou para MoonBit a mesma base de código, o mesmo algoritmo. Nesse benchmark, o MoonBit teve um desempenho aproximadamente sete vezes mais rápido do que o código JavaScript manuscrito, disse ele.
“Quando as pessoas se preocupam com o back-end do WebAssembly, provavelmente escolherão o MoonBit como sua escolha de linguagem ideal”, disse Zhang. “É por isso que a história do MoonBit é desde o início WebAssembly, mas temos um objetivo muito ambicioso, por isso não estamos otimizados apenas para WebAssembly, mas também para outros back-ends.”
Para explorar o idioma, confira a sandbox online do MoonBit.
A postagem MoonBit: linguagem otimizada para Wasm cria menos código que ferrugem apareceu pela primeira vez em The New Stack.