Mojo наконец-то с открытым исходным кодом... И я протестировал его

BBetter Stack
Computing/Software

Transcript

00:00:00Язык программирования Mojo только что достиг версии 1.0, и момент выбран немного странный.
00:00:05Он появился с закрытым компилятором, через семь дней они открыли его исходный код,
00:00:09а компания Qualcomm как раз только что купила их.
00:00:12Но давайте на секунду забудем об этом.
00:00:14Главная фишка Mojo — код в стиле Python без необходимости переходить на C++ или CUDA ради скорости.
00:00:20Так что давайте посмотрим, работает ли это на практике.
00:00:27Вся суть Mojo сводится к одному вопросу.
00:00:30Что если вы могли бы писать код, который выглядит и ощущается как Python,
00:00:34но при этом запускать самые важные части без отказа от C++ или CUDA?
00:00:39Один легко читаемый язык для процессора и видеокарты.
00:00:42В этом и заключается вся идея.
00:00:43И теперь, когда Mojo наконец дошел до версии 1.0, мне захотелось проверить, насколько все это реально.
00:00:49Так что перед тем, как говорить о Qualcomm, открытом исходном коде и прочем, давайте просто запустим его.
00:00:53Если вам нравятся инструменты для ускорения разработки, обязательно подписывайтесь.
00:00:57У нас постоянно выходят новые видео.
00:00:59Я буду делать это на своем компьютере, но я не собираюсь проводить здесь туториал по Mojo.
00:01:03Если вы никогда раньше его не видели, то да, он выглядит как Python,
00:01:07но вы заметите несколько ключевых отличий.
00:01:10С левой стороны — Python.
00:01:12С правой стороны — Mojo.
00:01:13Тут тот же цикл, та же сетка, тот же лимит итераций.
00:01:17Я не буду вдаваться в математические подробности.
00:01:20Просто посмотрите на оба цикла while.
00:01:21Они делают одно и то же.
00:01:23Сначала мы запустим Python.
00:01:26Ладно, отлично.
00:01:27Он отработал.
00:01:28Выполнился.
00:01:28Теперь запускаем ту же программу, скомпилированную с помощью Mojo.
00:01:32И снова давайте запустим.
00:01:35И бац.
00:01:35Готово.
00:01:36При этом контрольные суммы в последней цифре не сойдутся.
00:01:39Разница составляет пару сотен на четверть миллиона.
00:01:43Python сначала выполняет умножение, а затем сложение.
00:01:45Компилятор Mojo может объединить это в одну инструкцию.
00:01:49Несколько пикселей требуют дополнительной итерации.
00:01:51Считайте секунды здесь реальным показателем.
00:01:54И это не NumPy.
00:01:55Это не какая-то модель.
00:01:56Производительность заключается не только в ускорении цикла на процессоре.
00:02:00Вы можете начать на Python, потому что это просто.
00:02:03Затем путь ведет к C++ или CUDA.
00:02:06Теперь у вас два файла, и они начинают понемногу расходиться.
00:02:09Так вот какой вопрос задает Mojo.
00:02:12Может ли файл, который вы читаете, быть тем же файлом, который выполняется на GPU?
00:02:17Эта функция является ядром.
00:02:18Каждый поток GPU складывает одну пару чисел.
00:02:20Вот и все.
00:02:21Я не переключался на Metal, Swift или CUDA.
00:02:24Компилируем его.
00:02:26И вот код запущен и работает.
00:02:28Так что да.
00:02:30Mojo умеет делать кое-что действительно интересное.
00:02:32Я только что скомпилировал рабочее ядро для GPU на MacBook, используя тот же язык, на котором
00:02:38писал обычный код на Python.
00:02:40Ваш код машинного обучения начинается с Python, потому что с ним легко работать.
00:02:44Мы все это знаем.
00:02:45Затем, в какой-то момент, производительность начинает иметь значение.
00:02:48Поэтому важные части переписываются на C++ или CUDA.
00:02:52Теперь нам приходится поддерживать две версии одной системы.
00:02:55И опять же, со временем это только добавляет путаницы.
00:02:58Суть Mojo в том, что читаемый файл и быстрый файл — это просто одно и то же.
00:03:03За всем этим стоит Крис Латтнер.
00:03:06Он создал LLVM, затем Clang, а после и Swift.
00:03:10Но запустить ядро GPU — это одно.
00:03:14Называть язык версией 1.0 — это уже совсем другое.
00:03:18Так что же на самом деле означает версия 1.0?
00:03:21Совсем не то, что Mojo завершен.
00:03:23Это больше означает стабильность.
00:03:25Появляются гарантии, что код, написанный вами сегодня, не сломается завтра.
00:03:29Вот что такое мажорный релиз.
00:03:30Но тут вы сталкиваетесь с первой странностью.
00:03:32Mojo дошел до версии 1.1 еще до того, как его компилятор стал открытым.
00:03:37Исходный код стандартной библиотеки открыли еще в марте 2024 года.
00:03:40Ядра max открылись в 2025 году.
00:03:43Но компилятор, ту саму штуку, которая выполняет компиляцию, держали закрытой до 18 августа этого года.
00:03:50Лицензия Apache 2.0, и это важно, потому что всего за семь дней до этого, когда вышел Mojo 1.0, он все еще был закрытым.
00:03:57И это закрывает один из главных аргументов критиков Mojo на протяжении трех лет подряд.
00:04:02Раньше можно было сказать: мол, да, но компилятор-то закрыт.
00:04:05Теперь мы так сказать уже не можем, и кажется, что все движется в правильном направлении.
00:04:10Возможно.
00:04:10Пока вы не посмотрите на то, что произошло тремя неделями ранее.
00:04:14Поглощение со стороны Qualcomm завершилось 29 июля.
00:04:16Релиз Mojo 1.0 состоялся 11 августа.
00:04:19Компилятор открыли 18 августа.
00:04:21То есть величайшее событие в истории открытости Mojo произошло менее чем через три недели после того, как Modular перестала быть независимой компанией.
00:04:29И это сразу порождает два совершенно разных взгляда на ситуацию.
00:04:33Первый: Qualcomm купила Modular, потому что хочет видеть Mojo повсюду.
00:04:37Вряд ли.
00:04:37Или второй: Qualcomm купила Modular, и со временем все это растворится внутри гораздо более крупной корпорации.
00:04:44Qualcomm производит чипы.
00:04:45Язык, который отлично компилируется под чипы, становится гораздо более ценным.
00:04:49Мы можем свободно его использовать.
00:04:50Так что шаг в сторону открытого исходного кода вполне логичен.
00:04:53Но успех Mojo, пожалуй, будет зависеть не от Qualcomm.
00:04:57Он будет зависеть от того, достаточно ли хорош сам язык, чтобы вообще оправдать переход на него.
00:05:02Но опять же, здесь все и начинает запутываться.
00:05:05У Mojo есть проблемы с бенчмарками.
00:05:07Еще в 2023 году заявлялось, что Mojo может быть в 68 000 раз быстрее Python.
00:05:13Это безумие.
00:05:14До сих пор существует пост, утверждающий, что Mojo на 50% быстрее Rust при парсинге ДНК.
00:05:19Тот бенчмарк полностью разнесли.
00:05:21Было показано, что он измерял совсем не то, о чем заявлялось.
00:05:25И при этом цифра в 35 000 раз все еще продолжает всплывать.
00:05:29Она берется из умножения матриц.
00:05:31Но с чем именно они сравнивают?
00:05:34С одной стороны — полностью векторизованная, распараллеленная реализация на Mojo.
00:05:40С другой — тройной цикл на чистом Python.
00:05:44Да, тройной цикл.
00:05:45Не NumPy, а просто вложенный цикл, который в реальной жизни никто использовать не будет.
00:05:49Поэтому мне не особо интересны заявления о том, что он быстрее в 35 000 раз.
00:05:52Я хотел получить цифры на своей машине.
00:05:54Я тестирую на M4 Pro в сравнении с чистым Python.
00:05:57По сравнению с чистым Python — быстрее в 26 с половиной раз.
00:06:00По сравнению с NumPy на одну операцию — примерно в два раза быстрее.
00:06:05Конечно, 26 — это вам не 68 000.
00:06:08Но 26 раз — это тоже отличный результат, ведь под капотом NumPy находится C.
00:06:14В таком случае вы соревнуетесь не с Python.
00:06:16Вы превосходите C за счет лучшего управления памятью.
00:06:19И вот это и расстраивает в Mojo больше всего.
00:06:21Но производительность — это на самом деле не главная причина, почему я бы сомневался насчет использования Mojo сегодня.
00:06:25Я уже экспериментировал с ним раньше.
00:06:27И запускаю его здесь сегодня.
00:06:28Главный вопрос — стабильность.
00:06:30Насколько он стабилен?
00:06:32Потому что Mojo 1.0 выходит с 41 предупреждением о нестабильности API, включая int, print и len — основные встроенные функции.
00:06:40Их пометили как нестабильные в так называемом релизе стабильности.
00:06:45И в тот же день, когда Mojo обещает, что ваш код не сломается, удаление ключевого слова FN ломает около 39 пакетов экосистемы.
00:06:52Ключевое слово FN, которое играло огромную роль в работе Mojo, было полностью удалено.
00:06:58Никакого процесса FC.
00:06:59И хотя компилятор теперь имеет открытый исходный код, они пока не принимают в него сторонние контрибьюты.
00:07:04Так что Mojo 1.0 стабилен, наверное.
00:07:07Но, пожалуй, не так стабилен, как они говорят.
00:07:09Что подводит нас к единственному вопросу, который действительно имеет значение.
00:07:12Стоит ли его использовать?
00:07:13Если вы пишете ядра GPU, CUDA, Triton и тому подобное, я считаю, что Mojo определенно стоит потраченного дня или двух.
00:07:21Один язык для CPU и GPU, плюс я смог скомпилировать работающее ядро GPU прямо на ноутбуке.
00:07:27Мало что еще способно на такое.
00:07:29Но у него все еще есть огромный простор для роста.
00:07:31Так что я бы пока точно не ставил его в приоритет.
00:07:35Три года назад аргументы против Mojo были довольно простыми.
00:07:38Классный новый язык, но кто им будет пользоваться?
00:07:40Это был закрытый язык от стартапа, который просил разработчиков поставить на него все.
00:07:44Сегодня компилятор распространяется под лицензией Apache 2.0.
00:07:47У языка версия 1.0.
00:07:48А тот стартап теперь стал частью Qualcomm.
00:07:51Я Джош из BetterStack.
00:07:53Если вам нравятся подобные советы и трюки по программированию, обязательно подписывайтесь.
00:07:56Увидимся в следующем видео.

