В октябре 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