Выпуск языка программирования Julia 1.12

В октябре 2025 года состоялся релиз языка программирования Julia 1.12. Проект сочетает в себе такие качества как высокая производительность, поддержка динамической типизации и встроенные средства для параллельного программирования. Выпуск Julia 1.11 произошёл в октябре 2024 года.

Синтаксис Julia близок к MATLAB с заимствованием некоторых элементов из Ruby и Lisp, а метод манипуляции строками напоминает Perl. Исходный код проекта опубликован на GitHub под лицензией MIT. Предыдущая стабильная версия проекта Julia 1.10 вышла в декабре 2023 года, и именно она сейчас стала LTS-сборкой (с долгосрочной поддержкой на три года), заменив на этом месте предыдущий LTS-релиз Julia 1.6.

В числе ключевых особенностей языка Julia выступают высокая производительность, поддержка различных парадигм программирования, включая элементы объектно-ориентированного и функционального, динамическую типизацию с опциональной возможностью явного указания типов, поддержку многих числовых типов данных и средств для распараллеливания вычислений, а также возможность прямого вызова функций из библиотек на языке C без дополнительных прослоек.

По информации OpenNET, основные изменения и доработки в Julia 1.12:

экспериментальный параметр «—trim», позволяющий создавать более компактные бинарные файлы за счёт удаления кода, который не достижим из указанных точек входа. Точки входа можно помечать с помощью «Base.Experimental.entrypoint». С этой опцией может работать не весь код;

сгенерированный LLVM промежуточный код (IR) теперь использует типы указателей вместо передачи указателей в форме целых чисел. Это касается «llvmcall»: встроенный LLVM IR следует обновить, заменив «i32″/»i64» на «i8*» или «ptr» и убрав ненужные конверсии «ptrtoint»/»inttoptr». Для совместимости IR с целочисленными указателями всё ещё поддерживается, но выдаёт предупреждение;

переопределение констант теперь чётко определено и следует семантике «world age». Допустимы дополнительные переопределения (например, типов);

в функцию names добавлен новый параметр «usings::Bool», заставляющий функцию вернуть все имена, видимые через using;

поддержка Unicode 16;

новый параметр «—trace-compile-timing» выводит время компиляции каждого метода, который выводится «—trace-compile», в миллисекундах;

«—trace-compile» теперь выводит перекомпилированные методы жёлтым цветом или добавляет комментарий, если цвет недоступен;

новый параметр «—trace-dispatch» выводит методы, которые динамически распределяются;

доступен профилировщик wall-time для пользователей, которым нужен профилировщик с выборкой, захватывающий задачи независимо от их состояния (запланированы/выполняются). Такой профилировщик позволяет профилировать задачи с интенсивным вводом-выводом и помогает обнаружить области сильной конкуренции в системе;

Julia теперь по умолчанию использует 1 «интерактивный» поток, в дополнение к 1 основному «рабочему» потоку, т.е. «-t1,1». Это означает, что основная задача и REPL (в интерактивном режиме), которые оба работают в потоке 1, теперь выполняются в интерактивном пуле;

определены новые типы для шаблона кода, который должен выполняться один раз на процесс — тип «OncePerProcess{T}» позволяет определить функцию, которая выполнится ровно один раз, когда её впервые вызовут, а затем будет всегда возвращать одно и то же значение типа «T» при последующих вызовах. Также существуют типы «OncePerThread{T}» и «OncePerTask{T}» для аналогичного использования с потоками или задачами;

добавлены новые файлы Makefile для сборки Julia и LLVM с использованием BOLT (Binary Optimization and Layout Tool). См. «contrib/bolt» и «contrib/pgo-lto-bolt»;

«gcdx(0, 0)» теперь возвращает «(0, 0, 0)» вместо «(0, 1, 0)»;

«fd» возвращает «RawFD» вместо «Int»;

база данных terminal info («terminfo») теперь входит в поставку Julia по умолчанию, что улучшает работу REPL, когда «terminfo» недоступен в системе. Julia можно собрать без встраивания базы, используя параметр Makefile «WITH_TERMINFO=0»;

доступен профилировщик «wall-time» для пользователей, которым нужен профилировщик с выборкой, захватывающий задачи независимо от их состояния (запланированы/выполняются). Такой профилировщик позволяет профилировать задачи с интенсивным вводом-выводом и помогает обнаружить области сильной конкуренции в системе.

Источник: habr.com

0 0 голоса
Рейтинг новости
1
0
Подписаться
Уведомить о
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии