Mojo: Как Крис Латтнер ускоряет Python в 35 000 раз и объединяет ИИ

Lex Fridman 2 млн 3 ч 34 мин 30 мин 02.06.2023
Главное

Мы привыкли к архитектурному хаосу и бесконечной переписке кода с Python на C++ настолько, что перестали замечать эту сложность, словно рыбы, не видящие воду. Крис Латтнер намерен разрушить этот барьер с помощью Mojo — языка программирования с официальной поддержкой расширения .🔥, который обеспечивает 35 000-кратное ускорение и возвращает разработчикам прямой контроль над мощностью современного железа.

🔥 Новая эра программирования: Миссия Mojo и философия Modular 2:33

Миссия Mojo и Modular в мире ИИ 2:33

Крис Латтнер, стоявший за созданием таких фундаментальных технологий, как LLVM, Clang и язык Swift, видит современное состояние индустрии ИИ как «гигантский хаос» (gigantic mess) . В беседе с Лексом Фридманом он объясняет, что за последние десять лет мир вычислительной техники радикально изменился: если раньше мы полагались на центральные процессоры (CPU), то сегодня доминируют специализированные ускорители — GPU, TPU, NPU и другие «PU» . Каждое новое устройство требует своего набора инструментов, что создает фрагментацию и усложняет жизнь разработчикам.

Миссия компании Modular и созданного ею языка Mojo заключается в том, чтобы упростить этот стек технологий. По словам Латтнера, Mojo задумывался не просто как очередной язык, а как универсальная платформа, способная объединить удобство Python с производительностью системных языков вроде C или C++ . Ранее в разговоре они кратко упоминали о феноменальном ускорении кода в 35 тысяч раз, но Крис подчеркивает: главная цель — сделать программирование для ИИ доступным не только узким специалистам по «железу», но и обычным исследователям и разработчикам .

Mojo позиционируется как язык, ориентированный прежде всего на ИИ (AI-first). Это означает, что он изначально проектировался с учетом требований современных нейросетей и систем машинного обучения . Однако Латтнер уточняет, что проблемы, которые решает Mojo — например, эффективное управление памятью и работа с параллельными вычислениями — актуальны для всей индустрии ПО. Поэтому, будучи «заточенным» под ИИ, Mojo по своей сути является мощным языком общего назначения .

Эмодзи как расширение файлов в Mojo 4:10

Одним из самых необычных и обсуждаемых решений команды Mojo стало использование эмодзи огня (🔥) в качестве официального расширения имен файлов. Латтнер признается, что это решение было принято отчасти в шутку, но оно несет в себе глубокий смысл . В мире, где тысячи языков программирования используют расширения вроде .py, .c или .swift, расширение .🔥 позволяет проекту мгновенно выделиться.

Крис отмечает несколько причин для такого шага:

Лекс Фридман в ходе дискуссии подмечает техническую сложность: например, система контроля версий Git может некорректно отображать такие символы в терминале . Однако Латтнер настроен оптимистично, полагая, что инструменты разработки адаптируются под новые реалии, как это уже было в Swift, где эмодзи разрешены даже в качестве имен переменных . Крис с юмором вспоминает, что после внедрения этой функции в Swift интернет заполнился кодом, где в качестве имен использовался символ «кучи какашек» (pile of poop), но уверен, что для расширения файлов сообщество выберет более эстетичные варианты .

Метапрограммирование и авто-тюнинг в компиляторе 17:24

Технологическое ядро Mojo базируется на инновационном подходе к архитектуре компилятора. Крис Латтнер объясняет, что в Mojo удалось интегрировать интерпретатор прямо в процесс компиляции . Это позволяет выполнять часть кода еще на этапе сборки программы, что открывает невероятные возможности для оптимизации.

Традиционные языки, такие как C++, используют шаблоны (templates) для метапрограммирования, но многие разработчики считают их синтаксис громоздким и сложным для понимания . Mojo идет другим путем: он позволяет использовать привычный синтаксис для написания логики, которая будет выполняться компилятором. Латтнер сравнивает этот подход с тем, что реализовано в языке Zig, где возможности рантайма переносятся на этап компиляции .

Одной из самых перспективных функций, вытекающих из такой архитектуры, является авто-тюнинг (auto-tuning) . Латтнер указывает на фундаментальную проблему: алгоритмы машинного обучения на разных GPU работают по-разному из-за различий в кэше, количестве ядер и пропускной способности памяти. Обычно эксперты вручную подбирают «магические числа» (параметры оптимизации) для каждого конкретного чипа .

Mojo автоматизирует этот процесс:

  1. Компилятор может запустить множество вариаций одного и того же алгоритма с разными параметрами прямо в процессе сборки .
  2. Система измеряет производительность каждой версии на целевом «железе».
  3. В итоговый бинарный файл записывается самый быстрый вариант.

Это позволяет достигать максимальной производительности без необходимости для программиста быть глубоким экспертом в архитектуре видеокарт. «Большинство нормальных программистов на самом деле не хотят знать тонкости устройства железа», — резюмирует Крис, подчеркивая, что Mojo берет эту сложность на себя .

