LINUX.ORG.RU

Mojo 1.0

 , , , ,


2

3

Представлен стабильный релиз языка программирования Mojo 1.0, который ознаменовал стабилизацию языка и реализацию всех базовых возможностей. Выпуск оценивается как готовый к повсеместному использованию и позволяющий начать разрабатывать крупные проекты, не опасаясь появления в языке изменений, нарушающих совместимость.

В состав платформы включены компоненты, необходимые для разработки приложений на языке Mojo, включая компилятор, runtime, интерактивную REPL-оболочку для сборки и запуска программ, отладчик, дополнение к редактору кода Visual Studio Code (VS Code) с поддержкой автодополнения ввода, форматирования кода и подсветки синтаксиса, модуль для интеграции с Jupyter для сборки и запуска Mojo notebook. Исходный код стандартной библиотеки Mojo открыты под лицензией Apache 2.0 c исключениями от проекта LLVM, допускающими смешивание с кодом под лицензией GPLv2. Исходный код компилятора планируют открыть после завершения стабилизации внутренней архитектуры.

Язык Mojo развивается под руководством Криса Латнера (Chris Lattner), основателя и главного архитектора проекта LLVM и создателя языка программирования Swift. Синтаксис Mojo основан на языке Python, а система типов близка к C/C++. Проект преподносится как язык общего назначения, расширяющий возможности языка Python средствами системного программирования, подходящий для широкого круга задач и сочетающий простоту применения для исследовательских разработок и быстрого создания прототипов с пригодностью для формирования высокопроизводительных конечных продуктов.

Простота достигается благодаря использованию привычного синтаксиса языка Python, а разработке конечных продуктов способствуют возможность компиляции в машинный код, механизмы безопасной работы с памятью и задействование средств для аппаратного ускорения вычислений. Для достижения высокой производительности поддерживается распараллеливание вычислений с задействованием всех имеющихся в системе аппаратных ресурсов гетерогенных систем, таких как GPU, специализированные ускорители для машинного обучения и векторные процессорные инструкции (SIMD). При интенсивных вычислениях распараллеливание и задействование всех вычислительных ресурсов даёт возможность добиться производительности, превосходящей приложения на C/C++.

Язык поддерживает статическую типизацию и средства для безопасной низкоуровневой работы с памятью, напоминающие возможности языка Rust, такие как отслеживание времени жизни ссылок и проверка заимствования переменных (borrow checker). При этом в языке доступны и возможности для низкоуровневой работы, например, возможно прямое обращение к памяти в режиме unsafe с использованием типа Pointer, вызов отдельных SIMD-инструкций или доступ к аппаратным расширениям, таким как TensorCores и AMX.

Mojo может использоваться как в режиме интерпретации с использованием JIT, так и для компиляции в исполняемые файлы (AOT, ahead-of-time). В компилятор встроены современные технологии автоматической оптимизации, кэширования и распределённой компиляции. Исходный код на языке Mojo преобразуются в низкоуровневый промежуточный код MLIR (Multi-Level Intermediate Representation), развиваемый проектом LLVM. Компилятор позволяет применять для генерации машинного кода различные бэкенды, поддерживающие MLIR.

Одновременно сформирован выпуск движка MAX Framework 26.5, предлагающего платформу для разработок в области машинного обучения. MAX Framework дополняет инструментарий Mojo средствами для разработки и отладки приложений, использующих модели машинного обучения в различных форматах (TensorFlow, PyTorch, ONNX и т. п.). В версии 26.5 добавлена возможность установки только необходимых зависимостей, используя синтаксис max["имя"], а также добавлена поддержка двух новых семейств AI-моделей — GLM-5.2 и Nemotron-H.

>>> Источник: OpenNET

★★★★★

Проверено: hobbit ()
Последнее исправление: dataman (всего исправлений: 2)

Синтаксис Mojo основан на языке Python, а система типов близка к C/C++ не моё (Mojo).

Синтаксис питона мне не нравится, не понимаю почему столько деревативов от него, я не программист, но вот если я привык писать на сях или луа с отступами в 2 пробела, или в условных блоках открывать фигурную скобу на уровне оператора, мне кажется избыточным заставлять себя следовать требованиям по отсупам в пайтоне. Я конечно понимаю, что тут эгоистичен и не прав.

