Curso
Mojo é uma linguagem de programação que combina a facilidade de uso e a flexibilidade de linguagens dinâmicas, como Python, com a performance e o controle de linguagens de sistemas, como C++ e Rust.
Ela atinge alta performance por meio de inovações no compilador, como cache integrado, multithreading e distribuição em nuvem, enquanto autotuning e metaprogramação permitem otimizar o código para diversos hardwares.
Os principais recursos do Mojo incluem:
- Sintaxe semelhante à do Python e tipagem dinâmica tornam o Mojo fácil de aprender para desenvolvedores Python, já que Python é a principal linguagem por trás dos avanços modernos em IA/ML.
- Com Mojo, você pode importar e usar qualquer biblioteca Python, garantindo interoperabilidade total com Python.
- Suporta compilação just-in-time (JIT) e ahead-of-time (AOT). O compilador Mojo aplica otimizações avançadas e até geração de código para GPU/TPU.
- Mojo dá controle total sobre layout de memória, concorrência e outros detalhes de baixo nível.
- Ao combinar capacidades de linguagens dinâmicas e de sistemas, Mojo segue um modelo unificado de programação que é amigável para iniciantes e escalável para vários casos de uso com aceleradores.
Mojo ainda é uma linguagem incompleta e não está disponível publicamente. A documentação é voltada a desenvolvedores com experiência em programação de sistemas.
No entanto, à medida que a linguagem evoluir, a intenção é torná-la mais amigável e acessível para iniciantes.
como começar com Mojo
Mojo não está disponível publicamente, mas você pode acessar o Mojo Playground ao se inscrever nos produtos Modular. Ao se cadastrar, certifique-se de selecionar Mojo em "Modular Product Interest".

Imagem da Modular: comece hoje mesmo
Depois da inscrição, você receberá um e-mail liberando o acesso ao Mojo Playground em até uma hora. O Mojo Playground é um ambiente JupyterHub em que os usuários acessam a mesma biblioteca padrão do Mojo. Porém, cada um tem um volume privado para escrever e salvar seus programas em Mojo.

Imagem do Mojo Playground
Quando o Mojo se tornar open source e estiver disponível publicamente, você poderá executar um programa Mojo pelo terminal. Ele funciona tanto como linguagem interpretada quanto compilada.
Você pode salvar o arquivo como test.mojo ou test.🔥.
Sim, dá para salvar o arquivo com o emoji de fogo. Como você vê, criamos um arquivo simples do Mojo, test.🔥, e o executamos no terminal.
def main():
print("Hello Mojo!")
$ mojo test.🔥
Hello Mojo!
Mojo e Python
Mojo é um superconjunto de Python e tem uma sintaxe quase idêntica à de Python. Ele também traz novos recursos, como let, var, struct e fn, para definir variáveis, estruturas e funções e, assim, ganhar desempenho.
declarações let e var
Ao escrever código em Mojo, você pode declarar variáveis usando as palavras-chave let e var. É semelhante a como se declara variáveis em Rust.
A palavra-chave let indica que a variável é imutável, enquanto var indica que ela pode ser modificada. Isso melhora a performance ao impor restrições em tempo de compilação.
tipos struct
Mojo usa a palavra-chave struct, semelhante à class do Python. Classes em Python são dinâmicas e lentas; tipos struct são mais próximos de C/C++ e Rust. Eles têm layouts de memória fixos determinados em tempo de compilação, o que os otimiza para performance nativa.
definições fn
Usar def para definir uma função cria uma função Python, com todo o dinamismo e flexibilidade do Python. Já a palavra-chave fn define uma função Mojo com mais restrições. Isso significa que os argumentos são imutáveis por padrão e exigem tipagem explícita e declarações de variáveis locais, entre outros pontos.
exemplo de comparação de sintaxe
No exemplo, vamos criar uma função Mojo que soma dois argumentos.
Para executar a função em Mojo:
- Você deve especificar um tipo para os argumentos da função.
- Você deve declarar o tipo de retorno com uma seta.
fn add(x: Int, y: Int) -> Int:
return x + y
z = add(3, 5)
print(z)
>>> 8
Ao programar em Python, podemos definir funções sem indicar explicitamente o tipo dos argumentos e da saída. Isso torna o processo mais dinâmico e direto. No entanto, em comparação, a função fn do Mojo é mais rápida que def.
def add(x, y):
return x + y
z = add(3, 5)
print(z)
>>> 8
Matplotlib no Mojo
Além de turbinar a performance, Mojo permite que os desenvolvedores importem qualquer biblioteca Python e a integrem com funções em Mojo. Usando o interpretador CPython, o Mojo oferece suporte transparente a todos os módulos Python disponíveis hoje.
No exemplo a seguir, importamos matplotlib.pyplot e exibimos um gráfico de linha. Para exemplos avançados, confira o Mandelbrot em Mojo.
from PythonInterface import Python
let plt = Python.import_module("matplotlib.pyplot")
x = [1, 2, 3, 4]
y = [30, 20, 50, 60]
plt.plot(x, y)
plt.show()