Анатомия скорости: почему Mojo быстрее Python в тысячи раз 27:56

Когда Крис Латтнер (Chris Lattner) и его команда представили Mojo, индустрию поразила цифра: новый язык способен работать в 35 000 раз быстрее стандартного Python. В разговоре с Лексом Фридманом (Lex Fridman) Крис подчеркивает, что такая производительность — это не просто теоретический максимум, а следствие радикального пересмотра архитектуры того, как код взаимодействует с «железом». Для современных ИИ-продуктов это означает не только экономию на серверах, но и возможность запускать более тяжелые и умные модели в рамках того же бюджета времени .

Технологический фундамент 35-тысячного ускорения 27:56

Главная причина медлительности стандартного Python заключается в том, что python3 — это интерпретатор байт-кода, который делает программу «непрозрачной» для оптимизаций процессора . Mojo же изначально строится как компилируемый язык, использующий современные методы генерации машинного кода. Однако разрыв в производительности объясняется не только наличием компилятора, но и решением трех фундаментальных проблем Python:

  1. Избавление от «объектной инфляции»: В Python всё является объектом. Даже самое простое число имеет «заголовок» (header), хранящий информацию о типе и другие метаданные . Это приводит к тому, что при передаче данных программа постоянно оперирует указателями и косвенной адресацией (indirection). Mojo позволяет работать с данными напрямую, без лишних оберток .
  2. Эффективное управление памятью: Python полагается на подсчет ссылок (reference counting), что создает огромные накладные расходы при выполнении каждой операции . Ранее в интервью Крис упоминал Глобальную блокировку интерпретатора (GIL), и именно способ работы с памятью в Mojo позволяет эффективно обходить подобные ограничения, обеспечивая масштабируемость.
  3. Векторизация и параллелизм: Современные процессоры способны выполнять 4, 8 или даже 16 операций одновременно (SIMD/векторные вычисления). Mojo дает разработчику инструменты для прямого использования этих мощностей, позволяя выполнять задачи параллельно на уровне ядер и аппаратных блоков .

Как отмечает Крис, Mojo — это попытка дать Python-разработчикам «суперсилу» C++, сохраняя при этом привычный синтаксис .

Прогрессивная типизация: выбор между гибкостью и строгим контролем 31:06

Один из самых дискуссионных вопросов в программировании — это типизация. Лекс Фридман в шутку замечает, что «взрослые используют строгую типизацию», хотя сам предпочитает динамику Python для прототипирования . Mojo предлагает уникальный подход, называемый прогрессивной типизацией.

В отличие от стандартного Python, где аннотации типов (type hints) являются лишь подсказками для внешних инструментов вроде MyPy и игнорируются самим интерпретатором при выполнении , в Mojo типы имеют реальное значение для компилятора.

Основные преимущества системы типов Mojo:

Крис подчеркивает: разработчик не должен чувствовать давления со стороны языка. Использование типов в Mojo — это инструмент для достижения предсказуемости и скорости, а не бюрократическая обуза .

Наследие Python и вызовы сообщества 43:44

Разработка нового языка — это не только техническая, но и социальная задача. Крис вспоминает болезненный переход от Python 2 к Python 3, который занял у мирового сообщества многие годы и стоил огромных усилий . Mojo стремится избежать подобного раскола, предлагая путь плавной миграции, где старый код может постепенно обрастать новыми возможностями Mojo.

Обсуждая роль сообщества, Крис упоминает Гвидо ван Россума (Guido van Rossum), который в свое время покинул пост «великодушного пожизненного диктатора» Python из-за давления и сложности управления дизайном языка . Крис признает, что работа над Mojo в открытом режиме (начиная с версии 0.1) — это вызов, требующий баланса между архитектурной чистотой и потребностями пользователей .

Особое внимание в Mojo уделяется числовым типам данных. Поскольку язык ориентирован на ИИ, работа с целыми числами и числами с плавающей точкой вынесена на уровень стандартной библиотеки, а не зашита жестко в ядро, что дает разработчикам невероятную гибкость в оптимизации вычислений . Хотя Mojo еще находится на ранней стадии развития (версия 0.1 на момент записи), он уже позволяет низкоуровневым программистам творить вещи, недоступные в обычном Python .

В завершение этого сегмента Крис подводит к теме семантики значений и того, как Mojo обрабатывает копирование данных — критически важный аспект, который будет подробно разобран в следующей части разговора .

💎 Семантика значений и борьба с хаосом в инфраструктуре ИИ 50:12

Магия владения: как избежать «багов по неосторожности» 50:12

Одной из фундаментальных проблем при разработке сложных систем является управление общими данными. Крис Латтнер объясняет, что в традиционных языках программирования разработчик часто сталкивается с дилеммой: копировать ли данные при каждой передаче или использовать указатели (ссылки) . Если вы выбираете ссылки, возникает риск «призрачных изменений»: один программист меняет запись в базе данных, не подозревая, что этот же объект используется в другой части системы, что приводит к трудноуловимым ошибкам .