включая runtime

Mojo не имеет сборщика мусора, вместо этого он использует семантику перемещения, что позволяет языку безопасно и быстро удалять неиспользуемые ресурсы и отказаться от использования рантайма

Так всё таки, рантайм есть но можно не использовать?

При интенсивных вычислениях распараллеливание и задействование всех вычислительных ресурсов даёт возможность добиться производительности, превосходящей приложения на C/C++

Славно когда есть кого закапывать, то есть на кого равняться.

доступны и возможности для низкоуровневой работы, например, возможно прямое обращение к памяти в режиме unsafe с использованием типа Pointer, вызов отдельных SIMD-инструкций или доступ к аппаратным расширениям, таким как TensorCores и AMX

Вот это явно зря, это надо было обернуть, тут мамкины хакеры делов наделают. По всей видимости, систему типов близкую к C/C++ пришлось внедрять только из за этой сомнительной фичи.

splinter ★★★★★
()

На первый взгляд выглядит неплохо. Синтаксис - нечто среднее между Python и Goшечки, рефлексия есть и весь код с ней читается даже без знания синтаксиса, что есть круто. Компайлтайм тоже обозначается явно через ключевое слово comptime, без извращений типа (if) constexpr/consteval/constinit как в плюсиках. Жалко что язык этот будет долго себе дорогу пробивать, если вообще займет хоть какую-то позицию.

Xintrea ★★★★★
()

Судя по скорости с которой начали появляться новые языки без, нейрослопа тут не обошлось. Какие проблемы решает этот язык? Чем он , грубо говоря, лучше чем язык ХХХ?

Языков у нас хватает. У нас программистов нормальных нету и продуктов. Зато языков - завались.

vvb333007
()
Последнее исправление: vvb333007 (всего исправлений: 1)

Если Моджо, может предложить, что-то чего ещё не было, или гибрид, чего либо, то это определенно класс, но пока проект недостаточно промасштабирован.

REDDERa
()
Последнее исправление: REDDERa (всего исправлений: 1)

Их Mojo работает, но ни на что не влияет? :-)

fox72
()
Последнее исправление: fox72 (всего исправлений: 1)
Ответ на: комментарий от REDDERa

может предложить, что-то чего ещё не было

У них оригинальный синтаксис :)

def function_name[
​    parameters ...
](
​    arguments ...
) -> return_value_type:
​    function_body

Да и вообще: «Mojo: The systems language for the AI era.». Теперь я уверен, что этот язык написан ИИшницей. Очередная реклама Клода и Антропиков :).

vvb333007
()
Последнее исправление: vvb333007 (всего исправлений: 1)

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

yvv1 ★★
()
Ответ на: комментарий от vvb333007

Какие проблемы решает этот язык?

Основная проблема - компиляция в различные архитектуры без костылей. Там основная фишка это не сам фронтенд, а MLIR.

yvv1 ★★
()
Ответ на: комментарий от vvb333007

Языков-то завались, только адекватных без критических приколов почитай что и нету. Поищи всякие статьи типа «Приколы и странности Python/JavaScript/Go», а это считаются простыми языками. Для Плюсов и Руст писать такие статьи вообще смысла нет, потому что они по современным меркам -непознаваемые и неизучаемые, а приколы и странности - это их второе название.

Xintrea ★★★★★
()
Ответ на: комментарий от yvv1

Код по большей части там генерированный. Я бегло посмотрел на их stdlib/atomics - уверен, что генерированный.

Ну чтож, посмотрим, сколько может жить генерированный язык, и сколько на нем напишут^W перепишут полезного.

Из интересного - для контактов с devteam предлагается дискорд и онлайн-форум.

Скорее всего у них и ответами devteam ИИшница занимается :0)

vvb333007
()
Ответ на: комментарий от Xintrea

Они позиционируют свой язык как системный. Т.е. на замену Си. Но проще Си выдумать язык сложно.

ЗЫ Мысли в слух:

