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

Новости мира unix. Хотите узнать секрет вечного счастья? Откройте страницу 246.
Ответить
acolyte
Аватара пользователя
Сообщения: 3254
Зарегистрирован: 20.08.2022

#

Выпуск языка программирования Julia 1.10
Дата публикации:Sat, 30 Dec 2023 18:25:30 +0300




Опубликован релиз языка программирования Julia 1.10, сочетающего такие качества как высокая производительность, поддержка динамической типизации и встроенные средства для параллельного программирования. Синтаксис Julia близок к MATLAB с заимствованием некоторых элементов из Ruby и Lisp. Метод манипуляции строками напоминает Perl. Код проекта распространяется под лицензией MIT.



Ключевые особенности языка:
  • Высокая производительность: одной из ключевых целей проекта является достижение производительности близкой к программам на языке Си. Компилятор Julia основан на наработках проекта LLVM и генерирует эффективный нативный машинный код для многих целевых платформ;

    Поддержка различных парадигм программирования, включая элементы объектно-ориентированного и функционального программирования. Стандартная библиотека предоставляет в том числе функции для асинхронного ввода/вывода, управления процессами, ведения логов, профилирования и управления пакетами;
    Динамическая типизация: язык не требует явного определения типов для переменных по аналогии со скриптовыми языками программирования. Поддерживается интерактивный режим работы;
    Опциональная возможность явного указания типов;


    Синтаксис, превосходно подходящий для численных вычислений, научных расчётов, систем машинного обучения и визуализации данных. Поддержка многих числовых типов данных и средств для распараллеливания вычислений.

    Возможность прямого вызова функций из библиотек на языке Си без дополнительных прослоек.







Основные изменения в Julia 1.10:
  • Новые возможности языка

    По умолчанию задействован новый улучшенный синтаксический анализатор JuliaSyntax.jl. Если необходимо вернуться к старому, следует установить переменную окружения JULIA_USE_FLISP_PARSER в значение 1.

    Символы ⥺ (U+297A, \leftarrowsubset) и ⥷ (U+2977, \leftarrowless) теперь можно использовать как бинарные операторы с приоритетом стрелок.
Изменения в языке
  • При порождении дочерних задач, больше не затрагивается локальный RNG (генератор случайных чисел) родительской задачи. Новая схема инициализации генератора случайных чисел похожа на реализации SplitMix и DotMix.
    Предложено новое правило выбора метода, которое устраняет неоднозначность с типом "Union{}" в пользу метода, определённого явно для обработки аргумента типа "Union{}".

    Символ "h bar" ℏ (\hslash U+210F) теперь рассматривается как эквивалент ħ (\hbar U+0127).
    Макрос "@simd" теперь имеет конкретизированную семантику: он позволяет только переупорядочивать и сокращать операции с плавающей запятой вместо включения всех оптимизаций "быстрой математики @fastmath". Если при выполнении программ наблюдается снижение производительности из-за этого изменения, то предыдущее поведение можно восстановить с помощью "@fastmath @simd".

    При отображении в трассировке стека метода с ключевыми словами, текстовое представление ключевых слов теперь упрощается с использованием нового синтаксиса макроса "@Kwargs{key1::Type1, ...}".
Улучшения компилятора/среды выполнения
  • Сборщик мусора теперь выполняет многопоточный отбор объектов для удаления.
    JITLink по умолчанию включается в Linux-системах на базе архитектуры aarch64 при сборке Julia с LLVM 15 или более поздними версиями.
    В процессе предварительной компиляции задействованы блокировки pid-файлов. Только один процесс julia в один момент времени осуществляет предварительную компиляцию. Раньше все процессы работали параллельно, и была опасность повредить файлы кэша компиляции из-за состояния гонки.

Изменения параметров командной строки
  • Добавлена опция "--gcthreads", которая позволяет указать, сколько параллельных потоков будет использовать сборщик мусора. По умолчанию установлено значение "N/2", где N — количество рабочих потоков ("--threads"), используемых Julia.
Изменения системы сборки
  • Из образа системы по умолчанию исключены нодули "SparseArrays" и "SuiteSparse". В базовом комплекте Julia больше не содержится библиотек с лицензией GPL. Однако эти библиотеки по-прежнему включены вместе с языком в стандартный двоичный дистрибутив.