Mojo предлагает решение через продвинутую модель семантики значений (value semantics). В отличие от Python, где всё по умолчанию является ссылкой, или C++, где управление памятью ложится на плечи программиста, Mojo заимствует идеи из Rust, но стремится сделать их более доступными . Ключевые аспекты этой модели включают:

Латтнер подчеркивает, что цель Mojo — дать разработчику мощь системного программирования (как в Rust), но избавить его от необходимости постоянно «бороться с проверщиком заимствований» (borrow checker) . Это особенно важно для многопоточных вычислений, где правильная передача владения позволяет избежать блокировок (locks) и состояния гонки при обращении к тензорам . Ранее в разговоре они кратко упоминали причины высокой производительности Mojo, и именно такая работа с памятью является одним из кирпичиков этого фундамента.

Инфраструктурный тупик: почему ИИ застрял в «точках решения» 1:00:31

Переходя от чистого программирования к индустрии ИИ в целом, Латтнер указывает на критическую проблему: фрагментацию и избыточную сложность стека. Он сравнивает текущее состояние инженерии ИИ с рыбами, которые не замечают воды, в которой плавают . Индустрия настолько привыкла к нагромождению инструментов, что перестала видеть в этом проблему.

Основной конфликт разворачивается между миром исследований и миром продакшена. Исследователи работают в Python и Jupyter-ноутбуках — это удобно и гибко . Однако, когда модель нужно развернуть в облаке или на устройстве, она сталкивается с «деплоймент-стеной» . Python не предназначен для эффективного развертывания, поэтому код часто приходится полностью переписывать на C++ . Это не только замедляет процесс, но и разделяет команду на «учёных» и «инженеров», которые говорят на разных языках.

Крис выделяет несколько причин этой сложности:

  1. Устаревшее наследие: Системы вроде TensorFlow создавались в эпоху, когда мир ИИ был другим, и попытки адаптировать их под новые задачи ведут к нагромождению костылей .
  2. Point Solutions (Точечные решения): Вместо создания универсальных инструментов компании создают узкоспециализированные стеки под конкретное железо или задачу .
  3. Взрыв аппаратного обеспечения: Сейчас существует более сотни стартапов, разрабатывающих новые чипы для ИИ . Каждый такой чип требует своего программного стека, что только усиливает хаос.

Миссия Modular: унификация против фрагментации 1:06:54

Modular ставит своей целью победить эту сложность через унификацию. Латтнер объясняет, что индустрия достигла стадии зрелости, когда ИИ перестал быть просто областью исследований и стал инженерной дисциплиной . В этот момент становится очевидно, что нам не нужны десятки разрозненных компиляторов и библиотек — нам нужен единый, понятный и масштабируемый стек.

Проблема не в том, что Python плох, а в том, что он ограничен . Крис утверждает, что если бы Python был достаточно хорош для всех задач, Modular бы не существовало. Но разрыв между «удобным Python» и «быстрым C++» заставляет инженеров тратить годы на поддержку хрупких систем .

Решение Modular заключается в создании платформы, которая позволит:

Латтнер выражает симпатию к инженерам, которые вынуждены строить долгосрочные решения на этом зыбучем песке . Проект Modular и язык Mojo — это попытка создать твердую почву, где инновации в ИИ не будут тормозиться несовершенством инструментов .

🧩 Гетерогенные вычисления и физика программного обеспечения 1:15:26

Одной из фундаментальных проблем современной разработки Крис Латтнер считает разрыв между специалистами, знающими внутреннее устройство «железа», и авторами компиляторов. Программирование для специализированных чипов сегодня напоминает «черную магию»: эксперты по аналоговым компьютерам или архитектуре GPU могут написать невероятно эффективный код, но они не являются системными программистами . Роль Mojo заключается в том, чтобы сделать программируемость доступной для этих экспертов без необходимости погружаться в дебри разработки компиляторов. Ранее в разговоре Крис и Лекс упоминали сложность инфраструктуры ИИ, и именно здесь Mojo предлагает решение, основанное на управлении аппаратной неоднородностью.

Гетерогенные среды и координация ускорителей 1:18:47

Современные вычислительные системы давно перестали быть гомогенными. Как объясняет Крис Латтнер, термин «гетерогенность» в данном контексте означает сосуществование множества различных типов процессоров в рамках одной системы . Если десять лет назад стандартная схема ограничивалась связкой «CPU плюс GPU», где данные просто пересылались по сети или шине, то сегодня мы имеем дело с целым созвездием специализированных блоков .

Внутри одного современного чипа могут находиться:

Главная проблема здесь — сложность. Каждый из этих компонентов имеет свою систему команд и свои требования к памяти. Крис Латтнер подчеркивает, что его главным врагом является сложность, возникающая из-за использования разрозненных специализированных систем . Mojo стремится унифицировать этот процесс, делая распределение задач между ядрами явным и управляемым.