Плюсы - сложный язык, но не обязательно пользоваться всеми его возможностями - можно жить в сабсете языка, не зная его целиком. Как в общем-то и поступает большинство программистов на Си++.

Раст, как системный язык - слишком сложен в освоении новичками и практически нереален в освоении программистами, которые писали на Си\Си++ всю жизнь. Нет, не из-за сложности языка как такового, а из-за его концепций, которые считают программиста ребенком, сующими пальцы в розетку. Про синтаксис Раста я вообще промолчу.

Системный язык, в первую очередь должен не мешать программисту. А если программист не знает как работать с указателями и памятью, то не стоит ему лезть в системное программирование.

vvb333007
()
Последнее исправление: vvb333007 (всего исправлений: 1)
Ответ на: комментарий от splinter

но вот если я привык писать на сях или луа с отступами в 2 пробела

def four(x):
    return 4*x

def two(x):
  return 2*x

print(four(2))
print(two(3))

Выводит:

8
6
seiken ★★★★★
()
Ответ на: комментарий от splinter

Это стилистическая рекомендация. Как говорит один блоггер, это не требование, а нижайшая просьба.

seiken ★★★★★
()
Последнее исправление: seiken (всего исправлений: 1)
Ответ на: комментарий от vvb333007

Но проще Си выдумать язык - сложно.

Я буквально вчера втирал коллегам что C-based синтаксис - это сложно, люди его хреново понимают. Мне все стали тулить что сишечка - вообще для первоклассников, ну а плюсики - да, сложноваты, пишем на подмножестве.

Тогда я дал код, который должен уметь объяснить любой сишник/плюсист. Спросил, что здесь определяется:

int* a, b;
Половина людей с четвертьвековым стажем сказали что это два указателя на int.

Впрочем, я не был удивлен такому результату.

Xintrea ★★★★★
()
Последнее исправление: Xintrea (всего исправлений: 1)
Ответ на: комментарий от vvb333007

Разработка же началась задолго до AI, думаешь переписали все с тех пор?

pftBest ★★★★
()
Ответ на: комментарий от splinter

Синтаксис питона мне не нравится, … мне кажется избыточным заставлять себя следовать требованиям по отсупам в пайтоне.

Это вопрос.

я привык писать на сях или луа с отступами в 2 пробела, или в условных блоках открывать фигурную скобу на уровне оператора

А это ответ.

Скобочки по факту только засоряют код и ничем, кроме привычки, это не объясняется. Да и не скобками едиными. Запись вида: if user in active_users: максимально читаемая, а потому заставляет меньше напрягать голову, пока парсишь текст программы.

bbc69
()
Ответ на: комментарий от bbc69

Скобочки по факту только засоряют код и ничем, кроме привычки, это не объясняется.

Операторные скобки придуманы не от балды, а от необходимости писать компиляторы.

И много проще наставить {}, а потом нажать в любимо т.р. или IDE кнопку «сделать красивое», чтобы получить единообразные отступы, даже если в исходники добавляли целые блоки или наоборот, запихивали уже написанные куски внутрь блоков.

Что проще, когда спохватился, что забыл проверку сделать, написать if(){ обрамляем нужный кусок }, или выделять тот кусок, смещать его на 2 (3, 4) пробела или на табуляцию (не забыв выбрать редактор, который это позволяет легко делать), делать пустую строку для вписывания if-а и молиться, что нигде с пробелами/табуляцией не налажал?

mister_VA ★★★
()
Ответ на: комментарий от Xintrea

Поищи всякие статьи типа «Приколы и странности Python/JavaScript/Go», а это считаются простыми языками

Имею мнение, что у любого языка есть такие вот тёмные места. Потому адекватность языков надо оценивать как-то иначе.

bbc69
()
Ответ на: комментарий от vvb333007

Нет, не из-за сложности языка как такового, а из-за его концепций, которые считают программиста ребенком, сующими пальцы в розетку. Про синтаксис Раста я вообще промолчу.

По мне так синтаксис раста вполне обычный. Ничего такого я там не припомню.

Что до концепции, то там не польцы в розетку, а «чтобы мне работать быстро и безопасно, ты должен писать вот так. Точка.».

