stringtranslate.com

Mojo (язык программирования)

Mojoязык программирования в семействе Python , который в настоящее время находится в стадии разработки. [3] [4] [5] Он доступен как в браузерах через блокноты Jupyter , [5] [6] , так и локально на Linux и macOS . [7] [8] Mojo стремится объединить удобство использования языка программирования высокого уровня , в частности Python , с производительностью системных языков программирования, таких как C++ , Rust и Zig . [9] По состоянию на 2024 год компилятор Mojo является проприетарным программным обеспечением (с закрытым исходным кодом) со стандартной библиотекой с открытым исходным кодом . Modular, компания, стоящая за Mojo, заявила о намерении в конечном итоге открыть исходный код языка Mojo по мере его развития. [10]

Mojo строится на основе фреймворка программного обеспечения компилятора Multi-Level Intermediate Representation ( MLIR ) вместо непосредственно фреймворка компилятора LLVM более низкого уровня , как это делают многие языки, такие как Julia , Swift , Clang и Rust. [11] [12] MLIR — это более новый фреймворк компилятора, который позволяет Mojo использовать проходы компилятора более высокого уровня, недоступные только в LLVM, и позволяет Mojo компилировать и нацеливаться не только на центральные процессоры (ЦП), включая создание кода, который может работать на графических процессорах (GPU), тензорных процессорах (TPU), специализированных интегральных схемах (ASIC) и других ускорителях. Он также часто может более эффективно использовать определенные типы оптимизаций ЦП напрямую, такие как одна инструкция, несколько данных (SIMD) без прямого вмешательства разработчика, как это происходит во многих других языках. [13] [14] По словам Джереми Ховарда из fast.ai, Mojo можно рассматривать как « синтаксический сахар для MLIR», и по этой причине Mojo хорошо оптимизирован для таких приложений, как искусственный интеллект (ИИ). [15]

История возникновения и развития

Язык программирования Mojo был создан компанией Modular Inc, которую основали Крис Латтнер , первоначальный архитектор языка программирования Swift и LLVM , и Тим Дэвис, бывший сотрудник Google . [16] Цель Mojo — сократить разрыв между простотой использования Python и высокой производительностью, необходимой для современных приложений ИИ. [17]

Согласно общедоступным журналам изменений, разработка Mojo началась в 2022 году. [18] В мае 2023 года первая публично тестируемая версия была размещена в сети через размещенную игровую площадку. [19] К сентябрю 2023 года Mojo стал доступен для локальной загрузки для Linux [20] , а к октябрю 2023 года он также стал доступен для загрузки на macOS от Apple . [21]

В марте 2024 года Modular открыла исходный код стандартной библиотеки Mojo и начала принимать вклады сообщества по лицензии Apache 2.0. [22] [23]

Функции

Mojo был создан для легкого перехода с Python. Язык имеет синтаксис, похожий на синтаксис Python, с выведенной статической типизацией [24] и позволяет пользователям импортировать модули Python . [25] Он использует LLVM и MLIR в качестве бэкэнда компиляции. [5] [26] [27] Язык также намерен добавить интерфейс внешней функции для вызова кода C/C++ и Python. Язык несовместим с исходным кодом Python 3, предоставляя только подмножество своего синтаксиса , например, отсутствуют глобальное ключевое слово, списочные и словарное понимание и поддержка классов. Кроме того, Mojo также добавляет функции, которые обеспечивают производительное низкоуровневое программирование: fn для создания типизированных , скомпилированных функций и «struct» для оптимизированных для памяти альтернатив классам . Структуры Mojo поддерживают методы , поля , перегрузку операторов и декораторы . [6]

Язык также предоставляет средство проверки заимствований , вдохновленное Rust . [28] Функции Mojo def по умолчанию используют семантику значений (функции получают копию всех аргументов, и любые изменения не видны за пределами функции), в то время как функции Python используют семантику ссылок (функции получают ссылку на свои аргументы, и любые изменения изменяемого аргумента внутри функции видны за ее пределами). [29]

Язык не имеет открытого исходного кода, но в будущем планируется сделать его открытым. [30] [31] [32] [33]

Примеры программирования

В Mojo функции можно объявлять как с помощью fn (для производительных функций), так и с помощью def (для совместимости с Python). [25]

Базовые арифметические операции в Mojo с функцией def :

def  sub ( x ,  y ): """Питонское вычитание.""" res = x - y return res        

и с функцией fn :

fn  add ( x : Int , y : Int ) -> Int : """Ржавое дополнение.""" let res : Int = x + y return res          

Способ, которым Mojo использует var и let для объявлений изменяемых и неизменяемых переменных, соответственно, отражает синтаксис, найденный в Swift. В Swift var используется для изменяемых переменных, в то время как let обозначает константы или неизменяемые переменные. [25]

Объявление и использование переменных в Mojo:

fn  main () : пусть x = 1 пусть y : Int y = 1          вар z = 0 z += 1      

Использование

Mojo SDK позволяет программистам Mojo компилировать и выполнять исходные файлы Mojo локально из интерфейса командной строки и в настоящее время поддерживает Ubuntu и macOS. [34] Кроме того, существует расширение Mojo для Visual Studio Code, которое обеспечивает автодополнение кода и всплывающие подсказки.

В январе 2024 года была опубликована модель вывода LLaMA2, написанная на языке Mojo. [35]

Смотрите также