Программист должен иметь возможность четко определять, какая часть вычислений уходит на тот или иной участок чипа . Это классическая задача «размещения» (placement) и «партиционирования» (partitioning), которая в Mojo превращается из ручного труда в задачу авто-тюнинга. Вместо того чтобы вручную подбирать параметры для каждой архитектуры, система может использовать поиск по многомерному пространству решений, фактически превращая оптимизацию компиляции в задачу машинного обучения .

Сращивание ядер и физика памяти 1:18:49

Когда речь заходит о достижении экстремальной производительности, Латтнер призывает смотреть не только на алгоритмы, но и на то, «что позволяет делать физика» . В современных вычислениях главным бутылочным горлышком является не скорость работы транзисторов, а перемещение данных между памятью и вычислительными блоками. Пересылка байтов туда и обратно — это самая дорогая операция с точки зрения времени и энергопотребления .

Одним из ключевых методов борьбы с этой задержкой является сращивание ядер (kernel fusion) . Эта техника позволяет объединять несколько математических операций в один проход внутри ускорителя. Вместо того чтобы вычислить одну функцию, сохранить результат в основную память, а затем снова загрузить его для следующей функции, Mojo позволяет выполнять всю цепочку действий непосредственно в регистрах или локальной памяти чипа.

Крис выделяет иерархическую структуру оптимизаций, которую Mojo внедряет на уровне библиотек:

  1. Векторизация: выполнение одной команды над множеством элементов данных одновременно .
  2. Параллелизация: распределение задач между множеством ядер .
  3. Тайлинг (Tiling): важнейшая оптимизация памяти, при которой данные разбиваются на небольшие блоки («плитки»), соразмерные с кэш-памятью процессора .

Если размер блока выбран правильно, данные остаются в кэше L1 или регистрах (которые Крис называет «кэшем нулевого уровня»), что позволяет избежать обращений к медленной глобальной памяти . Такой подход позволяет добиваться кратных ускорений (например, в 12 раз на простых задачах) даже без учета глобальных архитектурных изменений .

Преодоление фрагментации ML-инструментария 1:30:19

Состояние современных инструментов машинного обучения Латтнер описывает как «хрупкое» . В отличие от мира Си, где компиляторы развивались десятилетиями, стек ИИ построен разными командами, разными поставщиками оборудования и на разных системах. В результате, если вы пытаетесь развернуть новую модель на новом железе, конвертеры часто просто «падают» .

Mojo и инфраструктура MLIR (Multi-Level Intermediate Representation) созданы для того, чтобы стать «точкой фиксации сложности» . Это система, которая способна обобщать алгоритмы и делать их переносимыми. Вместо того чтобы переписывать код под каждый новый чип, разработчик описывает алгоритм в высокоуровневом виде, а компилятор берет на себя адаптацию под конкретную физику железа.

В конечном итоге, цель состоит в том, чтобы объединить «два мира». С одной стороны — динамичный и нетипизированный мир Python, который удобен для исследований. С другой — жесткий мир высокопроизводительных вычислений. Крис верит, что в будущем Mojo позволит запускать стандартные Python-пакеты без CPython, обеспечивая бесшовный переход от прототипа к максимально оптимизированному бинарному коду, работающему на пределе физических возможностей оборудования .

🐍 Совместимость как стратегия: почему Mojo не повторяет ошибки Swift и Julia 1:40:18

Разработка нового языка программирования — это всегда баланс между теоретическим совершенством и суровой практикой. Крис Латтнер (Chris Lattner) подчеркивает, что успех любого инструмента зависит не только от его производительности, но и от того, насколько легко сообщество может его принять. В контексте ИИ это означает неизбежное столкновение с доминированием Python.

Прагматизм против идеализма: урок Clang и GCC 1:46:48

Крис Латтнер часто возвращается к своему опыту разработки Clang и LLVM, чтобы проиллюстрировать важность обратной совместимости. Когда проект Clang только начинался в середине 2000-х, перед командой стояла дилемма: создать идеально чистый парсер C++ или сделать его совместимым с «грязными» и нестандартными расширениями GCC .

В то время GCC был де-факто стандартом, и хотя как инженер Латтнер понимал, что проще написать систему с нуля, прагматизм взял верх. Если бы Clang не мог скомпилировать существующие заголовочные файлы C, никто бы не стал его использовать . Этот «военный опыт» лег в основу философии Mojo: вместо того чтобы заставлять мир переписывать код, нужно строить мосты к уже существующим экосистемам.

Ранее в интервью Лекс Фридман (Lex Fridman) и Крис обсуждали невероятное ускорение Mojo по сравнению с Python, но именно совместимость Латтнер называет критическим фактором для того, чтобы эти цифры имели значение в реальном мире.

Ловушка «строгого надмножества» 1:43:37

Одним из самых тонких моментов в дизайне Mojo является отказ от статуса «строгого надмножества» (strict superset) Python. На первый взгляд это кажется контринтуитивным, но Крис объясняет, что попытка быть 100% совместимым на уровне синтаксиса «загоняет разработчика в угол» .