bbc69
()
Ответ на: комментарий от mister_VA

Операторные скобки придуманы не от балды, а от необходимости писать компиляторы.

Вот и я про тоже. И кто-то додумался не программистов писать под железку, а заставить железку понимать, что написал программист.

И много проще наставить {}, а потом нажать в любимо т.р. или IDE кнопку «сделать красивое», чтобы получить единообразные отступы, даже если в исходники добавляли целые блоки или наоборот, запихивали уже написанные куски внутрь блоков.

Современные ИДЕ умеют нормально пробелы ставить. Даже после if changed: доп отступ организуют. Плюс можно вложенность спокойно увеличивать и уменьшать. Если Вы всё ещё пишите на nano, vi или подобном - сочувствую.

И да, для питона форматтеры существуют.

bbc69
()
Ответ на: комментарий от cyrusmsk

«Настоящий программист на Фортране на любом языке может написать программу на Фортране.»

bbc69
()

сверхцель языка не понятна. Питон идеален для agile методик. Если нужна числодробильня, сишка к питону прикручивается достаточно просто. Если нужен бинарь, pyinstaller всё подготовит. Mojo походит на некий эксперимент человека, разбирающегся в низкоуровневых оптимизациях, типа, все ругают питон за тормоза, а я сейчас подхимичу, и будет всё быстро. Возможно даже, что на дипломную работу хватит. Только это уже не питон, если в нём явная типизация и дополнительная фаза компиляции.

При этом не понятно, как там с многопоточкой, модными асинками и вот этим всем. При этом основная парадигма та же, ООП. Смотрел примеры с лямбдами - ни одного примера со сложным statement, т.е. скорее всего, лямбды такие же кастрированные, как в питоне.

seiken ★★★★★
()
Ответ на: комментарий от bbc69

Запись вида: if user in active_users: максимально читаемая, а потому заставляет меньше напрягать голову, пока парсишь текст программы

В сплошном коде записи типа if user in active_users

визуально скользят, взгляду не за что зацепится, нет стоп-признака, как при использовании фигурных скобок

if (!user.is_active) { return false; }

splinter ★★★★★
()
Последнее исправление: splinter (всего исправлений: 1)
Ответ на: комментарий от splinter

Там по блоку всё видно.

if user in active_users:
    xxxxxxxx
    xxxxx
    xxxxxxxxxxxxx
    xxxxxx

if (!user.is_active) { return false; }

Замечу, что Ваш код не соответствует моему.

bbc69
()

В новости не хватает пары слов об авторе. У автора за плечами Swift, Clang и LLVM. Язык, собственно, для массового параллелизма.

sarumeister
()
Ответ на: комментарий от sarumeister

Язык Mojo развивается под руководством Криса Латнера (Chris Lattner), основателя и главного архитектора проекта LLVM и создателя языка программирования Swift

dataman ★★★★★
() автор топика
Ответ на: комментарий от bbc69

Скобочки по факту только засоряют код и ничем, кроме привычки, это не объясняется.

Это объясняется разными форматами инфиксных, префиксных и постфиксных выражений © (aliev.me).

quickquest ★★★★★
()

def add(x: Int, y: Int) -> Int: «««A typed addition.»»» return x + y

def magnitude_squared(self) -> Int: return self.x * self.x + self.y * self.y

var x: Int

Ну в принципе норм, жить можно. Просто добавляет типизацию аргументов и результатов

I-Love-Microsoft ★★★★★
()
Последнее исправление: I-Love-Microsoft (всего исправлений: 2)
Ответ на: комментарий от bbc69

Современные ИДЕ умеют нормально пробелы ставить.

Как IDE поймёт, какие куски в какую ветку if-а надо запихать?

mister_VA ★★★
()
Ответ на: комментарий от seiken

Язык, собственно, для массового параллелизма.

в смысле, для task-parallelism - не алё?

Я сам в этом не сильно але. MLIR. Компиллятор знает про Cuda, AMD и Apple Silicon. Надо попробовать задачки из Advent-of-code.

sarumeister
()
Ответ на: комментарий от sarumeister