Key Takeaway

Язык Mojo получил открытый компилятор версии 1.0 и интеграцию с Qualcomm, но сохраняет нестабильность API и требует дальнейшей доработки экосистемы.

Highlights

  • Язык программирования Mojo достиг версии 1.0 и открыл исходный код компилятора под лицензией Apache 2.0.

  • Компания Qualcomm приобрела разработчика Mojo компанию Modular в июле 2026 года.

  • Производительность Mojo при сравнении с чистым Python на процессоре M4 Pro выше в 26,5 раза, а с NumPy — примерно в 2 раза.

  • Версия 1.0 содержит 41 предупреждение о нестабильности API, включая базовые встроенные функции int, print и len.

  • Удаление ключевого слова FN привело к поломке около 39 пакетов в экосистеме языка.

Timeline

Возможности и тестирование производительности Mojo

  • Mojo совмещает синтаксис Python с высокой производительностью для процессоров и графических ускорителей.
  • Компилятор объединяет инструкции умножения и сложения в один шаг.
  • Тестирование на чипе M4 Pro показывает ускорение в 26,5 раза по сравнению с чистым Python.

Язык разрабатывался для создания единого файла, который читается как Python, но исполняется на GPU без перехода на C++ или CUDA. Компиляция кода на MacBook позволяет запускать рабочие ядра графического процессора на привычном синтаксисе. Реальное тестирование производительности опровергает ранние рекламные заявления о росте скорости в десятки тысяч раз, подтверждая практический прирост в 26,5 раза относительно чистого Python.

Релиз версии 1.0 и сделка с Qualcomm

  • Мажорная версия 1.0 означает гарантии стабильности существующего кода.
  • Компания Qualcomm завершила поглощение Modular за несколько недель до релиза версии 1.0.
  • Исходный код компилятора стал открытым под лицензией Apache 2.0.

Появление версии 1.0 гарантирует защиту написанного кода от неожиданных поломок в будущем. Открытие исходного кода компилятора закрывает трехлетнюю критику закрытой модели разработки. Поглощение со стороны Qualcomm связывает будущее языка с производством аппаратных чипов.

Проблемы стабильности и перспективы использования

  • Релиз версии 1.0 сопровождается 41 предупреждением о нестабильности базовых интерфейсов.
  • Удаление ключевого слова FN ломает десятки существующих пакетов.
  • Mojo подходит для написания ядер GPU, но пока не готов для приоритетного внедрения.

Несмотря на статус мажорного релиза, кодовая база содержит нестабильные элементы, включая встроенные функции int и len. Удаление ключевого слова FN нарушает работу экосистемы сторонних библиотек. Язык эффективен для написания специализированных графических ядер, но требует времени для полной стабилизации.

Community Posts

No posts yet. Be the first to write about this video!

Write about this video