Проблема строгих надмножеств (как в случае с C и C++) заключается в том, что новый язык наследует все ошибки проектирования и ограничения своего предшественника . Python, при всей его элегантности, имеет фундаментальные проблемы с производительностью, связанные с глобальной блокировкой интерпретатора (GIL) и упаковкой объектов в памяти.

Mojo выбирает путь «совместимого, но независимого» развития:

Разговор с Гвидо ван Россумом и единство сообщества 1:50:08

Крис Латтнер отмечает, что для него было крайне важно обсудить проект с Гвидо ван Россумом (Guido van Rossum), создателем Python. Главный риск при создании Mojo заключался в потенциальной фрагментации сообщества, подобной болезненному переходу с Python 2 на Python 3 .

Гвидо, по словам Криса, проявил большой интерес к проекту. Основная идея сосуществования заключается в том, что пользователи Python и «моджичианцы» (Mojicians) — как Крис в шутку называет сообщество Mojo — могут делить один и тот же код . Mojo не пытается заменить Python для всех задач; он предлагает решение там, где Python достигает своего предела — в высокопроизводительных вычислениях и инфраструктуре ИИ.

Почему Swift для TensorFlow и Julia не стали мейнстримом 2:02:43

Анализируя прошлые попытки внедрить новые языки в сферу ИИ, Латтнер выделяет две основные причины их ограниченного успеха. Первая и самая очевидная: «Swift — это не Python» . Несмотря на то что Swift — быстрый и эффективный язык, барьер для входа оказался слишком высоким для исследователей, чей рабочий процесс полностью завязан на библиотеках Python.

Вторая причина касается архитектуры вычислений. В проекте Swift для TensorFlow (S4TF) Крис и его команда пытались внедрить дифференцируемое программирование непосредственно в компилятор. Это было технологическим прорывом, но рынок в тот момент двигался в сторону «eager mode» (немедленного выполнения), который популяризировал PyTorch .

Уроки Julia также были учтены:

  1. Проблема «двух языков»: необходимость писать прототип на Python, а критические части на C++ или Julia, создает когнитивную нагрузку .
  2. Экосистема: Julia создала великолепную среду, но она остается изолированной от огромного количества наработок на Python.

Mojo стремится решить «проблему N миров» (N-world problem) . Вместо того чтобы создавать еще один изолированный остров, Крис строит систему, которая объединяет простоту Python с мощностью C++, позволяя разработчикам LLM и других современных моделей не тратить время на переписывание кода ради производительности .

🛠 Стратегия «0.1»: уроки Swift и влияние Джереми Ховарда 2:20:49

Оглядываясь на десятилетия разработки языков программирования и компиляторов, Крис Латтнер подчеркивает, что успех новой технологии зависит не только от её архитектуры, но и от стратегии её выхода в мир. Опыт создания Swift и LLVM научил его, что избыточная секретность может стать ловушкой, а прагматизм практиков-исследователей — лучшим компасом для проектирования сложных систем.

Отказ от «секретных лабораторий»: уроки Swift и запуск Mojo 0.1 2:20:49

Крис Латтнер вспоминает запуск Swift как один из самых напряженных периодов в своей карьере. В Apple проект разрабатывался в режиме строжайшей секретности в течение четырех лет . Когда язык наконец представили публике, это стало «большим взрывом», который привел к неожиданным последствиям. Внутренние команды Apple, не знавшие о проекте, внезапно оказались перед необходимостью переписывать код и адаптироваться к сырому инструменту, что вызвало огромное трение .

Проблема «закрытой» разработки заключается в накоплении технического долга. Когда вы строите систему в вакууме, вы часто принимаете решения, которые кажутся верными, но не проходят проверку реальностью на ранних этапах. В случае со Swift это привело к болезненным изменениям в версиях 2.0 и 3.0, когда код пользователей постоянно «ломался» .

С Mojo Крис Латтнер и команда Modular выбрали диаметрально противоположный путь — стратегию открытой и ранней итерации:

Латтнер убежден: если технология действительно способна «поднять» целую индустрию, не страшно потратить лишние пару месяцев на открытое обсуждение . Ранее в разговоре Крис уже упоминал использование эмодзи как расширение файлов, и такие детали — лишь верхушка айсберга того взаимодействия, которое Modular выстраивает с пользователями.

Прагматизм Джереми Ховарда: ИИ как прикладная дисциплина 2:28:06

Огромное влияние на идеологию Mojo оказал Джереми Ховард, основатель fast.ai. Латтнер полушутя отмечает, что Mojo — это результат того, что он «наконец-то прислушался к Джереми» . Влияние Ховарда заключается в глубоко прагматичном подходе к машинному обучению, который контрастирует с чисто теоретическими изысканиями.

Джереми Ховард известен своим grassroots-подходом (идущим «от земли»): он обучает миллионы людей строить работающие модели, не дожидаясь идеальных инструментов. Еще во время работы Криса в Google над проектами для TensorFlow, Ховард указывал на то, что существующие фреймворки слишком громоздки и далеки от реальных нужд инженеров . Его критика всегда строилась вокруг эффективности: как сделать обучение моделей быстрее, а код — понятнее.

