# Mojo (linguagem de programação)

Mojo é uma linguagem de programação apresentado como um superconjunto Python, com desempenho semelhante ao C, que está atualmente em desenvolvimento. Está disponível tanto em navegadores via Mojo Playground quanto localmente em Linux, macOS e Windows (usando WSL). O objetivo do Mojo é combinar a usabilidade de linguagens de programação de nível mais alto, especificamente Python, com o desempenho de linguagens de programação de nível mais baixo, como C++, Rust e Zig. O compilador do Mojo é atualmente de código fechado, com uma biblioteca padrão de código aberto, embora a Modular, a empresa por trás do Mojo, tenha declarado a intenção de eventualmente tornar a linguagem de programação Mojo de código aberto à medida que ela amadurece.

## Origem e Desenvolvimento

A linguagem de programação Mojo foi desenvolvida pela empresa Modular Inc, que foi estabelecida por Chris Lattner, criador da linguagem Swift e do LLVM, junto com Tim Davis, que trabalhou anteriormente no Google. O objetivo do Mojo é unir a simplicidade do Python com a alta performance exigida por aplicações avançadas de inteligência artificial.
Conforme os logs de mudanças públicos, o desenvolvimento do Mojo começou em 2022. Em maio de 2023, a versão inicial acessível para testes foi lançada online por meio de um playground hospedado. A partir de setembro de 2023, o Mojo pôde ser baixado localmente no Linux, e em outubro de 2023 foi liberado para download no macOS da Apple.
Em março de 2024, a Modular tornou a biblioteca padrão do Mojo open-source (código aberto) e passou a receber contribuições da comunidade sob a licença Apache 2.0.

## Características

Mojo adota o slogan "uma nova linguagem de programação para todos os desenvolvedores de IA". Com isso, podemos esperar que suas inovações estejam voltadas para aspectos como desempenho e paralelização, elementos essenciais para o desenvolvimento de sistemas de IA.
Mojo foi concebido como um superconjunto de Python, o que significa que é uma extensão da linguagem Python, mantendo total compatibilidade com ela. Isso permite que desenvolvedores utilizem código Python existente dentro de Mojo sem necessidade de modificações, facilitando a transição e aproveitando a vasta biblioteca de ferramentas e bibliotecas do ecossistema Python. Além disso, por ser um superconjunto, Mojo adiciona novos recursos e capacidades, ampliando o que pode ser feito dentro da linguagem, enquanto preserva a sintaxe familiar e a facilidade de uso que tornaram Python tão popular.
Diferente de Python, que é uma linguagem de tipagem dinâmica, Mojo adota uma abordagem de tipagem forte e estática. Isso significa que os tipos de variáveis e funções são definidos e verificados em tempo de compilação, não em tempo de execução. Esse recurso permite que erros relacionados a tipos sejam identificados mais cedo no processo de desenvolvimento, melhorando a confiabilidade do código. Além disso, a tipagem forte contribui para otimizações de desempenho, uma vez que o compilador pode gerar código mais eficiente ao saber exatamente que tipos de dados serão manipulados.
Mojo utiliza a MLIR, uma infraestrutura de compilação avançada desenvolvida para permitir otimizações e transformações de código em múltiplos níveis de abstração. A MLIR permite que Mojo aproveite ao máximo os recursos de hardware modernos, como vetores, threads e unidades de processamento especializadas para IA. Essa integração proporciona uma plataforma flexível para desenvolver algoritmos de IA que podem ser otimizados para uma ampla gama de arquiteturas de hardware, desde CPUs tradicionais até aceleradores de IA personalizados. O uso da MLIR também facilita a portabilidade e a escalabilidade do código, permitindo que desenvolvedores aproveitem novos avanços em hardware sem precisar reescrever suas aplicações.
Um dos pontos fortes de Mojo é seu suporte robusto ao paralelismo. Paralelismo é a capacidade de executar múltiplas operações simultaneamente, e é essencial para aproveitar o poder das GPUs modernas e outros tipos de hardware avançado. Mojo facilita o desenvolvimento de código que pode ser distribuído eficientemente entre múltiplos núcleos de CPU ou múltiplas unidades de GPU, garantindo que as tarefas sejam executadas de forma rápida e eficiente. Isso é particularmente importante em aplicações de IA, onde a capacidade de processar grandes volumes de dados de forma paralela pode significar a diferença entre uma solução viável e uma que não pode ser executada em tempo hábil.

## Comparação com Python

Mojo foi anunciada com a alegação de que pode ser até 35.000 vezes mais rápida que o Python para determinados tipos de operações. Um dos benchmarks usados para demonstrar essa diferença de desempenho foi a geração de um conjunto de Mandelbrot, um problema computacionalmente intensivo. Graças a técnicas avançadas de vetorização e paralelismo eficiente, o desempenho do Mojo chegou a ser até 68.000 vezes mais rápido do que o Python nesse teste específico.

## Exemplos de Uso

O código ilustra um exemplo do uso de uma estrutura em Mojo para acessar e exibir dados:
struct Pessoa {
function main {
Definição da Estrutura ‘Pessoa’
Função ‘main’