É amplamente reconhecido que Python é a linguagem mais popular para IA/ML. Seguir a trilha de carreira Machine Learning Scientist with Python vai equipar você com as habilidades de Python necessárias para conquistar uma vaga como cientista de machine learning.
programando com Mojo
Mojo é um superconjunto de Python, assim como TypeScript é um superconjunto de JavaScript. Além de novas palavras-chave e funções, qualquer programador Python consegue entender e construir programas com ele.
Nesta parte, vamos ver recursos do Mojo que o tornam performático e seguro.
programação de baixo nível
Mojo é uma linguagem de alto nível que dá acesso a primitivas de baixo nível por meio do MLIR (Multi-Level Intermediate Representation), um formato extensível de representação intermediária. Isso permite implementar abstrações de custo zero enquanto aproveita otimizações poderosas do compilador.
otimização por tiling e autotune
Mojo tem uma ferramenta de otimização por tiling embutida que melhora a localidade de cache e os padrões de acesso à memória ao dividir computações em blocos menores que cabem na memória cache rápida.
O módulo Autotune no Mojo oferece interfaces para compilação adaptativa. Ele ajuda você a encontrar os melhores parâmetros para o seu hardware-alvo ajustando o código automaticamente.
ownership e borrowing
Mojo usa o sistema de ownership e borrowing para gerenciar memória, eliminando a necessidade de garbage collector e garantindo desempenho consistente em tempo de execução. O compilador do Mojo analisa o tempo de vida das variáveis por análise estática e libera os dados assim que não são mais usados.
gerenciamento manual de memória
Mojo também oferece um sistema de gerenciamento manual usando ponteiros, semelhante a C++ e Rust.
multiplicação de matrizes no Mojo
No exemplo de multiplicação de matrizes, observamos que importar código Python para o Mojo resultou em um aumento de performance de 17,5 vezes.
Ao introduzir tipos na implementação em Python, a performance melhorou ainda mais, chegando a impressionantes 1866,8 vezes.
Além disso, foram usadas técnicas como vetorização, paralelização, tiling e autotuning para atingir um ganho de performance de 14050,5 vezes. É sensacional. Nem Julia nem Rust costumam entregar esse nível de otimização.
exemplo de código em Mojo
Neste exemplo de carro, vamos criar uma classe CAR com a sintaxe do Mojo.
- Vamos criar uma classe
CARusandostruct. - Iniciar uma variável mutável usando
var. - Definir os tipos das variáveis. "speed" é Float32 e "model" é String. String não é um tipo nativo, então precisamos importá-lo.
- Vamos criar duas funções de inicialização semelhantes às do Python, mas usando a função
fn: uma apenas com a velocidade do carro e outra com velocidade e modelo. - Depois disso, criar um objeto usando
CARcom velocidade 300. - Imprimir o modelo do carro.
from String import String
struct CAR:
var speed: Float32
var model: String
fn __init__(inout self, x: Float32):
"""Car with only speed"""
self.speed = x
self.model = 'Base'
fn __init__(inout self, r: Float32, i: String):
"""Car with Speed and model"""
self.speed = r
self.model = i
my_car=CAR(300)
print(my_car.model)
Base
Como você pode observar, o estilo de programação e a funcionalidade do Mojo são semelhantes aos do Python. Ele funciona como uma extensão do Python, aprimorando performance e gerenciamento de memória. Com Mojo, você treina modelos rapidamente, obtém inferência mais veloz (mesmo em CPUs), analisa conjuntos massivos de dados em segundos e faz simulações em tempo real.
Você pode conferir todos os exemplos de código na documentação da Modular e executá-los em um notebook Jupyter no playground.
o Mojo vai substituir o Python?
No momento, é difícil determinar o potencial do Mojo como linguagem de propósito geral devido ao estágio inicial de desenvolvimento e à falta de recursos necessários. Porém, ele pode superar Python em aplicações de machine learning e IA em que alta performance é crucial.
Ainda assim, é improvável que o Mojo substitua totalmente a liderança do Python em ciência de dados e outras áreas de desenvolvimento de software tão cedo.
Mojo foi criado especificamente para aplicações de machine learning e não é voltado para outras áreas, como back-ends web, automação de processos ou web design. Embora no futuro os desenvolvedores possam expandir suas capacidades, o foco atual do Mojo é otimizar aplicações de machine learning.
Além disso, vale notar que o Mojo tem uma seleção limitada de módulos e bibliotecas em comparação com Python, que conta com uma grande comunidade de desenvolvedores criando constantemente novas e melhores ferramentas para IA e ciência de dados. Pode levar anos para o Mojo alcançar o nível de maturidade do Python.
Aprenda como modelos de IA generativa são desenvolvidos e como eles vão impactar a sociedade daqui para frente no curso Generative AI Concepts da DataCamp.
conclusão
Em resumo, embora o Mojo mostre potencial como uma linguagem rápida e compatível com Python, voltada para IA/ML, é improvável que substitua completamente o Python no curto prazo. Python se beneficia de um ecossistema gigantesco, de uma comunidade ativa e de forte presença em ciência de dados e ML. No melhor cenário, o Mojo pode se tornar uma linguagem complementar ao Python, usada quando a velocidade é crítica.
Neste tutorial, revisamos os recursos e a sintaxe do Mojo com exemplos de código. Também comparamos com Python, considerando fatores como performance, sintaxe, funcionalidade e compatibilidade. Para quem quer dominar os fundamentos de IA e Machine Learning, recomendamos a trilha Machine Learning Fundamentals with Python.
Sou um cientista de dados certificado que gosta de criar aplicativos de aprendizado de máquina e escrever blogs sobre ciência de dados. No momento, estou me concentrando na criação e edição de conteúdo e no trabalho com modelos de linguagem de grande porte.