Влияние Fast.ai на Mojo проявляется в нескольких аспектах:

  1. Доступность: Язык должен быть понятен не только PhD в области компьютерных наук, но и прикладному исследователю, которому нужно «просто запустить модель» .
  2. Производительность «из коробки»: Джереми всегда настаивал на том, что Python-инфраструктура тратит слишком много времени на лишние вычисления (эпохи обучения, неэффективные циклы). Mojo стремится дать ту самую «скорость vroom», о которой говорил Ховард .
  3. Уход от сложности: Ховард пропагандирует упрощение стека технологий. Вместо нагромождения библиотек на C++, CUDA и Python, Mojo предлагает единое пространство для экспрессивного и быстрого кода .

Прогноз на десятилетие: почему физика не станет проще 2:15:51

Обсуждая будущее, Латтнер подчеркивает, что сложность оборудования — это не временная трудность, а константа, продиктованная физикой. За последние 10 лет мы перешли от простых CPU к зоопарку из GPU, TPU и специализированных AI-акселераторов . Прогнозы на следующие 10 лет указывают на то, что аппаратная среда станет еще более «странной» и гетерогенной, возможно, включая аналоговые компьютеры .

Это оправдывает создание Mojo как инструмента, который не просто дает «дофаминовый удар» от 10-кратного ускорения кода , но и создает надежный мост между высокоуровневым программированием и физическими ограничениями железа будущего. Латтнер верит, что успех придет к тем системам, которые смогут предложить «средний путь»: прогрессивное обучение новым возможностям без принуждения к сложности .

Укрощение хаоса: упаковка пакетов и философия двух ключевых слов 2:32:09

Боль Python-зависимостей и системный подход Mojo

Одной из самых болезненных тем для любого, кто профессионально работает с Python, является управление зависимостями и дистрибуция пакетов. Лекс Фридман отмечает, что у многих разработчиков остались настоящие «шрамы» от попыток настроить окружение . Проблема Python не только в обилии инструментов управления пакетами, но и в том, что современная экосистема ИИ фактически расколота надвое: логика пишется на Python, а производительные библиотеки — на C или C++.

Крис Латтнер подчеркивает, что Mojo стремится решить эту многолетнюю проблему на фундаментальном уровне. Вместо того чтобы накладывать очередную заплатку на систему сборки, Mojo объединяет управление кодом на Python и низкоуровневым кодом в единую бесшовную систему. Когда язык изначально понимает и динамические, и системные аспекты программирования, необходимость в сложной «склейке» разных языков отпадает сама собой.

В ходе обсуждения Латтнер и Фридман касаются текущего состояния экосистемы:

Mojo предлагает пересмотреть саму концепцию упаковки. Поскольку компилятор Mojo (ранее в разговоре Крис упоминал его способность к глубокому анализу кода) видит всю структуру программы целиком, он может более эффективно управлять зависимостями, не разделяя их на «родные» и «внешние».

Выбор между гибкостью и строгостью: 'def' против 'fn' 2:40:00

Ключевое архитектурное решение Mojo — сосуществование двух разных режимов объявления функций: def и fn. Это позволяет Mojo быть одновременно и «лучшим Python», и мощным системным языком.

Режим def оставлен для максимальной совместимости с Python. Это динамический режим, где типы могут быть не указаны, а поведение программы остается гибким и привычным для тех, кто привык к быстрой итеративной разработке и написанию скриптов «на коленке» . Как отмечает Крис, Python прекрасен для одноразовых задач, где строгость только мешает .

Режим fn, напротив, предназначен для системного программирования. Он вводит строгие правила:

  1. Явное объявление переменных: Вы не можете просто создать переменную присваиванием, не объявив её (например, через var) .
  2. Строгая типизация: Требуется четкое определение типов аргументов и возвращаемых значений.
  3. Контроль владения: Это дает компилятору возможность проводить оптимизации, недоступные в динамической среде.

Крис Латтнер сравнивает это с уроками, извлеченными из разработки Swift . Философия Mojo не в том, чтобы заставлять программиста быть строгим, а в том, чтобы дать ему выбор. Лекс Фридман признается, что предпочитает строгость (fn), так как она дает чувство контроля и силы . В режиме fn компилятор ловит опечатки и логические ошибки на этапе сборки, что критически важно для крупных инфраструктурных проектов.

Обработка ошибок и путь к завершению языка 2:44:19

Разница между def и fn проявляется и в том, как Mojo обрабатывает ошибки. В традиционном C++ существует концепция «zero-cost exceptions», которая, по словам Латтнера, на самом деле обходится очень дорого, когда ошибка действительно происходит . В Mojo используется иной подход: обработка ошибок реализована через механизм вариантов (variants), что делает её предсказуемой и очень быстрой.

