Lang pwogramasyon Julia 1.9 disponib

Yo te pibliye liberasyon lang pwogramasyon Julia 1.9, ki konbine kalite tankou pèfòmans segondè, sipò pou sezisman dinamik ak zouti entegre pou pwogramasyon paralèl. Sentaks Julia se tou pre MATLAB, ak kèk eleman prete nan Ruby ak Lisp. Metòd manipilasyon fisèl la se okoumansman de Perl. Kòd pwojè a distribye anba lisans MIT.

Karakteristik kle nan lang nan:

  • Segondè pèfòmans: youn nan objektif kle pwojè a se reyalize pèfòmans tou pre pwogram C yo. Konpilateur Julia a baze sou pwojè LLVM epi li jenere kòd machin natif natal efikas pou anpil platfòm sib;
  • Sipò pou plizyè paradigm pwogramasyon, ki gen ladan eleman nan pwogram oryante objè ak fonksyonèl. Bibliyotèk estanda a bay fonksyon pou I/O asynchrone, jesyon pwosesis, anrejistreman, profilage, ak jesyon pake, pami lòt bagay;
  • Sezisman dinamik: Langaj la pa mande pou definisyon klè nan kalite pou varyab, pa analoji ak langaj pwogramasyon scripting. Sipòte mòd entèaktif;
  • Kapasite opsyonèl pou presize kalite yo klèman;
  • Sentaks ki ekselan pou kalkil nimerik, kalkil syantifik, sistèm aprantisaj machin ak vizyalizasyon done. Sipò pou anpil kalite done nimerik ak zouti pou paralelize kalkil yo.
  • Kapasite dirèkteman rele fonksyon nan bibliyotèk C san kouch adisyonèl.

