د موجو پروګرامینګ ژبې بیټا ریلیز ۱.۰

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

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

د موجو ژبه د کریس لیټینر په مشرۍ رامینځته کیږي ، د LLVM پروژې بنسټ ایښودونکی او لوی معمار او د سویفټ برنامې ژبې جوړونکی. د موجو ترکیب د Python ژبې پر بنسټ والړ دی، او د ډول سیسټم C/C++ ته نږدې دی. دا پروژه د یوې عمومي موخې ژبې په توګه پیژندل کیږي چې د سیسټم پروګرام کولو وړتیاوو سره د Python وړتیاوې پراخوي، د پراخو کارونو لپاره مناسبه ده، او د څیړنې پراختیا او د لوړ فعالیت پای محصولاتو لپاره مناسبیت سره د چټک پروټوټایپ کولو لپاره د کارولو اسانتیا سره یوځای کوي.

سادگي د پیژندل شوي Python ترکیب کارولو له لارې ترلاسه کیږي ، او د وروستي محصولاتو پراختیا د ماشین کوډ ته د تالیف کولو وړتیا ، د حافظې خوندي میکانیزمونو ، او د هارډویر سرعت وسیلو کارولو سره اسانه کیږي. د لوړ فعالیت ترلاسه کولو لپاره ، د محاسبې موازي کول په سیسټم کې د موجود متفاوت سیسټمونو د ټولو هارډویر سرچینو په کارولو سره ملاتړ کیږي ، لکه GPUs ، د ماشین زده کړې لپاره ځانګړي سرعت کونکي او د ویکتور پروسیسر لارښوونو (SIMD). د ژورې محاسبې لپاره، د ټولو کمپیوټري سرچینو موازي کول او کارول دا ممکنه کوي چې د C/C++ غوښتنلیکونو څخه غوره فعالیت ترلاسه کړي.

ژبه د جامد ټایپ کولو او د ټیټ کچې حافظې خوندي ځانګړتیاو ملاتړ کوي چې د زنګ یادونه کوي ، لکه د ژوند وخت تعقیب او پور چیکر. په ورته وخت کې، ژبه د ټیټې کچې کار لپاره فرصتونه هم چمتو کوي، د بیلګې په توګه، دا ممکنه ده چې په مستقیم ډول د پوائنټر ډول په کارولو سره په غیر محفوظ حالت کې حافظې ته لاسرسی ومومئ، د انفرادي SIMD لارښوونو ته زنګ ووهئ، یا د هارډویر توسیعونو لکه TensorCores او AMX ته لاسرسی ومومئ.

موجو دواړه د JIT په کارولو سره د تفسیر حالت کې کارول کیدی شي، او د اجرا وړ فایلونو (AOT، مخکې له مخکې) کې د تالیف لپاره. کمپیلر د اتوماتیک اصلاح کولو ، کیچ کولو او توزیع شوي تالیف لپاره عصري ټیکنالوژي جوړه کړې. په موجو ژبه کې د سرچینې کوډ د ټیټې کچې منځګړیتوب کوډ MLIR (د څو کچې منځګړیتوب نمایندګۍ) ته بدل شوی، چې د LLVM پروژې لخوا رامینځته شوی. کمپیلر تاسو ته اجازه درکوي مختلف بیکینډونه وکاروئ چې د ماشین کوډ رامینځته کولو لپاره د MLIR ملاتړ کوي.

Среди изменений в Mojo 1.0.0b1:

  • Ключевое слово «fn» объявлено устаревшим — для объявления функций следует использовать ключевое слово «def» (возможности «fn» и «def» объединены, и в «def» реализована семантика «fn» без генерации исключений).
  • Унифицирована реализация замыканий (closure). Не учитывающие контекст замыкания (stateless closure) теперь автоматически преобразуются в функции верхнего уровня и могут использоваться как callback-вызовы в FFI (Foreign Function Interface). Добавлена поддержка захвата по ссылке (ref capture). При объявлении функций добавлен признак «thin» для объявления простого типа указателя на функцию без захвата состояния.
  • Указатели с типом UnsafePointer теперь не могут принимать значение null по умолчанию, а для работы с null-указателями необходимо использовать «Optional[UnsafePointer[…]]», что позволяет исключить накладные расходы при работе с null-указателями и сохранить возможность безопасного применения в FFI.
  • По умолчанию в коде для CPU в коллекциях включена проверка допустимых границ (на GPU проверка отключена для производительности, но может быть включена при сборке с «mojo build -D ASSERT=all»). Прекращена поддержка указания отрицательных значений в индексах (запрещено «x[-1]», но можно указывать «x[len(x)-1]»).
  • Из стандартной библиотек удалён тип NDBuffer, вместо которого следует использовать TileTensor.
  • Расширена поддержка работы с GPU через графический API Metal на системах Apple (например, появилась поддержка print() и матричных инструкций M5). Добавлена поддержка ускорителей AMD MI250X и NVIDIA B300.
  • Идентификаторы примитивов GPU (индексы потоков и блоков) переведены на возвращение типа Int вместо UInt.
  • Контекст CPU (‘DeviceContext(api=»cpu»)’) стал потокозависимым (stream-ordered). Для упорядоченного выполнения задач добавлены функции enqueue_cpu_function() и enqueue_cpu_range().
  • В типах String и StringSlice добавлена поддержка графемных кластеров (Unicode UAX #29), позволяющая корректно вычислять длину и обрезать строки с emoji и комбинированных символов. Добавлены методы graphemes() и count_graphemes(), а также синтаксис слайсов «[grapheme=…]».
  • Реализовано уточнение типов (Type Refinement) на этапе компиляции для автоматического сужения типов внутри выражений «where», «if» и «assert» (позволяет обойтись без явного указания trait_downcast).
  • Предложен унифицированный API рефлексии, в котором предложена новая функция reflect[T](), возвращающая Reflected[T] и заменяющая семейство функций struct_field_* и старые методы get_type_name().

Одновременно сформирован выпуск движка MAX Framework 26.3, предлагающего платформу для разработок в области машинного обучения. MAX Framework дополняет инструментарий Mojo средствами для разработки и отладки приложений, использующих модели машинного обучения в различных форматах (TensorFlow, PyTorch, ONNX и т.п.). В новой версии MAX Framework добавлена возможность генерации видео, расширена поддержка работ с использованием нескольких GPU, значительно повышена производительность интерпретатора (некоторые операции стали выполняться быстрее в 10-20 раз).

سرچینه: opennet.ru