В октябре 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" для пользователей, которым нужен профилировщик с выборкой, захватывающий задачи независимо от их состояния (запланированы/выполняются). Такой профилировщик позволяет профилировать задачи с интенсивным вводом-выводом и помогает обнаружить области сильной конкуренции в системе.