Представлен первый бета выпуск языка программирования Mojo 1.0, который ознаменовал стабилизацию языка и реализацию всех базовых возможностей. Выпуск оценивается как почти готовый к повсеместному использованию. Финальный релиз Mojo 1.0 ожидается в начале осени. Использование данной ветки позволит начать разрабатывать крупные проекты, не опасаясь появления в языке изменений, нарушающих совместимость.
В состав платформы включены компоненты, необходимые для разработки приложений на языке Mojo, включая компилятор, runtime, интерактивную REPL-оболочку для сборки и запуска программ, отладчик, дополнение к редактору кода Visual Studio Code (VS Code) с поддержкой автодополнения ввода, форматирования кода и подсветки синтаксиса, модуль для интеграции с Jupyter для сборки и запуска Mojo notebook. Исходный код стандартной библиотеки Mojo открыты под лицензией Apache 2.0 c исключениями от проекта LLVM, допускающими смешивание с кодом под лицензией GPLv2. Исходный код компилятора планируют открыть после завершения стабилизации внутренней архитектуры.
Mojo 언어는 LLVM 프로젝트의 창립자이자 수석 설계자이며 Swift 프로그래밍 언어의 창시자인 크리스 라트너의 리더십 하에 개발되고 있습니다. Mojo의 구문은 Python 언어를 기반으로 하며, 유형 시스템은 C/C++에 가깝습니다. 이 프로젝트는 Python 언어의 기능을 시스템 프로그래밍 도구로 확장한 범용 언어로 제시되며, 광범위한 작업에 적합하고 연구 개발 및 신속한 프로토타입 제작에 대한 사용 편의성과 고성능 최종 제품 형성에 대한 적합성을 결합합니다.
익숙한 Python 구문을 사용하여 단순성을 확보하는 한편, 기계 코드로 컴파일하는 기능, 메모리 안전 메커니즘, 하드웨어 가속 컴퓨팅 도구를 사용하여 최종 제품을 개발할 수 있습니다. 높은 성능을 달성하기 위해 GPU, 머신 러닝을 위한 특수 가속기, 벡터 프로세서 명령어(SIMD) 등 이기종 시스템의 모든 사용 가능한 하드웨어 리소스를 활용하여 병렬 계산을 지원합니다. 집약적 계산의 경우 모든 컴퓨팅 리소스를 병렬화하고 활용함으로써 C/C++ 애플리케이션보다 우수한 성능을 달성할 수 있습니다.
이 언어는 Rust에서 찾을 수 있는 참조 수명 추적 및 빌림 검사기와 같은 정적 타이핑 및 저수준 메모리 안전 기능을 지원합니다. 동시에 이 언어는 Pointer 유형을 사용하여 안전하지 않은 모드에서 메모리에 직접 액세스하거나, 개별 SIMD 명령어를 호출하거나, TensorCores 및 AMX와 같은 하드웨어 확장에 액세스하는 등 저수준 작업을 수행할 수 있는 기능을 제공합니다.
Mojo는 JIT 해석 모드와 실행 파일(AOT, 사전 컴파일)로 컴파일하는 데 모두 사용할 수 있습니다. 컴파일러에는 자동 최적화, 캐싱, 분산 컴파일을 위한 최신 기술이 내장되어 있습니다. Mojo 소스 코드는 LLVM 프로젝트에서 개발한 저수준 중간 코드 MLIR(Multi-Level Intermediate Representation)로 변환됩니다. 컴파일러는 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
