Вслед за Mojo 1.1, который открыл компилятор для внешних вкладов, язык программирования Mojo, разработанный для объединения синтаксиса, подобного Python, с производительностью и управлением системными языками программирования, выпустил версию 1.2.
Наиболее заметным дополнением является сопоставление с образцом с помощью новых операторов match и case. Теперь разработчики могут сравнивать значения с различными шаблонами, включая литералы, кортежи, структуры и условные выражения, и выполнять код при первом успешном совпадении.
Эта функция также поддерживает comptime match для оценки во время компиляции, позволяя разработчикам выбирать реализации на основе значений или типов, известных во время компиляции. В Mojo 1.2 также появились конструкции if case и while case, а также деструктуризация списков для извлечения элементов из коллекций.
Еще одно улучшение касается вычислений на графическом процессоре. Более 20 функций в стандартной математической библиотеке Mojo теперь используют собственные реализации Mojo, а не системную математическую библиотеку. В результате такие функции, как atan(), tan(), log10(), hypot() и несколько функций Бесселя, могут выполняться как на графических, так и на центральных процессорах.
Использование общих реализаций для обеих архитектур повышает точность вычислений, хотя некоторые результаты все же могут незначительно отличаться в зависимости от аппаратного обеспечения.
Что касается производительности, то теперь компилятор гораздо быстрее обрабатывает большие пакеты. По словам разработчиков, компиляция пакета nn занимает около 61 секунды вместо 98 секунд, то есть почти на 38% меньше.
Пользователи Linux также оценят переход компилятора на распределитель памяти jemalloc, который повышает скорость компиляции больших файлов с ядрами для графических процессоров примерно на 10–13%.
Стандартная библиотека также была оптимизирована с точки зрения производительности. В некоторых случаях операции по дополнению строк могут выполняться до 86 раз быстрее, а повторение строк — примерно в два раза быстрее для больших строк.
Среди других изменений — новые возможности нарезки массивов, улучшенная обработка кортежей и дополнительные методы для работы с диапазонами памяти. В обобщенном программировании появилась более четкая диагностика ограничений благодаря обновленным where-предложениям, а структуры теперь могут явно отказываться от реализации определенных признаков.
Наконец, в этом выпуске расширена языковая документация, включая обновленные пояснения по сопоставлению с образцом, потоку управления и синтаксису языка, а также переработанное руководство для разработчиков Python, переходящих на Mojo.
Для получения дополнительной информации см. примечания к выпуску.