Это позволяет Mojo масштабироваться до самых низов — вплоть до микроконтроллеров, где традиционные механизмы исключений Python или C++ слишком тяжеловесны . Вместо того чтобы «раздувать» бинарный файл сложными таблицами поиска для исключений, Mojo проверяет результат функции локально, что по производительности сопоставимо с возвратом кода ошибки, но сохраняет удобство синтаксиса try-except.

Несмотря на мощный фундамент, Крис честно признает, что Mojo — очень молодой язык (на момент записи подкаста ему было всего несколько месяцев). В списке задач на реализацию всё ещё значатся важные элементы:

На текущем этапе «Полярной звездой» для команды Modular является построение стека для ИИ . Все функции языка внедряются исходя из этой приоритетной задачи, но конечная цель — создать универсальный инструмент, который уберет барьер между исследователем данных и системным инженером.

🧠 Память без пауз и искусство найма в Modular 2:55:54

Жадная деструкция: как Mojo управляет жизненным циклом объектов 2:55:54

Одной из самых амбициозных технических инноваций в Mojo Крис Латтнер считает систему автоматического управления временем жизни объектов. В отличие от C++, где деструкторы срабатывают строго в конце области видимости (scope), или Python с его подсчетом ссылок и сборщиком мусора, Mojo использует принцип «жадной деструкции» (Eager Destruction). Объект уничтожается сразу после его последнего использования в коде .

Эта деталь кажется незначительной только на первый взгляд. На деле она решает несколько фундаментальных проблем системного программирования:

Реализация такой системы — задача нетривиальная. Компилятору приходится анализировать все потоки управления (control flow), чтобы точно определить момент последнего использования переменной . По словам Латтнера, это пример того, как возможность построить язык с нуля позволяет «правильно уложить каждый кирпич», не оглядываясь на наследие прошлых десятилетий .

Крис также отмечает, что в Mojo уже встроена высокопроизводительная поддержка async/await, адаптированная для гетерогенных вычислений (CPU, GPU и другие ускорители) . Это особенно важно, так как в стандартном Python потоки никогда не были сильной стороной, а Mojo стремится сделать параллельное программирование естественным и быстрым .

Культура Modular: от «страданий индустрии» до удалёнки и офлайна 3:05:46

Создание новой технологической экосистемы требует не только гениального кода, но и уникальной команды. Крис Латтнер делится опытом построения компании Modular, которая находится в поиске «редких единорогов» — специалистов по компиляторам и инфраструктуре ИИ.

Философия найма в Modular строится на принципе «работы от обратного» — от страданий пользователей. «Мы смотрим на боль и страдания в индустрии и идем назад к решению», — объясняет Крис . Чтобы привлечь лучших инженеров из Big Tech, компания должна предложить не только высокую зарплату , но и свободу от корпоративной бюрократии.

Латтнер проводит параллели со своим опытом в Apple, отмечая важность продуктового мышления. Apple часто выпускает технологии, которые кажутся несовершенными (например, первый iPhone без функции «копировать-вставить»), но они фокусируются на ключевом пользовательском опыте, а затем итеративно дорабатывают остальное . Modular следует схожему пути: сначала заложить мощный фундамент, а затем добавлять «синтаксический сахар», даже если сообщество очень просит об этом прямо сейчас . В этом контексте Крис вскользь упоминает возможность использования эмодзи в качестве расширений файлов, о чем они говорили ранее, как пример гибкости и свежего взгляда на каноны .

Особое внимание уделяется культуре удалённой работы. Modular — компания, ориентированная на remote-first, что позволяет нанимать таланты по всему миру, но создает сложности с часовыми поясами и коммуникацией .

Для сплочения команды Крис выделяет следующие практики:

Завершая блок о культуре, Крис подчеркивает, что работа в стартапе над открытыми проектами вроде Mojo дает инженерам чувство сопричастности к чему-то, что меняет мир, а не просто увеличивает выручку рекламного гиганта . В самом конце этого фрагмента дискуссия плавно переходит к теме будущего ИИ и того, как LLM изменят сам процесс написания кода, что станет центральной темой финала их беседы .

🚀 Будущее программирования: ИИ как напарник и децентрализация технологий 3:20:45

В завершающей части беседы Лекс Фридман и Крис Латтнер обращаются к фундаментальным вопросам: как большие языковые модели (LLM) изменят повседневную работу инженера и стоит ли человечеству опасаться стремительного развития искусственного интеллекта. Крис Латтнер, опираясь на свой опыт создания языков и компиляторов, видит в ИИ не угрозу профессии, а мощнейший инструмент для борьбы со сложностью.

LLM как инструмент преодоления синтаксической строгости 3:21:12

Одной из главных проблем традиционного программирования всегда была избыточная требовательность инструментов. Компиляторы — крайне «привередливые» сущности: они требуют идеальной точности в расстановке двоеточий, скобок и соблюдении синтаксических правил . Для человека, чья мысль движется гораздо быстрее, чем пальцы по клавиатуре, эта рутина часто становится барьером.