Ссылки

  1. ^ "Как Modular упростил инфраструктуру программного обеспечения ИИ". Fast Company . Получено 2024-08-19 .
  2. ^ "Mojo Changelog". Modular . Получено 2024-04-14 .
  3. ^ "Руководство по программированию Mojo". docs.modular.com . Модульный. 2023 . Получено 2023-09-26 . Mojo — это язык программирования, который так же прост в использовании, как Python, но обладает производительностью C++ и Rust. Более того, Mojo предоставляет возможность использовать всю экосистему библиотек Python.
  4. ^ "Почему Mojo - язык для технологии компиляторов следующего поколения". docs.modular.com . Модульный. 2023 . Получено 2023-09-26 . В то время как многие другие проекты теперь используют MLIR, Mojo является первым крупным языком, разработанным специально для MLIR, что делает Mojo уникально мощным при написании кода системного уровня для рабочих нагрузок ИИ.
  5. ^ abc Крилл, Пол (4 мая 2023 г.). «Язык Mojo объединяет Python и MLIR для разработки ИИ». InfoWorld .
  6. ^ ab Yegulalp, Serdar (7 июня 2023 г.). «Первый взгляд на язык моджо». InfoWorld .
  7. ^ Дойчер, Мария (7 сентября 2023 г.). «Modular делает свой оптимизированный для ИИ язык программирования Mojo общедоступным». Silicon Angle . Получено 11 сентября 2023 г.
  8. ^ "Mojo для Mac OS". Модульный . Получено 2023-10-19 .
  9. ^ "Mojo: язык программирования для всего ИИ". Modular.com . Получено 28.02.2024 .
  10. ^ "Следующий большой шаг в Mojo Open Source". Modular.com . Получено 28.05.2024 .
  11. ^ Крилл, Пол (2023-05-04). «Язык Mojo объединяет Python и MLIR для разработки ИИ». InfoWorld . Получено 2024-05-28 .
  12. ^ «Стоит ли Julia использовать MLIR в будущем?». Язык программирования Julia . 2024-02-20 . Получено 28-05-2024 .
  13. ^ "Modular Docs: Почему Mojo". docs.modular.com . Получено 2024-05-28 .
  14. ^ https://llvm.org/devmtg/2023-10/slides/keynote/Mojo.pdf
  15. ^ Ховард, Джереми (04.05.2023). "fast.ai - Mojo может стать крупнейшим достижением языка программирования за последние десятилетия". fast.ai . Получено 28.05.2024 .
  16. ^ Клэберн, Томас (2023-05-05). «Modular находит свой Mojo, надмножество Python со скоростью уровня C». The Register . Получено 2023-08-08 .
  17. ^ https://venturebeat.com/ai/mojo-rising-the-resurgence-of-ai-first-programming-languages/
  18. ^ "Журнал изменений Mojo".
  19. ^ "Унифицированная, расширяемая платформа для сверхмощного ИИ". Modular.com . Получено 2024-04-14 .
  20. ^ "Mojo - наконец-то здесь!". Modular.com . Получено 2024-04-14 .
  21. ^ "Mojo теперь доступен на Mac". Modular.com . Получено 2024-04-14 .
  22. ^ "Modular открывает исходные коды основных компонентов языка программирования Mojo AI". SiliconANGLE . 2024-03-28 . Получено 2024-05-28 .
  23. ^ "mojo/stdlib/README.md в nightly · modularml/mojo". GitHub . Получено 2024-05-28 .
  24. ^ "Modular Docs - Руководство по программированию Mojo". docs.modular.com . Получено 2023-10-19 .
  25. ^ abc "Modular Docs - Руководство по программированию Mojo". docs.modular.com . Получено 2023-10-31 .
  26. ^ Латтнер, Крис; Пиенаар, Жак (2019). MLIR Primer: инфраструктура компилятора для отмены закона Мура (технический отчет) . Получено 30 сентября 2022 г.
  27. ^ Латтнер, Крис; Амини, Мехди; Бондугула, Удай; Коэн, Альберт; Дэвис, Энди; Пиенаар, Жак; Риддл, Река; Шпейсман, Татьяна; Василаче, Николя; Зиненко, Александр (29 февраля 2020 г.). «MLIR: инфраструктура компилятора для конца закона Мура». arXiv : 2002.11054 [cs.PL].
  28. ^ "Modular Docs: Право собственности и заимствование". Modular . Получено 29.02.2024 .
  29. ^ "Руководство по программированию Mojo". Модульный. Архивировано из оригинала 2023-06-11 . Получено 2023-06-11 . Все значения, переданные в функцию def Python, используют семантику ссылок. Это означает, что функция может изменять передаваемые в нее изменяемые объекты, и эти изменения видны за пределами функции. Однако поведение иногда удивляет непосвященных, поскольку вы можете изменить объект, на который указывает аргумент, и это изменение не будет видно за пределами функции. Все значения, переданные в функцию Mojo, по умолчанию используют семантику значений. По сравнению с Python это важное отличие: функция def Mojo получает копию всех аргументов: она может изменять аргументы внутри функции, но эти изменения не будут видны за пределами функции.
  30. ^ "Open Source | Mojo🔥 FAQ | Modular Docs". docs.modular.com . Получено 2024-11-09 .
  31. ^ "Modular: следующий большой шаг в Mojo🔥 с открытым исходным кодом". www.modular.com . Получено 2024-11-09 .
  32. ^ "Modular: Ценообразование". www.modular.com . Получено 2024-11-09 .
  33. ^ Modular (2024-08-22). Комментарий от @modularinc . Получено 2024-11-09 – через YouTube.
  34. ^ "Modular Docs - дорожная карта Mojo и острые углы". docs.modular.com . Получено 2023-10-31 .
  35. ^ "Журнал изменений llama2.mojo". GitHub .

Внешние ссылки