Да язык для GPU через MLIR сделан AI + LLM задачи основной фокус Но и просто быстрые вычисления хорошо работать будут SIMD хорошо сделан Если используете BLAS, OpenCL, OpenMP - Mojo может быть хорошим вариантом!

кстати https://t.me/mojolang_ru

cyrusmsk
()
Ответ на: комментарий от Xintrea

Половина людей с четвертьвековым стажем сказали что это два указателя на int.

У тебя сомнительный круг общения.

firkax ★★★★★
()
Ответ на: комментарий от mister_VA

Операторные скобки придуманы не от балды, а от необходимости писать компиляторы.

Нет, они придуманы чтобы удобнее читать код. Компилятор то как раз можно к любой дичи в синтаксисе адаптировать.

firkax ★★★★★
()
Ответ на: комментарий от sarumeister

Да нет, как раз его запятнанность участием в шланге там вполне указана. Это (вместе с тем что оно клозед-сорс и с тем что похоже на питон) и сподвигло меня сразу поставить под новостью мусорку даже не изучая подробно данный продукт.

firkax ★★★★★
()
Ответ на: комментарий от firkax

Да нет, как раз его запятнанность участием в шланге там вполне указана.

Указана слишком низко. Половина комментаторов называет авторов чуваками. Чувствую «читать дальше» поленились.

sarumeister
()
Ответ на: комментарий от firkax

Ну правильно, гораздо полезнее потратить время, чтоб высраться под каждым каментом.

yvv1 ★★
()
Последнее исправление: yvv1 (всего исправлений: 1)
Ответ на: комментарий от sarumeister

называет авторов чуваками

А в чём связь (не)использования комментаторами дворового сленга с аффилированностью деятеля из новости с шлангом?

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 1)
Ответ на: комментарий от firkax

А в чём связь (не)использования комментаторами дворового сленга с аффилированностью деятеля из новости с шлангом?

«Он не просто следопыт, он Арагорн, сын Араторна, ты должен подчиняться.» (с)

sarumeister
()
Ответ на: комментарий от splinter

кажется избыточным заставлять себя следовать требованиям по отсупам в пайтоне

Если код написан нормально то он автоматически следует пайтоновским требованиям по отступам.

thunar ★★★★★
()
Ответ на: комментарий от vvb333007

Но проще Си выдумать язык сложно.

Уже за одно то что в языках С-семейства тип переменной пишется ни слева или справа а вокруг переменной следовало бы убивать.

thunar ★★★★★
()
Последнее исправление: thunar (всего исправлений: 2)
Ответ на: комментарий от splinter

PEP 8 касается кода который попадает в стандартную библиотеку. Пользовательский код может использовать и табы, и три, и два пробела — главное их не мешать внутри одного файла (тех кто мешает разные типы отступов всё равно следует убивать на месте).

thunar ★★★★★
()
Ответ на: комментарий от seiken

При вложенных вложенных функций лямбды становятся менее нужными.

thunar ★★★★★
()
Ответ на: комментарий от Xintrea

Ага, как там Мадди Уотерс пел: «Got my mojo working, but it just won’t work on you»

fox72
()
Ответ на: комментарий от mister_VA

Я даже не знаю. Думаю, что все современные. Я вот пользуюсь саблаймом. Выделяю кусок и двигаю его на один отступ вправо. Сверху добавляю if. Всё.

bbc69
()
Последнее исправление: bbc69 (всего исправлений: 1)
Ответ на: комментарий от vvb333007

Но проще Си выдумать язык сложно.

Forth: подержи как моё пиво! :)

P.S. Я бы норм относился к языку, но если нет поддержки старых интеловских маков (и это при заявлении кросс-платформенности), то имхо не взлетит.

necromant ★★★
()
Последнее исправление: necromant (всего исправлений: 2)
Ответ на: комментарий от bbc69

Так оп том и речь: выделять куски, двигать туда сюда вместо расстановок скобок и автоматического выравнивания.

Смысла в Питоне ни на грош без библиотек на других языках, а если все питонистами заделаются, кто библиотеки писать будет?

Так что Питон удел не программистов или для недлинных скриптов.

mister_VA ★★★
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.