Transcript
00:00:00Mojo, a linguagem de programação, acabou de atingir a versão 1.0, e o momento é um pouco estranho.
00:00:05Foi lançada com um compilador fechado, sete dias depois tornaram-na de código aberto,
00:00:09e a Qualcomm acabava de comprar a empresa.
00:00:12Mas vamos esquecer tudo isso por um segundo.
00:00:14O grande diferencial do Mojo é código semelhante ao Python sem abandonar o C++ ou CUDA em busca de velocidade.
00:00:20Então vamos ver se isso realmente cumpre o que promete.
00:00:27Toda a questão com o Mojo resume-se à seguinte pergunta.
00:00:30E se você pudesse escrever código que parece e se comporta exatamente como Python,
00:00:34mas executar as partes que realmente importam sem abandonar o C++ ou CUDA?
00:00:39Uma linguagem legível abrangendo CPU e GPU.
00:00:42Esse é o objetivo principal aqui.
00:00:43E agora que o Mojo finalmente chegou à versão 1.0, eu queria ver quanto disso é realmente verdade.
00:00:49Portanto, antes de entrarmos na Qualcomm, código aberto e tudo isso, vamos apenas executá-lo.
00:00:53Se você gosta de ferramentas de programação para acelerar seu fluxo de trabalho, não deixe de se inscrever.
00:00:57Temos vídeos novos o tempo todo.
00:00:59Vou fazer isso na minha máquina, mas não vou dar um tutorial de Mojo aqui.
00:01:03Se você nunca viu antes, sim, vai parecer com Python,
00:01:07mas você vai notar algumas diferenças fundamentais.
00:01:10Do lado esquerdo está o Python.
00:01:12Do lado direito está o Mojo.
00:01:13É o mesmo loop, a mesma grade, o mesmo limite de iteração.
00:01:17Não vou explicar nenhum dos cálculos matemáticos disso.
00:01:20Observe os dois loops while.
00:01:21Eles estão fazendo exatamente a mesma coisa.
00:01:23Vamos executar o Python primeiro aqui.
00:01:26Ok, ótimo.
00:01:27Funcionou.
00:01:28Foi executado.
00:01:28Agora, o mesmo programa compilado com Mojo.
00:01:32Mais uma vez, vamos executá-lo.
00:01:35E pronto.
00:01:35Aí está.
00:01:36Agora, as somas de verificação não vão coincidir no último dígito.
00:01:39Elas diferem por algumas centenas em um quarto de milhão.
00:01:43O Python faz a multiplicação e depois a adição.
00:01:45A compilação do Mojo pode fundir isso em uma única instrução.
00:01:49Alguns pixels exigem uma iteração extra.
00:01:51Considere os segundos aqui como o número real.
00:01:54E isto não é o NumPy.
00:01:55Não é um modelo.
00:01:56O ganho de desempenho não se resume apenas ao loop de CPU ter ficado mais rápido.
00:02:00Você pode começar em Python porque é fácil.
00:02:03Depois, o caminho passa para C++ ou CUDA.
00:02:06Agora você gerencia dois arquivos e eles começam a se distanciar.
00:02:09Portanto, aqui está a pergunta que o Mojo faz.
00:02:12O arquivo que você lê pode ser exatamente o mesmo arquivo enviado para a GPU?
00:02:17Esta função é o kernel.
00:02:18Cada thread da GPU soma um par de números.
00:02:20É só isso.
00:02:21Eu não mudei para Metal, Swift ou CUDA.
00:02:24Basta compilá-lo.
00:02:26E agora temos o código rodando.
00:02:28Portanto, sim.
00:02:30O Mojo consegue fazer algo bastante interessante aqui.
00:02:32E acabei de compilar um kernel de GPU funcional em um MacBook usando a mesma linguagem em que eu escrevia
00:02:38código normal, o Python.
00:02:40Seu código de aprendizado de máquina começa em Python porque o Python é fácil de usar.
00:02:44Todos nós sabemos disso.
00:02:45Então, com o tempo, o desempenho começa a importar.
00:02:48Portanto, as partes importantes são reescritas em C++ ou CUDA.
00:02:52Agora, passamos a manter duas versões do mesmo sistema.
00:02:55E novamente, com o tempo, isso só gera confusão.
00:02:58A proposta do Mojo é que o arquivo legível e o arquivo rápido sejam exatamente a mesma coisa.
00:03:03Agora, a pessoa por trás de tudo isso é Chris Lattner.
00:03:06Ele criou o LLVM, depois o Clang e, em seguida, o Swift.
00:03:10Mas fazer um kernel de GPU rodar é uma coisa.
00:03:14Chamar a linguagem de versão 1.0, isso já é um pouco diferente.
00:03:18Então, o que a versão 1.0 realmente significa aqui?
00:03:21Não significa que o Mojo esteja finalizado.
00:03:23Significa, mais ou menos, estabilidade.
00:03:25Há promessas de que o código que você escreve hoje não vai quebrar.
00:03:29É para isso que serve um lançamento importante como este.
00:03:30Mas então você se depara com a primeira parte estranha.
00:03:32O Mojo alcançou a versão 1.1 antes mesmo de seu compilador ser de código aberto.
00:03:37A biblioteca padrão já havia sido aberta em março de 2024.
00:03:40Os kernels max foram abertos em 2025.
00:03:43Mas o compilador, a ferramenta que realmente realiza a compilação, permaneceu proprietário até 18 de agosto deste ano.
00:03:50Sob licença Apache 2.0, o que é importante porque apenas sete dias antes, quando o Mojo 1.0 foi lançado, ainda era fechado.
00:03:57E isso responde a uma das maiores críticas que o Mojo recebeu em três anos consecutivos.
00:04:02As pessoas costumavam dizer: claro, mas o compilador é fechado.
00:04:05Já não podemos dizer isso com tanta facilidade, o que parece indicar que estamos caminhando na direção certa.
00:04:10Talvez esteja.
00:04:10Até você olhar para o que aconteceu três semanas antes.
00:04:14A aquisição pela Qualcomm foi concluída em 29 de julho.
00:04:16O Mojo 1.0 foi lançado em 11 de agosto.
00:04:19O compilador abriu em 18 de agosto.
00:04:21Portanto, o maior marco de abertura na história do Mojo ocorreu em menos de três semanas após a Modular deixar de ser uma empresa independente.
00:04:29E isso cria imediatamente duas formas totalmente diferentes de interpretar essa situação.
00:04:33A primeira é que a Qualcomm comprou a Modular porque quer o Mojo em todo lugar.
00:04:37Provavelmente não.
00:04:37Ou a Qualcomm comprou a Modular, e com o tempo tudo isso será absorvido por uma empresa muito maior.
00:04:44A Qualcomm fabrica chips.
00:04:45Uma linguagem que compila bem para chips torna-se muito mais valiosa.
00:04:49Podemos usá-la livremente.
00:04:50Portanto, a decisão de abrir o código faz sentido.
00:04:53Mas o sucesso do Mojo provavelmente não dependerá da Qualcomm.
00:04:57Dependerá de a linguagem ser realmente boa o suficiente para justificar a mudança em primeiro lugar.
00:05:02Mas, novamente, é aqui que tudo começa a ficar confuso.
00:05:05O Mojo tem um problema com benchmarks.
00:05:07Lá em 2023, o grande número divulgado era que o Mojo podia ser 68.000 vezes mais rápido que o Python.
00:05:13Isso é absurdo.
00:05:14Ainda existe uma publicação afirmando que o Mojo é 50% mais rápido que o Rust em análise de DNA.
00:05:19Esse benchmark foi totalmente desmentido.
00:05:21Demonstraram que o teste não estava medindo o que alegava medir.
00:05:25E você ainda vai ver o número de 35.000 vezes circulando por aí.
00:05:29Isso vem de multiplicação de matrizes.
00:05:31Mas o que estão comparando é, bem,
00:05:34de um lado, uma implementação em Mojo totalmente vetorizada, paralelizada e dividida em blocos.
00:05:40Do outro lado, um loop triplo em Python puro.
00:05:44Sim, um loop triplo.
00:05:45Não o NumPy, apenas um loop aninhado que ninguém na Terra usaria de verdade.
00:05:49Portanto, eu não me importo muito com essa história de ser 35.000 vezes mais rápido.
00:05:52Eu queria números obtidos nesta máquina.
00:05:54Estou em um M4 Pro comparado ao Python puro.
00:05:57Em relação ao Python puro, 26 vezes e meia mais rápido.
00:06:00Em relação ao NumPy, por operação, cerca de duas vezes mais rápido.
00:06:05Agora, obviamente, 26 não é 68.000.
00:06:08Mas 26 vezes ainda é um bom número, porque o NumPy já utiliza C por baixo dos panos.
00:06:14Nesse ponto, você não está realmente superando o Python.
00:06:16Você está superando o C com um comportamento de memória melhor.
00:06:19E essa é a parte frustrante sobre o Mojo.
00:06:21Mas o desempenho não é o principal motivo pelo qual eu hesitaria em usar o Mojo hoje.
00:06:25Eu já brinquei com ele antes.
00:06:27Estou executando-o aqui hoje.
00:06:28O ponto principal é a estabilidade.
00:06:30Agora, quão estável é isso?
00:06:32Porque o Mojo 1.0 é lançado com 41 avisos de API instável, incluindo int, print e len, funções essenciais embutidas.
00:06:40Elas foram sinalizadas como instáveis dentro de um suposto lançamento de estabilidade.
00:06:45E no mesmo dia em que o Mojo promete que seu código não quebraria, a remoção da palavra-chave FN quebrou cerca de 39 pacotes do ecossistema.
00:06:52Agora, a palavra-chave FN, que era fundamental para o funcionamento do Mojo, foi completamente removida.
00:06:58Sem processo FC.
00:06:59E embora o compilador seja agora de código aberto, eles ainda não estão aceitando contribuições para ele.
00:07:04Portanto, o Mojo 1.0 é estável, eu imagino.
00:07:07Mas talvez não tão estável quanto eles dizem.
00:07:09O que nos leva à única pergunta que realmente importa.
00:07:12Você deve usar isso?
00:07:13Agora, se você escreve kernels de GPU, CUDA, Triton, esse universo, eu acho que o Mojo vale absolutamente um dia ou dois de atenção.
00:07:21Uma linguagem abrangendo CPU e GPU, e eu consegui compilar um kernel de GPU funcional em um laptop.
00:07:27Não há muita coisa por aí que faça isso.
00:07:29Mas isso ainda tem muito espaço para crescer.
00:07:31Portanto, eu não daria prioridade a isso de jeito nenhum por enquanto.
00:07:35Três anos atrás, o argumento contra o Mojo era bastante simples.
00:07:38Linguagem nova legal, mas quem vai usar isso?
00:07:40Era uma linguagem fechada de uma startup pedindo aos desenvolvedores para apostarem tudo nela.
00:07:44Hoje, o compilador usa a licença Apache 2.0.
00:07:47A linguagem está na versão 1.0.
00:07:48E aquela startup agora faz parte da Qualcomm.
00:07:51Eu sou o Josh da BetterStack.
00:07:53Se você gosta de dicas e truques de programação como este, não deixe de se inscrever.
00:07:56Nos vemos em um próximo vídeo.
Community Posts
No posts yet. Be the first to write about this video!
Write about this video