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".
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.
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)>>>8Tecnologia
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)>>>8Tecnologia
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()Tecnologia
É 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 CAR usando struct.
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 CAR com 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)Tecnologia
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.
Descubra o poder e a versatilidade de Python neste guia completo. Da história e popularidade às aplicações práticas e um passo a passo de aprendizado, saiba tudo para dominar Python e impulsionar sua carreira em programação.
O MoME (Mixture of Million Experts) é um modelo de linguagem dimensionável que usa o Mixture of Experts (MoE) com um mecanismo de roteamento chamado PEER para utilizar com eficiência milhões de redes especializadas.
Explore o potencial inexplorado dos modelos de linguagem grandes com o LangChain, uma estrutura Python de código aberto para criar aplicativos avançados de IA.
Saiba mais sobre os modelos Claude 3, benchmarks de desempenho detalhados e como acessá-los. Além disso, descubra a nova API Python do Claude 3 para geração de texto, acesso a recursos de visão e streaming.
Aprenda a arte do machine learning e você se tornará um especialista em previsão, reconhecimento de padrões e os primórdios da aprendizagem profunda e por reforço.
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:
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.mojooutest.🔥.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.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,structefn, 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
letevar. É semelhante a como se declara variáveis em Rust.A palavra-chave
letindica que a variável é imutável, enquantovarindica 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 àclassdo Python. Classes em Python são dinâmicas e lentas; tiposstructsã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
defpara definir uma função cria uma função Python, com todo o dinamismo e flexibilidade do Python. Já a palavra-chavefndefine 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:
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
fndo Mojo é mais rápida quedef.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.pyplote exibimos um gráfico de linha. Para exemplos avançados, confira o Mandelbrot em Mojo.É 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
CARcom a sintaxe do Mojo.CARusandostruct.var.fn: uma apenas com a velocidade do carro e outra com velocidade e modelo.CARcom velocidade 300.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.