Mojo 1.0 beta
(mojolang.org)- Mojo se apresenta como uma linguagem para “escrever como Python, executar como C++” e atualmente oferece a versão estável 1.0.0b1 (May 7)
- Seu objetivo é permitir escrever código rápido em diversos tipos de hardware, de CPU a GPU, sem ficar preso a um fornecedor específico, sendo projetada como uma linguagem estática de alto desempenho para sistemas modernos de IA
- Oferece interoperabilidade com Python de forma nativa, permitindo mover apenas os gargalos de desempenho para Mojo sem reescrever todo o código existente, e suporta tanto import de código Mojo no Python quanto import de bibliotecas Python no Mojo
- É possível escrever kernels de GPU na mesma linguagem, e a metaprogramação em tempo de compilação usando a mesma linguagem do código de runtime busca oferecer otimizações por hardware e abstrações sem custo
- A biblioteca padrão do Mojo está totalmente open source no GitHub e aceita contribuições, enquanto o compilador do Mojo tem abertura do código planejada para 2026
Versões e materiais para começar
- A versão estável atual é 1.0.0b1 (May 7), e a nightly mais recente é May 9
- O Mojo se inspira na sintaxe intuitiva do Python, na segurança de memória do Rust e na metaprogramação em tempo de compilação poderosa e intuitiva do Zig
- Como linguagem estática compilada, também é adequada para programação orientada a agentes
- Em vez de obrigar a escolher entre produtividade e desempenho, busca entregar ambos, permitindo começar com padrões de programação simples e familiares e adicionar complexidade quando necessário
- Como caminhos iniciais, estão disponíveis Install Now, Quickstart, Releases, Roadmap e GitHub
- Para ver a página em Markdown, é possível adicionar
.mdà URL, e o índice completo da documentação do Mojo pode ser consultado em llms.txt
GPU e interoperabilidade com Python
-
Programação para GPU
- O Mojo busca tornar a programação para GPU acessível sem bibliotecas específicas de fornecedor nem código compilado separado
- É possível escrever kernels de GPU de alto desempenho na mesma linguagem usada para CPU
- O kernel de exemplo
vector_addrecebeTileTensore executaresult[i] = a[i] + b[i]com base emglobal_idx.xdef vector_add( a: TileTensor[float_dtype, type_of(layout), element_size=1, ...], b: TileTensor[float_dtype, type_of(layout), element_size=1, ...], result: TileTensor[ mut=True, float_dtype, type_of(layout), element_size=1, ... ], ): var i = global_idx.x if i < layout.size(): result[i] = a[i] + b[i]
-
Interoperabilidade com Python
- O Mojo é interoperável com Python de forma nativa, permitindo eliminar gargalos de desempenho sem reescrever todo o código existente
- É possível começar por uma única função e, conforme necessário, expandir movendo para Mojo o código sensível a desempenho
- Código Mojo pode ser importado naturalmente no Python e empacotado junto para distribuição
- Da mesma forma, bibliotecas do ecossistema Python também podem ser importadas dentro de código Mojo
- A função de exemplo
mojo_square_arrayobtém um ponteiro dectypes.datadePythonObject, calcula a largura SIMD em tempo de compilação e eleva ao quadrado os elementos do array# SIMD-vectorized kernel squaring array elements in place. def mojo_square_array(array_obj: PythonObject) raises: comptime simd_width = simd_width_of[DType.int64]() ptr = array_obj.ctypes.data.unsafe_get_as_pointer[DType.int64]() def pow[width: Int](i: Int) unified {mut ptr}: elem = ptr.load[width=width](i) ptr.store[width=width](i, elem * elem) vectorize[simd_width](len(array_obj), pow)
Metaprogramação em tempo de compilação
- A metaprogramação do Mojo oferece um sistema intuitivo que usa a mesma linguagem do código de runtime para maximizar o desempenho
- Com compilação condicional, permite criar otimizações específicas por hardware; com avaliação em tempo de compilação, garante segurança de memória e pode eliminar ramificações custosas em runtime
- O objetivo é oferecer abstrações sem custo ao mesmo tempo em que expressa claramente a intenção
- A implementação de exemplo de
__eq__usa reflexão em tempo de compilação para obter nomes e tipos dos campos da struct, verificar se todos os campos satisfazemEquatablee então realizar a comparação de igualdade campo a campo# Generic struct equality using compile-time reflection. @always_inline def __eq__(self, other: Self) -> Bool: comptime r = reflect[Self]() comptime names = r.field_names() comptime types = r.field_types() comptime for i in range(names.size): comptime T = types[i] comptime assert conforms_to(T, Equatable), "All fields must be Equatable" if trait_downcast[Equatable]( r.field_ref[i](self) ) != trait_downcast[Equatable](r.field_ref[i](other)): return False return True
Roadmap e open source
- O Mojo começou no fim de 2022 e ainda há muito trabalho a ser feito
-
Phase 0
- Etapa de construção da base inicial
- Fase de implementação do parser principal, tipos de memória, funções, structs, inicializadores, convenções de argumentos e outros fundamentos da linguagem
-
Phase 1
- Etapa atualmente em andamento
- O objetivo é torná-la uma linguagem poderosa e expressiva para escrever kernels de alto desempenho em CPU, GPU e ASIC, além de permitir que desenvolvedores estendam Python de forma fluida
-
Phase 2
- Etapa de programação de aplicações de sistema
- Fase de expansão para suportar um modelo de segurança de memória garantida e mais recursos de abstração esperados por desenvolvedores de programação de sistemas
-
Phase 3
- Etapa de programação orientada a objetos dinâmica
- Fase de ampliar o suporte a recursos dinâmicos do Python, como classes, herança e variáveis sem tipo, para maximizar a compatibilidade com código Python
- Mais detalhes podem ser vistos no Mojo roadmap
- A biblioteca padrão do Mojo está totalmente open source no GitHub e aceita contribuições
- O compilador do Mojo tem abertura do código planejada para 2026
- Embora a diretriz seja tornar todo o Mojo open source, a equipe considera que, por a linguagem ainda ser muito jovem, um grupo próximo de engenheiros com visão comum consegue avançar mais rápido do que um modelo conduzido pela comunidade
- Como forma de participação, está disponível a developer community
Materiais de aprendizado e comunidade
- Install e Quickstart guide: materiais para começar com Mojo
- Beginner tutorial: aprendizado de Mojo criando o Game of Life
- GPU puzzles: aprendizado de programação para GPU com Mojo resolvendo puzzles
- Intro to Mojo: visão geral dos recursos da linguagem Mojo
- Developer forum: perguntas e atualizações sobre Mojo
- Events: informações sobre eventos, meetups, apresentações e hackathons
- Contributions: orientações sobre issues abertas, contribuições de documentação e compartilhamento de projetos
1 comentários
Comentários no Hacker News
Nos últimos 2 anos usei bastante Mojo por diversão, e é realmente uma linguagem incrível
Tem um modelo de ownership próximo do Rust, execução em tempo de compilação mais poderosa que a do Zig, sistema de tipos rico e suporte SIMD de primeira classe
Em termos de desempenho, faz tempo que eu não via uma linguagem que não parecesse apenas um wrapper simples de LLVM. Ela ainda usa LLVM, mas de uma forma diferente de Rust ou Zig
Estou muito animado com o Mojo quando ele virar open source no fim deste ano
Só pela documentação atual do Mojo, é difícil chegar a essa conclusão
Como alguém que trabalha com machine learning e se importa com desempenho, torço para que Mojo dê certo. Em especial, gosto da ideia de poder misturar código de GPU e CPU na mesma linguagem
Mas me preocupa que as mudanças atuais acabem afastando desenvolvedores Python. Da última vez que testei, fui tentar uma manipulação básica de string com
var x = 'hello'; print(x[3])e não funcionou, elen(x)também não, então perdi uma hora nissoAí descobri que decidiram separar com mais precisão as representações de bytes e code points, mas a documentação contradizia a implementação real
Espero que chegue a um ponto em que dê para usar em machine learning de forma geral, mas por enquanto ainda parece bem limitado. Algumas funcionalidades básicas legais ligadas a tensores também foram descartadas
Por enquanto vou continuar usando JAX e olhar de vez em quando
Parece exatamente o tipo de coisa com que quem se interessa por compiladores e design de linguagem sonharia em fazer
Não precisa garantir eficiência em toda situação nem entregar desempenho de ponta, seria bom só existir
Pelo que entendo, daria para fazer uma linguagem assim, mas parece que não conseguiu despertar o interesse de quem seria capaz de criá-la
Quase todos os problemas que me vêm à cabeça com Kotlin são consequência da compatibilidade com Java. Aqui até poderia ter sido resolvido de uma forma mais explícita, mas o caminho atual parece condenado ao fracasso
Está escrito que “prometeram disponibilizar o Mojo como open source no outono de 2026”
https://docs.modular.com/mojo/faq/#will-mojo-be-open-sourced
Infelizmente, nesse meio-tempo a Nvidia também não ficou parada e criou uma CUDA de nova geração chamada CuTile para Python, e em breve para C++, por meio de uma stack de compilação semelhante baseada em MLIR
Mesmo sem portabilidade, há uma boa chance de ela ser muito mais usada que Mojo simplesmente porque a Nvidia vai promovê-la com força, integrá-la às ferramentas de desenvolvimento e fazê-la funcionar junto com código CUDA já existente
É bem possível que o Tile IR tenha surgido mais como resposta à ameaça do Triton do que do Mojo. Acho isso especialmente verdadeiro do ponto de vista de quão fácil é escrever kernels de LLM com desempenho razoável
Também existem iniciativas como GraalPy e PyPy
Todos esses esforços funcionam no Windows hoje, o que importa bastante em empresas onde a maioria dos funcionários recebe máquinas Windows e só os servidores usam distribuições Linux
Isso me faz pensar se não vai acabar como mais um Swift for Tensorflow
Fora feedback de clientes, ninguém disse que era uma resposta a alguma outra coisa
Mas o CuTile vai rodar em GPUs AMD ou no Apple Silicon? Não importa o que a Nvidia faça, a dependência de fornecedor continua existindo
Quando ouvi falar de Mojo pela primeira vez, achei que ele seria feito para ser compatível com código Python existente
Mas no futuro próximo isso parece estar muito longe do objetivo. Dá para chamar código indo e voltando entre Python e Mojo, mas o próprio Mojo não consegue executar código Python existente
Mas parece que a direção mudou conforme o desenvolvimento avançou
Parece mais um esquema de criptomoeda estilo pump and dump do que uma tentativa honesta de melhorar o ecossistema Python
Ela pegava lições de Swift e Rust, mirava CPU/GPU/alvos heterogêneos e colocava MLIR no centro da linguagem
Ao mesmo tempo, a arquitetura parecia pensada para um dia tornar relativamente fácil embutir ou estender Python, e esse enquadramento em torno de Python quase certamente ajudou na captação de recursos
Chris Lattner falou muito mais sobre a relação entre MLIR e Mojo do que sobre a relação entre Python e Mojo
Por isso, e por causa do modelo de desenvolvimento que não é totalmente open source, sempre pareceu um vaporware para mim
Interoperabilidade com Python: “Mojo interoperates natively with Python, enabling you to eliminate performance bottlenecks in existing code without rewriting everything. Start with a single function and incrementally port performance-critical code to Mojo as needed. Mojo code imports naturally into Python and packages alongside for deployment. Likewise, libraries from the Python ecosystem can be imported into Mojo code”
Mojo parece bom, mas hoje estou bastante satisfeito com Julia nesse espaço de computação numérica de alto desempenho envolvendo CPU e GPU
Tirando a parte de ter sintaxe parecida com Python, parece que esse nicho já foi praticamente resolvido. Até no próprio Python já existem ferramentas eficazes para tipos de problema menos complexos e mais isolados, como Numba e Triton
Para o mesmo objetivo, Julia é mais madura, e desde o ano passado a Nvidia vem equiparando as capacidades das ferramentas Python e C++ em CUDA
Com o compilador JIT Python do cuTile, dá para escrever kernels CUDA quase como em Python puro
AMD e Intel também estão seguindo uma abordagem parecida
Ainda resta ver se o Mojo vai chegar a tempo de conseguir adoção mais ampla
Esses dialetos de Python “amigáveis a desempenho”, como Triton, Pythran, CuTile, Numba, Pycell, cuPy etc., parecem Python por fora, mas basta arranhar a superfície para ver que não são Python de forma alguma
São DSLs com cara de Python feitas para facilitar otimização e inferência de tipos. Na prática, é exatamente assim que parecem. Em cada uma delas, muitas — talvez a maioria — das funcionalidades de Python não podem ser usadas, e ainda assim você continua preso aos problemas característicos do Python
Sinceramente, Python é intrinsecamente ruim para eficiência e desempenho
Isso vai muito além do GIL. Tipagem dinâmica, semântica por referência, monkey patching, modelo de objetos extremamente dinâmico, ABI do CPython, BigInt por padrão, sistema de módulos em runtime etc. fazem sentido para uma linguagem pequena de scripting, mas são muito ruins para computação de alto desempenho e eficiência
O próprio ecossistema NumPy/SciPy é quase um conjunto de hacks para driblar as limitações do Python em aritmética de tensores simples limitada por CPU
O desempenho básico do Python é tão ruim que até um loop
forsimples faz o Excel parecer um cavalo de corridaMojo é diferente
Em vez de hackear uma base problemática já existente, Mojo tenta começar de um ponto de partida limpo
E, em vez de herdar mais de 30 anos de Python, tenta oferecer uma “experiência parecida com Python” sobre uma linguagem bem projetada com base na experiência acumulada em design de linguagens
Só por isso eu já torço para que dê certo
Hoje em dia parece que, pelo menos para parte das pessoas, é preciso fazer propaganda destacando AI native logo de cara
Mas isso me causa certa rejeição. Parece uma expressão que na prática não quer dizer nada
Alguém entusiasmado com IA poderia explicar por que “por ser uma linguagem compilada e estaticamente tipada, ela também é ideal para programação orientada a agentes” faria sentido, e o que isso quer dizer?
Para mim, o caso mais engraçado foi abrir a página do IBM DB2 e ver aquilo descrito como um banco de dados de IA
Acho que a ideia é que, se você pega mais erros em tempo de compilação, um agente consegue verificar rapidamente o próprio trabalho de forma estática, sem depender de testes unitários ou outros testes
Isso vale especialmente para linguagens como Python, que têm muito código open source disponível. Para novos entrantes, sem código existente para treinar, isso é um grande problema
Então talvez esse marketing desesperado de AI native seja necessário para parecer relevante em um mundo “orientado a agentes”. O tempo dirá se é suficiente
Agentes tendem a se sair melhor quanto mais feedback recebem. Checagem de tipos é ótima para detectar automaticamente muitos erros bobos
A questão é que, em geral, quanto mais pistas você der para o agente, melhor
Sobre compilação e tipagem estática: ao fazer programação orientada a agentes, é muito útil conseguir detectar problemas em tempo de compilação
Isso reduz os problemas encontrados em runtime e também os cenários que são mais difíceis para o agente resolver. Testes unitários podem cobrir parte dessa lacuna, mas não totalmente
O que o site não diz é que Mojo provavelmente pode até ser uma escolha pior para programação orientada a agentes. Ainda não existe muito dado de treinamento de Mojo
Python+ruff+pycheck e TypeScript compilam para bytecode, não para código de máquina. Também não têm tipagem estática no sentido de Rust
Mesmo assim, já vi modelos gerarem código válido muito bom em ambos. Não precisavam ser estritamente “compilados” nem “estaticamente tipados”
No fim, a IA só precisa de boas ferramentas para verificar código rapidamente e iterar, e não liga tanto para essas propriedades
A Modular pretende abrir o código de todo o SDK do Mojo, incluindo o compilador, até o fim deste ano
Está escrito que “o Mojo 1.0 será finalizado no fim deste ano, junto com a abertura do compilador e a oferta de estabilidade da linguagem”
https://www.modular.com/blog/modular-26-3-mojo-1-0-beta-max-...
Continuo acompanhando o Mojo. Sinceramente, a coisa de que menos gosto no Python é a sintaxe
Alguém aqui mencionou Julia, e acho que é uma boa linguagem. Mas as mensagens de erro do compilador e a documentação das bibliotecas não estão no nível que eu esperaria de uma linguagem nesse grau de maturidade
Também me preocupam problemas de precisão em blogs que li no passado. Além disso, por causa do tamanho dos binários e do tempo até a primeira execução, não acho que eu conseguiria fazer com Julia o tipo de módulo Python que eu gostaria
Mesmo assim, espero que Mojo vire uma opção. Mas eu gosto de REPL e também da natureza dinâmica do Python, então no fim talvez eu nem saia do NumPy por questões de desempenho
Por isso eu gosto tanto de Nim. Você ganha velocidade de nível C, execução em tempo de compilação, metaprogramação, sistema de tipos forte e segurança de memória, e o código ainda costuma ser curto e elegante
Mojo também é interessante, mas até agora parece focar mais em machine learning do que em programação de uso geral. E, pelo que sei, o compilador ainda não é open source
Também parece que o Mojo está mais focado em virar uma linguagem robusta para uso industrial. Fiquei chocado ao ver que a primeira implementação de pré-compilação do Julia não oferecia entrada e saída de arquivos