Новые библиотечные функции
  • "tanpi" вычисляет "tan(π*x)" более точно, чем "tan(pi*x)".
    "fourroot(x)" определен в Base.Math и может использоваться для вычисления корня четвёртой степени из "x". Короткое имя этого метода - символ Юникода ∜, который можно ввести с помощью команды \fourthroot<tab>.

    Добавлены функции "Libc.memmove", "Libc.memset" и "Libc.memcpy", функциональность которых соответствует функциональности соответствующих вызовов C.
    Добавлен метод "Base.isprecompiled(pkg::PkgId)", который возвращает "true", если пакет уже был предварительно скомпилирован.
Опции библиотечных функций
  • "binomial(x, k)" теперь поддерживает не целое число "x".
    "CartesianIndex" теперь рассматривается как «скаляр» для широковещательной рассылки.
    Метод "printstyled" теперь поддерживает вывод курсивом.
    Методы "parent" и "parentindices" теперь поддерживают тип "SubStrings".
    Метод "replace(string,pattern...)" теперь поддерживает опциональный аргумент "IO" для вывода в поток, а не для возврата строки.
    Метод "startswith" теперь поддерживает потоки ввода-вывода.
Изменения базовых библиотек
  • Из методов "sortperm!" и "partialsortperm!" удалено ключевое слово "initialized=true", которое могло приводить к небезопасному поведению.
    При печати целых чисел типа "Rational" их знаменатель теперь пропускается в контексте типизированных потоков "Rational" (например, в массивах).
Менеджер пакетов
  • Метод "Pkg.precompile" теперь принимает "timing" в качестве ключевого аргумента, отображая информацию о времени прекомпиляции для каждого пакета - "Pkg.precompile(timing=true)".
LinearAlgebra
  • Тип "AbstractQ" больше не является подтипом "AbstractMatrix". Более того, метод "adjoint(Q::AbstractQ)" теперь не оборачивает "Q" в тип "Adjoint", заменяя его "AdjointQ", который сам является подтипом "AbstractQ". Это изменение обусловлено тем, что обычно экземпляры "AbstractQ" ведут себя как линейные операторы на основе функций и матриц и не доступны по индексу. Кроме того, многие типы "AbstractQ" могут работать с векторами/матрицами разного размера, действуя как матрица с размером, зависящим от контекста. Благодаря этому изменению у типа "AbstractQ" появился чётко определённый интерфейс, который подробно описан в документации Julia.
    Результаты факторизации больше не заключаются в типы-оболочки "Adjoint" и "Transpose". Вместо них добавлены типы "AdjointFactorization" и "TranposeFactorization", которые сами являются подтипам "Factorization".
    Новые функции "hermitianpart" и "hermitianpart!" для нахождения эрмитовой (действительно симметричной) части матрицы.
    Метод "norm" транспонированной матрицы потомка типа "AbstractMatrix" теперь по умолчанию возвращает норму родительской матрицы, что соответствует текущему поведению для "AbstractVectors".
    Добавлены методы вычисления собственных векторов "eigen(A, B)" и "eigvals(A, B)" для случая, где один из A или B является симметричным или эрмитовым.
    Методы "eigvals/eigen(A, cholesky(B))" теперь вычисляют обобщённые собственные значения (собственные: и собственные векторы) A и B посредством разложения Холецкого для положительно определенного B.
Printf
  • Спецификаторы формата теперь поддерживают динамическую ширину и точность, например "%*s" и "%*.*g".
REPL
  • При печати стека трассировки глубина печатаемых типов в сигнатурах функций ограничена, чтобы избежать слишком подробного вывода.
Test
  • Макрос "@test_broken" (или "@test" с "broken=true") теперь выбрасывают ошибку, если тестовое выражение возвращает не значение false/true.
    При ошибке при вызове "@test" или ошибке внутри функции, теперь даётся подробная трассировка стека, позволяющая понять позицию теста в "@testset".
InteractiveUtils
  • "code_native" и "@code_native" теперь используют Intel-синтаксис вместо AT&T.
    "@time_imports" теперь показывает время выполнения "__init__()" для импортируемых модулей.
Устаревшие и подлежащие удалению конструкции
  • Макрос "@pure" объявлен устаревшим. Вместо него следует использовать "Base.@assume_effects :foldable".


Новость позаимствована с opennet.ru
Ссылка на оригинал: https://www.opennet.ru/opennews/art.shtml?num=60368

Жизнь за Нер'зула!

Ответить