Mojo é a melhor linguagem para desenvolvimento de IA?

Para aprendizado de máquina e inteligência artificial, o Python sempre pareceu ser a linguagem de programação dominante, com bibliotecas poderosas como NumPy, TensorFlow e PyTorch. Mas uma verificação rápida nas páginas do GitHub dessas bibliotecas mostrará que grande parte do código-fonte é escrito em C e C++.

Isso ocorre porque o Python é muito lento para IA. Mojo é uma nova linguagem de programação que tenta combinar a velocidade do C/C++ com a elegância do Python.

Mojo: uma visão geral

Mojo é uma nova linguagem de programação sintaticamente semelhante ao Python, mas com a velocidade do C. Destina-se principalmente à Inteligência Artificial e ao Desenvolvimento de Sistemas, áreas que exigem software de alto desempenho.

Ele usa o paradigma SIMD – Single Instruction, Multiple Data para aproveitar o paralelismo. Também é compilado just-in-time e é eficiente em termos de memória.

Mojo, no entanto, não é uma linguagem completamente nova; é um superconjunto do Python. Isso significa que é Python mais recursos adicionais. Semelhante a como o TypeScript estende o JavaScript. Isso é bom porque se você já conhece o Python, não deve ser muito difícil aprender o Mojo.

O Mojo é desenvolvido pela Modular, empresa fundada por Chris Lattner – o criador do LLVM e da linguagem de programação Swift.

Em conclusão, Mojo é uma nova linguagem de programação projetada para ser sintaticamente semelhante ao Python, mas tão rápida quanto C/C++. Destina-se a ser usado no desenvolvimento de IA e na programação de sistemas. Embora o projeto não esteja completo, ele é incrivelmente promissor e, na próxima seção, discutiremos o porquê.

Recursos do Mojo sobre outras linguagens de programação

Mojo tornou-se incrivelmente popular, embora ainda não esteja disponível publicamente. Isso ocorre porque ele traz várias vantagens significativas sobre outras linguagens de programação ao executar o aprendizado de máquina e ao criar software no nível do sistema. Nesta seção, discutiremos essas vantagens.

#1. Suporte nativo para tarefas de AI e Machine Learning

O Mojo destina-se ao desenvolvimento de aplicações de Inteligência Artificial. Como resultado, ele vem com funções e módulos na biblioteca padrão para construir redes neurais, realizar visão computacional e preparar dados.

  Por que você não deve comprar um PS5 totalmente digital ou Xbox de última geração

A maioria das linguagens de uso geral, como o Python, exigiria bibliotecas adicionais para fazer isso, mas o Mojo oferece suporte imediato.

#2. Sintaxe simplificada e abstrações de alto nível

Para escrever um software rápido e eficiente, normalmente precisaríamos usar linguagens como C, C++ e Rust. Embora esses idiomas sejam rápidos, eles são mais difíceis de aprender e trabalhar. Isso ocorre porque eles o forçam a trabalhar em um nível baixo para que você tenha mais controle.

No entanto, Mojo ainda fornece abstrações de alto nível como Python e sintaxe simples. Isso torna mais fácil trabalhar com outras linguagens comparáveis ​​em desempenho.

#3. Integração com estruturas e bibliotecas populares de IA

Como mencionado anteriormente, o Mojo não é uma linguagem completamente nova – é um superconjunto do Python. Como resultado, ele se integra bem com as bibliotecas existentes, como NumPy e PyTorch. Isso significa que, por padrão, o Mojo possui um ecossistema tão grande quanto o do Python.

#4. Capacidades eficientes de manuseio e manipulação de dados

O Mojo foi projetado para manipular vários valores de forma eficiente em paralelo. Isso é mais útil ao realizar álgebra linear, da qual o aprendizado de máquina depende tanto. Mojo também é compilado just-in-time, então o bytecode é otimizado para velocidade. Isso torna o trabalho com dados e aprendizado de máquina eficiente no Mojo.

#5. Escalabilidade e suporte de computação paralela

Como mencionado anteriormente, o Mojo é construído para suportar o paradigma Single Instruction – Multiple Data da computação paralela. Isso vem embutido no Mojo e o torna mais rápido fora da caixa. Ele também supera as bibliotecas Python, como NumPy.

Elementos-chave do Mojo

Nesta seção, discutiremos como escrever programas no Mojo. Como o Mojo deve ser um superconjunto do Python, assim como o TypeScript é um superconjunto do JavaScript, todo código Python válido é um código Mojo válido, mas nem todo código Mojo é um código Python válido.

O Mojo ainda é um trabalho em andamento e alguns recursos da linguagem Python ainda não são suportados — por exemplo, classes. Além disso, um compilador ainda não está disponível, mas você pode usar o Mojo em um notebook de playground. No entanto, você precisará primeiro de uma conta, que pode ser criada no site deles.

No momento, é difícil fornecer um tutorial abrangente sobre o idioma, pois alguns recursos ainda não foram adicionados e nem todas as coisas são suportadas no momento. Em vez disso, discutiremos algumas adições importantes que o Mojo adiciona além do que o Python já possui.

  Como aumentar o zoom no Microsoft Teams

Sintaxe e gramática

Como o Mojo é um superconjunto do Python, suas sintaxes são idênticas. Como o Python, um programa é feito de instruções. Essas instruções podem ser agrupadas em blocos sob funções, loops ou condicionais. As instruções dentro de um bloco são recuadas. Aqui está um exemplo de programa escrito em Mojo:

def odd_or_even():
     for i in range(1, 101):
        if i % 2 == 0:
            print("Even")
        else:
            print("Odd")

odd_or_even()

