Fiteny fandaharana Julia 1.9 misy

Navoaka ny famoahana ny fiteny fandaharana Julia 1.9, manambatra ireo toetra toy ny fampisehoana avo lenta, fanohanana ny fanoratana dynamique ary fitaovana namboarina ho an'ny fandaharana mifanitsy. Ny syntax an'i Julia dia manakaiky ny MATLAB, mindrana singa sasany avy amin'i Ruby sy Lisp. Ny fomba fanodinkodinana tady dia mampahatsiahy an'i Perl. Ny kaody tetikasa dia zaraina eo ambanin'ny fahazoan-dàlana MIT.

Ny endri-javatra fototra amin'ny fiteny:

  • Fahombiazana avo lenta: iray amin'ireo tanjona fototra amin'ny tetikasa dia ny hahatratrarana ny fahombiazan'ny programa C. Ny mpamoron-kira Julia dia mifototra amin'ny asan'ny tetikasa LLVM ary mamorona kaody milina teratany mahomby ho an'ny sehatra kendrena maro;
  • Manohana paradigma fandaharana isan-karazany, ao anatin'izany ny singa amin'ny fandaharana miompana amin'ny tanjona sy miasa. Ny tranomboky manara-penitra dia manome, ankoatry ny zavatra hafa, ny fiasa ho an'ny I/O asynchronous, ny fanaraha-maso ny fizotrany, ny fanoratana, ny profiling ary ny fitantanana ny fonosana;
  • Fanoratana dynamic: tsy mila famaritana mazava ny karazana ho an'ny variana ny fiteny, mitovy amin'ny fiteny fandaharana scripting. Fomba ifanakalozan-kevitra notohanana;
  • Fahaizana tsy voatery mamaritra mazava ny karazana;
  • Syntax tsara indrindra ho an'ny informatika nomerika, informatika siantifika, fianarana milina ary fijerena angona. Fanohanana karazana angon-drakitra maro sy fitaovana ho an'ny fampitoviana ny kajy.
  • Ny fahafahana miantso mivantana ny asa avy amin'ny tranomboky C tsy misy sosona fanampiny.

Fiovana lehibe ao amin'ny Julia 1.9:

  • endri-javatra fiteny vaovao
    • Разрешено выполнение присвоений в другом модуле с помощью «setproperty!(::Module, ::Symbol, x)».
    • Разрешено множественное присваивание не в финальной позиции. Например строка «a, b…, c = 1, 2, 3, 4» будет обработана как «a = 1; b…, = 2, 3; c = 4». Это обрабатывается через Base.split_rest.
    • Литералы отдельных символов теперь поддерживают тот же синтаксис, что и строковые литералы; т.е. синтаксис может представлять недопустимые последовательности UTF-8, как это разрешено типом Char.
    • Fanohanana fanampiny ho an'ny famaritana Unicode 15.
    • Вложенные комбинации кортежей и именованные кортежи символов теперь можно использовать в качестве параметров типа.
    • Новые встроенные функции «getglobal(::Module, ::Symbol[, order])» и «setglobal!(::Module, ::Symbol, x[, order])» для чтения и записи исключительно в глобальные переменные. Метод getglobal теперь должен быть предпочтительнее для доступа к глобальным переменным, чем метод getfield.
  • Fiovana amin'ny fiteny
    • Макрос «@invoke», представленный в версии 1.7, теперь экспортируется и доступен для использования. Кроме того, теперь он использует метод «Core.Typeof(x)», а не «Any» в случае, когда аннотация типа опущена для аргумента «x». Это необходимо для того, чтобы типы, передаваемые в качестве аргументов, обрабатывались правильно.
    • Включено экспортирование функции «invokelatest» и макроса «@invokelatest», появившихся в версии 1.7.
  • Fanatsarana ny compiler/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…) больше не приводят к перекомпиляции пакета.
  • Fanovana amin'ny Options Command Line
    • В 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». Как следствие, количество потоков теперь может изменяться во время выполнения.
  • Fampiasana tranomboky vaovao
    • Новая функция «Iterators.flatmap».
    • Новая функция «pkgversion(m::Module)» для получения версии пакета, который загрузил данный модуль, аналогично «pkgdir(m::Module)».
    • Новая функция «stack(x)», которая обобщает «reduce(hcat, x::Vector{<:Vector})» до любой размерности и допускает любой итератор итераторов. Метод «stack(f, x)» обобщает «mapreduce(f, hcat, x)» и является более эффективным.
    • Новый макрос для анализа выделенной памяти «@allocations», аналогичный «@allocated», за исключением того, что возвращает количество операций выделения памяти, а не общий размер выделенной памяти.
  • Ny endri-tsoratra vaovao
    • «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», а не анонимную функцию, что позволяет его красиво выводить.
  • Package Manager
    • «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 вынесен из системных библиотек и теперь распространяется как отдельный пакет, который должен быть явно установлен для использования.
  • Внешние зависимости
    • В Linux автоматически определяется версия системной библиотеки libstdc++ и если она новее, то загружается. Старое поведение загрузки встроенной libstdc++ независимо от версии системы можно восстановить, установив переменную окружения «JULIA_PROBE_LIBSTDCXX=0».
    • Из бинарного файла julia удалён «RPATH», что может привести в Linux к поломке библиотек, которым не удалось определить переменную «RUNPATH».
    • Улучшения инструментов: Вывод «MethodError» и методов (например из «methods(my_func)») теперь оформлен и раскрашен в соответствии с принципом вывода методов при трассировке стека.

    Source: opennet.ru

Add a comment