Gwo chanjman nan Julia 1.9:

  • Nouvo karakteristik lang
    • Разрешено выполнение присвоений в другом модуле с помощью «setproperty!(::Module, ::Symbol, x)».
    • Разрешено множественное присваивание не в финальной позиции. Например строка «a, b…, c = 1, 2, 3, 4» будет обработана как «a = 1; b…, = 2, 3; c = 4». Это обрабатывается через Base.split_rest.
    • Литералы отдельных символов теперь поддерживают тот же синтаксис, что и строковые литералы; т.е. синтаксис может представлять недопустимые последовательности UTF-8, как это разрешено типом Char.
    • Te ajoute sipò pou spesifikasyon Unicode 15 la.
    • Вложенные комбинации кортежей и именованные кортежи символов теперь можно использовать в качестве параметров типа.
    • Новые встроенные функции «getglobal(::Module, ::Symbol[, order])» и «setglobal!(::Module, ::Symbol, x[, order])» для чтения и записи исключительно в глобальные переменные. Метод getglobal теперь должен быть предпочтительнее для доступа к глобальным переменным, чем метод getfield.
  • Chanjman lang
    • Макрос «@invoke», представленный в версии 1.7, теперь экспортируется и доступен для использования. Кроме того, теперь он использует метод «Core.Typeof(x)», а не «Any» в случае, когда аннотация типа опущена для аргумента «x». Это необходимо для того, чтобы типы, передаваемые в качестве аргументов, обрабатывались правильно.
    • Включено экспортирование функции «invokelatest» и макроса «@invokelatest», появившихся в версии 1.7.
  • Amelyorasyon konpilatè / Runtime
    • Значительно сокращено время до первого выполнения (TTFX — Time to first execution). Предварительная компиляция пакета теперь сохраняет машинный код в «pkgimage», что означает, что код, сгенерированный в процессе предварительной компиляции, не потребует повторной компиляции после загрузки пакета. Использование режима pkgimages можно отключить с помощью опции «—pkgimages=no».
    • Исправлена известная проблема квадратичной сложности выведения типов, и в целом вывод использует меньше памяти. Некоторые граничные случаи с автоматически сгенерированными длинными функциями (например, ModelingToolkit.jl с уравнениями в частных производных и большими причинно-следственными моделями) компилируются намного быстрее.
    • Вызовы с аргументами без конкретных типов теперь могут быть оптимизированы методом Union-splitting для внедрения или статического разрешения, даже если существует несколько разнотиповых кандидатов для диспетчеризации. Это может улучшить производительность в определённых ситуациях, когда типы объектов не полностью статически разрешены, за счёт статического разрешения сайтов вызова «@nospecialize-d» и избежания повторной компиляции.
    • Все варианты использования макроса @pure в модуле Base заменены на Base.@assume_effects.
    • Вызовы invoke(f, invokesig, args…) с менее конкретными типами чем обычно используются для f(args…) больше не приводят к перекомпиляции пакета.
  • Chanjman paramèt liy lòd
    • В Linux и Windows параметр «—threads=auto» теперь пытается определить доступное количество процессоров на основе CPU affinity, маска которого обычно устанавливается в средах высокопроизводительных вычислений и облачных средах.
    • Отключён параметр «—math-mode=fast», вместо которого рекомендуется использовать макрос «@fastmath», имеющий чётко определённую семантику.
    • Параметр «—threads» теперь имеет формат «auto | N[,auto|M]», где M указывает количество создаваемых интерактивных потоков (в настоящее время auto означает 1).
    • Добавлена опция «—heap-size-hint=<size>», устанавливающая порог, после которого начинается активная сборку мусора. Размер может быть указан в байтах, килобайтах (1000 КБ), мегабайтах (300 МБ) или гигабайтах (1,5 ГБ).
  • Изменения в многопоточности
    • «Threads.@spawn» теперь имеет опциональный первый аргумент со значением «:default» или «:interactive». Интерактивная задача требует малой задержки отклика и рассчитана быть короткой или часто выполняемой. Интерактивные задачи будут выполняться в интерактивных потоках, если они указаны при запуске Julia.
    • Потоки, запущенные вне среды выполнения Julia (например, из C или Java), теперь могут вызывать код Julia, используя «jl_adopt_thread». Это происходит автоматически при вводе кода Julia через «cfunction» или точку входа «@ccallable». Как следствие, количество потоков теперь может изменяться во время выполнения.
  • Nouvo fonksyon bibliyotèk
    • Новая функция «Iterators.flatmap».
    • Новая функция «pkgversion(m::Module)» для получения версии пакета, который загрузил данный модуль, аналогично «pkgdir(m::Module)».
    • Новая функция «stack(x)», которая обобщает «reduce(hcat, x::Vector{<:Vector})» до любой размерности и допускает любой итератор итераторов. Метод «stack(f, x)» обобщает «mapreduce(f, hcat, x)» и является более эффективным.
    • Новый макрос для анализа выделенной памяти «@allocations», аналогичный «@allocated», за исключением того, что возвращает количество операций выделения памяти, а не общий размер выделенной памяти.
  • Nouvo karakteristik bibliyotèk la
    • «RoundFromZero» теперь работает для типов, отличных от «BigFloat».
    • «Dict» теперь можно уменьшить вручную с помощью «sizehint!».
    • «@time» теперь указывает отдельно процент времени, потраченного на перекомпиляцию недействительных методов.
  • Изменения в стандартной библиотеке
    • Устранена проблема параллельного доступа в методах итерации для Dict и других производных объектов, таких как keys(::Dict), values(::Dict) и Set. Эти методы итерации теперь можно вызывать для Dict или Set параллельно для неограниченного количества потоков при условии, что нет действий, изменяющих словарь или набор.
    • Отрицание функции-предиката «!f» теперь возвращает составную функцию «(!) ∘ f» вместо анонимной функции.
    • Функции среза размерности теперь работают в нескольких измерениях: «eachslice», «eachrow» и «eachcol» возвращают объект «Slices», который позволяет выполнять диспетчеризацию для предоставления более эффективных методов.
    • В общедоступный API добавлен макрос «@kwdef».
    • Исправлена проблема с порядком операций в «fld1».
    • Сортировка теперь всегда стабильна по времени (переработан QuickSort).
    • «Base.splat» теперь экспортируется. Возвращаемое значение представляет собой тип «Base.Splat», а не анонимную функцию, что позволяет его красиво выводить.
  • Manadjè pake
    • «Package Extensions»: поддержка загрузки фрагмента кода из других пакетов, загружаемых в сеансе Julia. Применение сходное с пакетом «Requires.jl», но поддерживается предварительная компиляция и совместимость настроек.
  • Библиотека LinearAlgebra
    • Из-за риска путаницы с поэлементным делением удалены методы «a / b» и «b \ a» со скаляром «a» и вектором «b», которые были эквивалентны «a * pinv(b)».
    • Для вызова BLAS и LAPACK теперь применяется «libblastrampoline (LBT)». OpenBLAS поставляется по умолчанию, но сборка образа системы с другими библиотеками BLAS/LAPACK не поддерживается. Вместо этого рекомендуется использовать механизм LBT для замены BLAS/LAPACK на иной имеющийся комплект библиотек.
    • «lu» поддерживает новую стратегию поворота матрицы «RowNonZero()», которая выбирает первый ненулевой элемент поворота для использования с новыми арифметическими типами и для учебных целей.
    • «normalize(x, p=2)» теперь поддерживает любое нормированное векторное пространство «x», включая скаляры.
    • Количество потоков BLAS по умолчанию теперь равно количеству потоков CPU на архитектуре ARM и половине числа потоков CPU на других архитектурах.
  • Printf: Для лучшей читаемости переработаны сообщения об ошибках для строк неправильного формата.
  • Profile: Новая функция «Profile.take_heap_snapshot(file)», которая записывает файл в формате «.heapsnapshot» на основе JSON, поддерживаемом в Chrome.
  • Random: randn и randexp теперь работают для любого типа AbstractFloat, определяющего rand.
  • REPL
    • Нажатие комбинации клавиш «Alt-e» теперь открывает текущий ввод в редакторе. Содержимое (если оно изменено) будет выполнено при выходе из редактора.
    • Текущий контекст модуля, активный в REPL, можно изменить (по умолчанию это Main) с помощью функции «REPL.activate(::Module)» или путём ввода модуля в REPL и нажатия комбинации клавиш «Alt-m».
    • Режим «нумерованной подсказки», который выводит числа для каждого входа и выхода и сохраняет оценённые результаты в Out, может быть активирован с помощью «REPL.numbered_prompt!()».
    • Автодополнение с помощью табуляции отображает доступные аргументы ключевого слова.
  • SuiteSparse: Код для решателя «SuiteSparse» перемещён в «SparseArrays.jl». Решатели теперь повторно экспортируются «SuiteSparse.jl».
  • SparseArrays
    • Решатели «SuiteSparse» теперь доступны как подмодули «SparseArrays».
    • Режимы защиты потоков UMFPACK и CHOLMOD улучшены за счет исключения глобальных переменных и использования блокировок. Многопоточный «ldiv!» объектов UMFPACK теперь можно выполнять безопасно.
    • Экспериментальная функция «SparseArrays.allowscalar(::Bool)» позволяет отключать или включать скалярное индексирование разрежённых массивов. Эта функция предназначена для обнаружения случайного скалярного индексирования объектов «SparseMatrixCSC», что является распространённым источником проблем с производительностью.
  • Новый отказоустойчивый режим для наборов тестов, который досрочно завершает тестовый запуск в случае сбоя или ошибки. Устанавливается либо через «@testset kwarg failfast=true», либо «export JULIA_TEST_FAILFAST=true». Подобное бывает необходимо в запусках CI для досрочного получения сообщений об ошибке.
  • Dates: Пустые строки больше не анализируются неправильно как допустимые значения «DateTime», «Dates» или «Times» и вместо этого выдают ошибку «ArgumentError» в конструкторах и синтаксическом анализе, в то время как «tryparse» ничего не возвращает.
  • Пакет Distributed
    • Конфигурация пакета (активный проект, «LOAD_PATH», «DEPOT_PATH») теперь распространяется при добавлении локальных рабочих процессов (например, с помощью «addprocs(N::Int)» или с помощью флага командной строки «—procs=N»).
    • «addprocs» для локальных рабочих процессов теперь принимает аргумент с именем «env» для передачи переменных окружения рабочим процессам.
  • Unicode: «graphemes(s, m:n)» возвращает подстроку от m-й до n-й графемы в «s».
  • Пакет DelimitedFiles вынесен из системных библиотек и теперь распространяется как отдельный пакет, который должен быть явно установлен для использования.
  • Depandans ekstèn
    • В Linux автоматически определяется версия системной библиотеки libstdc++ и если она новее, то загружается. Старое поведение загрузки встроенной libstdc++ независимо от версии системы можно восстановить, установив переменную окружения «JULIA_PROBE_LIBSTDCXX=0».
    • Из бинарного файла julia удалён «RPATH», что может привести в Linux к поломке библиотек, которым не удалось определить переменную «RUNPATH».
    • Улучшения инструментов: Вывод «MethodError» и методов (например из «methods(my_func)») теперь оформлен и раскрашен в соответствии с принципом вывода методов при трассировке стека.

    Sous: opennet.ru

Add nouvo kòmantè