Isso é perfeitamente idêntico a um programa Python. No entanto, o Mojo oferece recursos adicionais que você verá nas seções a seguir.

Declarações de variáveis

Com o Mojo, você tem duas formas adicionais de declarar variáveis. Você pode usar a palavra-chave let ou var. A palavra-chave let declara uma variável imutável. Depois de inicializado, você não pode reatribuir seu valor a outra coisa. Por outro lado, as variáveis ​​declaradas usando var podem ser reatribuídas, pois são mutáveis.

A principal vantagem das variáveis ​​declaradas usando let ou var é que elas suportam especificadores de tipo. O exemplo a seguir ilustra como as variáveis ​​são declaradas no Mojo.

let pi: Float64 = 3.141
var greeting = "Hello, World"

# This would be impossible
# pi = 6.283

# But this is possible
greeting = "Ola"

print(pi, greeting)

Estruturas

Além disso, para uma maneira diferente de declarar variáveis, o Mojo suporta structs. Uma maneira simples de visualizar structs é que elas são como classes, exceto que são mais rígidas. Ao contrário das classes, você não pode adicionar/remover ou modificar métodos durante a execução, e todos os membros devem ser declarados usando as palavras-chave var ou let. Essa estrutura mais rígida permite que o Mojo gerencie a memória e o desempenho com mais eficiência. Aqui está uma estrutura de exemplo:

struct Person:
    var name: StringLiteral
    var age: Int32
    
    fn __init__(inout self, name: StringLiteral, age: Int32):
        self.name = name
        self.age = age


john = Person("John Doe", 32)
print(john.name, john.age)

Funções

Na estrutura acima, você deve ter notado que declaramos o método __init__ usando a palavra-chave fn em vez de def. Isso ocorre porque, no Mojo, você pode declarar funções usando fn e def. Uma função declarada usando fn é mais rígida em comparação com sua contraparte def.

Especificamente, uma função declarada usando fn tem seus argumentos imutáveis ​​por padrão. Além disso, você deve especificar o tipo de dados dos argumentos e o valor de retorno da função. Todas as variáveis ​​locais devem ser declaradas antes do uso.

fn say_hello(name: StringLiteral):
    print("Hello,", name)
    
# This would be invalid
# fn say_hello(name):
#     print("Hello,", name)

say_hello("John")

Se a função gerar uma exceção, ela deve ser declarada explicitamente quando a função for declarada usando a palavra-chave raises. Além disso, o Mojo não usa a classe Exception como o Python, em vez disso, ele usa a classe Error.

fn will_raise_error() raises:
    raise Error('Some error')
    
will_raise_error()

Sobrecarga

O Mojo também oferece suporte à sobrecarga de operadores com base em diferentes tipos de dados. Isso suporta o princípio de polimorfismo orientado a objetos.

fn add_numbers(a: Int32, b: Int32) -> Int32:
    return a + b

fn add_numbers(a: Int32, b: Int32, c: Int32) -> Int32:
    return a + b + c

let first_total = add_numbers(2, 3)
let second_total = add_numbers(1, 2, 3)

print(first_total, second_total)

Como o Mojo é usado no desenvolvimento de IA

Mojo vem com bibliotecas para construir modelos de Machine Learning. Isso inclui bibliotecas para construir redes neurais. Além disso, você também pode realizar tarefas como Processamento de Linguagem Natural e Visão Computacional.

  Como tornar inteligente o seu condicionador de ar com janela muda

Embora a linguagem em si ainda não esteja concluída e seu ecossistema seja praticamente inexistente, ainda podemos esperar que o Mojo traga muitos recursos para executar tarefas como processamento de dados, criação de modelos, otimização, gerenciamento de modelos e monitoramento.

Mojo é o futuro do desenvolvimento de IA

É difícil prever como a tecnologia provavelmente evoluirá e será adotada. A maioria das previsões está errada, mas isso não significa que não podemos tentar. Para prever se o Mojo provavelmente substituirá o Python, vamos considerar os benefícios e desvantagens/limitações do Mojo:

Benefícios

  • É muito rápido e construído para aproveitar o paralelismo sem fazer muito, o que é essencial para o aprendizado de máquina, pois os modelos de treinamento podem levar muito tempo.
  • É um superconjunto do Python, portanto, mais fácil de aprender e tem uma curva de aprendizado mais suave. Isso reduz o atrito para adoção.
  • Isso reduz as chances de erros na produção, pois erros como nomes de variáveis ​​digitados incorretamente ou incompatibilidades de tipo são detectados durante o tempo de compilação. Isso o torna preferível.

Desvantagens

  • No momento está incompleto. Mas é claro que a equipe da Modular está trabalhando para liberar a linguagem e seu tradutor.
  • Por mais que simplifique o trabalho dos produtores de framework, pode não trazer muita vantagem para os consumidores de framework, pois eles já usam frameworks de aprendizado de máquina em Python.
  • Ainda não possui um grande ecossistema de ferramentas e recursos de aprendizagem. Embora você possa usar as bibliotecas do Python no Mojo, você ainda pode usar as bibliotecas do Python no Python. Para que o Mojo tenha alguma vantagem sobre o Python, ele precisa de bibliotecas que tenham a velocidade do Mojo.

Palavras Finais

A julgar pelo hype atual, é provável que o Mojo se torne uma linguagem popular de IA. Acho que sua velocidade por si só é suficiente para encorajar as pessoas a mudar. Sua simplicidade é uma vantagem. Mas, assim como o TypeScript não substituiu o JavaScript completamente, é provável que o Mojo não substitua o Python completamente.

Mojo é definitivamente um idioma para manter em seu radar quando eventualmente amadurecer.

A seguir, confira Tipo vs. Interface no TypeScript.