По мнению Криса, появление LLM и инструментов вроде GitHub Copilot кардинально меняет этот ландшафт. Эти модели берут на себя «черновую» работу по написанию шаблонного кода, позволяя разработчику сосредоточиться на творческом потенциале . Программирование начинает смещаться от процесса механической реализации к процессу выражения намерений (intent).

Крис предсказывает, что в будущем работа программиста станет больше похожа на построение доказательств . Вместо того чтобы прописывать каждый шаг алгоритма, инженер будет формулировать высокоуровневые требования и описывать желаемый результат, а ИИ-системы — предлагать варианты реализации, которые человек затем проверяет и интегрирует в общую архитектуру системы . Это не означает исчезновение кода как такового, но меняет уровень абстракции, на котором оперирует человек.

Взгляд на риски AGI и инерция физического мира 3:24:10

Когда речь заходит о рисках создания сильного искусственного интеллекта (AGI), Крис Латтнер занимает позицию сдержанного оптимиста. Он признает, что обсуждение «Скайнета» и экзистенциальных угроз стало клише, но предлагает смотреть на проблему через призму скорости адаптации .

Крис отмечает важный разрыв: технологии ИИ развиваются экспоненциально, но человечество и физический мир обладают огромной инерцией . Хорошим примером здесь служит сфера автономного вождения: несмотря на колоссальные успехи в обучении моделей, массовое внедрение беспилотников в реальный мир занимает десятилетия из-за сложности дорожной инфраструктуры, законодательства и физических ограничений .

Вместо страха перед глобальным захватом власти ИИ, Крис предпочитает фокусироваться на том, как эти технологии помогут решить проблему сложности — его давнего «заклятого врага» . Если ИИ поможет автоматизировать повторяющиеся задачи, это не лишит людей работы, а освободит их для решения более масштабных и интересных проблем, которые раньше были недоступны из-за нехватки ресурсов или времени.

Демократизация технологий и решение локальных задач 3:28:05

Основная надежда Криса связана с демократизацией доступа к сложным технологиям. Сегодня создание продвинутых ИИ-систем — это прерогатива узкого круга специалистов и компаний с огромными бюджетами . Однако снижение барьеров входа может привести к тому, что использование техник машинного обучения станет таким же привычным и доступным навыком, как базовое программирование на Python .

Латтнер видит в этом огромный потенциал для «нишевых» областей:

Когда технологии станут доступнее, мир перейдет от «няньства» над капризными ИИ-инструментами к их продуктивному использованию в повседневной жизни . Крис верит, что это приведет к расцвету инноваций в тех сферах, которые сейчас считаются слишком мелкими или специфичными для технологических гигантов.

Советы будущему поколению инженеров 3:30:55

В финале диалога Крис дает совет молодым людям, которые только начинают свой путь в мире, меняющемся под влиянием ИИ. Его главный призыв — не ограничиваться теорией и «просто строить вещи» . Будь то мобильное приложение или обучение собственной модели, практический опыт создания продукта с нуля дает понимание, которое невозможно получить в учебниках.

Крис также призывает сохранять независимость мышления. Как «гик от мира компиляторов», он отмечает: «Если все идут налево, иногда стоит пойти направо» . Часто самые большие возможности скрываются в областях, которые другие принимают как должное или считают «решенными». Глубокое понимание того, как работают нижние слои стека технологий, которые большинство считает «магией», делает инженера по-настоящему уникальным и ценным специалистом .

Завершая беседу, Лекс Фридман благодарит Криса за его вклад в развитие инфраструктуры искусственного интеллекта и за то, что он остается «настоящим» — человеком, который не просто рассуждает о будущем, но и строит его своими руками, делая технологии доступнее для каждого.

💬 Цитаты

«Проблема в том, что в нашей индустрии мы, как рыбы, которые не видят воду. Мы привыкли к этой сложности и перестали её замечать.»

«Большинство нормальных программистов на самом деле не хотят знать все эти тонкости железа, они просто хотят, чтобы их код работал быстро.»

Крис Латтнер 23:40

«Mojo — это во многом результат того, что я наконец-то прислушался к Джереми Ховарду. Это всё его вина.»

«Мы смотрим на боль и страдания в индустрии и идем назад к решению.»

«Если мы сможем разрушить барьеры, использование методов ИИ станет таким же доступным, как программирование на Python.»

«Mojo дает вам суперсилы. Если вы хотите оставаться в рамках Python — это нормально, но Mojo открывает новые возможности.»

👥 Спикеры
📖 Термины
Kernel fusion
Технология сращивания вычислительных операций для минимизации обращений к основной памяти.
Тайлинг
Метод разбиения данных на блоки, соответствующие размеру кэша процессора для ускорения доступа.
Авто-тюнинг
Встроенный в компилятор механизм автоматического подбора оптимальных параметров алгоритма под конкретное оборудование.
Семантика значений
Подход к управлению памятью, исключающий ошибки через строгое определение владельца данных.
Технологии и IT Mojo Крис Латтнер Modular Python Искусственный интеллект