Забони барномасозӣ Julia 1.9 дастрас аст

Нашри забони барномасозии Julia 1.9 нашр шуд, ки дорои сифатҳои баланд, дастгирии чопкунии динамикӣ ва абзорҳои дарунсохт барои барномасозии параллелӣ мебошад. Синтаксиси Ҷулия ба MATLAB наздик аст ва баъзе унсурҳо аз Ruby ва Lisp гирифта шудаанд. Усули коркарди сатр Perl-ро ба хотир меорад. Рамзи лоиҳа тибқи иҷозатномаи MIT паҳн карда мешавад.

Хусусиятҳои асосии забон:

  • Иҷрои баланд: яке аз ҳадафҳои асосии лоиҳа ноил шудан ба иҷрои наздик ба барномаҳои C мебошад. Тартибдиҳандаи Ҷулия ба лоиҳаи LLVM асос ёфтааст ва барои бисёр платформаҳои мавриди ҳадаф рамзи мошини муассири ватаниро тавлид мекунад;
  • Дастгирии парадигмаҳои гуногуни барномасозӣ, аз ҷумла унсурҳои барномасозии ба объект нигаронидашуда ва функсионалӣ. Китобхонаи стандартӣ вазифаҳои асинхронии вуруд/барқ, идоракунии равандҳо, сабткунӣ, профилсозӣ ва идоракунии бастаҳо, аз ҷумла чизҳои дигарро таъмин мекунад;
  • Навиштани динамикӣ: Забон бо шабеҳи забонҳои барномасозии скрипт таърифи дақиқи намудҳоро барои тағирёбандаҳо талаб намекунад. Ҳолати интерактивиро дастгирӣ мекунад;
  • Имконияти ихтиёрӣ барои ба таври возеҳ муайян кардани намудҳо;
  • Синтаксис, ки барои ҳисобҳои ададӣ, ҳисобҳои илмӣ, системаҳои омӯзиши мошинсозӣ ва визуализатсияи додаҳо аъло аст. Дастгирии бисёр намудҳои маълумотҳои рақамӣ ва асбобҳо барои параллелизатсияи ҳисобҳо.
  • Имконияти бевосита даъват кардани функсияҳо аз китобхонаҳои C бе қабатҳои иловагӣ.

Тағироти асосӣ дар Ҷулия 1.9:

  • Хусусиятҳои нави забон
    • Иҷозат диҳед, ки супоришҳо дар модули дигар бо истифода аз "setproperty!(::Module, ::Symbol, x)" анҷом дода шаванд.
    • Супориши чандкарата, ки дар мавқеи ниҳоӣ нестанд, иҷозат дода мешавад. Масалан, сатри "a, b..., c = 1, 2, 3, 4" ҳамчун "a = 1" коркард карда мешавад; б…, = 2, 3; c = 4". Ин тавассути Base.split_rest коркард карда мешавад.
    • Литералҳои якҳарфа ҳоло ҳамон синтаксиси литералҳои сатрро дастгирӣ мекунанд; ки. синтаксис метавонад пайдарпаии беэътибор UTF-8-ро нишон диҳад, тавре ки навъи Char иҷозат додааст.
    • Дастгирии иловагӣ барои мушаххасоти Юникод 15.
    • Комбинатсияҳои дохилии наворҳо ва наворҳои номбаршудаи аломатҳо акнун метавонанд ҳамчун параметрҳои намуд истифода шаванд.
    • Функсияҳои нави дарунсохт "getglobal(::Module, ::Symbol[, order])" ва "setglobal!(::Module, ::Symbol, x[, order])" барои хондан ва навиштан танҳо ба тағирёбандаҳои глобалӣ. Ҳоло усули getglobal бояд нисбат ба усули getfield барои дастрасӣ ба тағирёбандаҳои глобалӣ бартарӣ дода шавад.
  • Тағироти забон
    • Макроси "@invoke", ки дар версияи 1.7 муаррифӣ шудааст, ҳоло содирот ва барои истифода дастрас аст. Инчунин, он ҳоло усули "Core.Typeof(x)" -ро истифода мебарад, на "Ягон" вақте ки эзоҳоти навъи барои аргументи "x" партофта шудааст. Ин барои он зарур аст, ки навъҳои ҳамчун аргументҳо дуруст коркард карда шаванд.
    • Экспорти функсияи "invokelatest" ва макроси "@invokelatest", ки дар версияи 1.7 ҷорӣ шудааст, фаъол карда шудааст.
  • Такмилдиҳии компилятор/вақти кор
    • Ба таври назаррас кам кардани вақт то иҷрои аввал (TTFX - Вақти иҷрои аввал). Пешакӣ тартиб додани баста ҳоло рамзи модариро дар "pkgimage" захира мекунад, ки ин маънои онро дорад, ки коди ҳангоми таҳияи пешакӣ тавлидшуда пас аз боркунии баста лозим нест. Истифодаи режими pkgimages метавонад бо интихоби "--pkgimages=no" ғайрифаъол карда шавад.
    • Масъалаи маълуми мураккабии квадратии хулосабарорӣ ҳал карда шудааст ва дар маҷмӯъ хулоса хотираи камтарро истифода мебарад. Баъзе ҳолатҳои канорӣ бо функсияҳои дарозмуддати худкор тавлидшуда (ба монанди ModelingToolkit.jl бо муодилаҳои қисман дифференсиалӣ ва моделҳои каузали калон) хеле тезтар тартиб медиҳанд.
    • Зангҳо бо далелҳои ғайримуқаррарӣ акнун метавонанд ба Иттиҳоди тақсимкунӣ барои тазриқ ё ҳалли статикӣ оптимизатсия карда шаванд, ҳатто агар якчанд намудҳои гуногуни номзадҳои фиристодан вуҷуд дошта бошанд. Ин метавонад иҷроишро дар ҳолатҳои муайяне, ки намудҳои объектҳо ба таври статикӣ ҳал нашудаанд, тавассути ҳалли статикии сайтҳои занги "@nospecialize-d" ва канорагирӣ аз такрорӣ беҳтар гардонад.
    • Ҳама истифодаҳои макросҳои @pure дар модули Base бо Base.@assume_effects иваз карда шуданд.
    • Зангҳо барои даъват кардан(f, invokesig, args...) бо навъҳои камтар мушаххас аз онҳое, ки одатан барои f(args...) истифода мешаванд, дигар боиси аз нав тартиб додани баста намегарданд.
  • Тағир додани параметри сатри фармон
    • Дар Linux ва Windows, опсияи "--threads=auto" ҳоло кӯшиш мекунад, ки шумораи дастраси протсессорҳоро дар асоси наздикии CPU муайян кунад, ки ниқобест, ки маъмулан дар муҳити HPC ва абр муқаррар карда мешавад.
    • Опсияи "--math-mode=fast" ғайрифаъол карда шудааст, ба ҷои он тавсия дода мешавад, ки макроси "@fastmath" истифода шавад, ки дорои семантикаи хуб муайяншуда мебошад.
    • Параметри "--threads" ҳоло дорои формати "auto | N[,auto|M]", ки дар он M шумораи риштаҳои интерактивиро барои эҷод муайян мекунад (дар айни замон худкор маънои 1-ро дорад).
    • Опсияи иловашуда "--heap-size-hint= ”, ки остонаеро муқаррар мекунад, ки пас аз он ҷамъоварии фаъоли партов оғоз мешавад. Андозаро метавон бо байт, килобайт (1000 КБ), мегабайт (300 МБ) ё гигабайт (1,5 ГБ) муайян кард.
  • Тағйироти бисёрҷониба
    • "Threads.@spawn" ҳоло як далели аввалини ихтиёрӣ бо арзиши ":default" ё ":interactive" дорад. Вазифаи интерактивӣ таъхири пасти вокунишро талаб мекунад ва барои кӯтоҳ ё зуд иҷро карда мешавад. Вазифаҳои интерактивӣ дар риштаҳои интерактивӣ иҷро мешаванд, агар онҳо ҳангоми оғоз кардани Ҷулия муайян карда шаванд.
    • Риштаҳое, ки берун аз замони иҷрои Julia оғоз шудаанд (масалан, аз C ё Java) акнун метавонанд бо истифода аз "jl_adopt_thread" рамзи Ҷулияро даъват кунанд. Вақте ки шумо рамзи Ҷулияро тавассути "cfunction" ё нуқтаи вуруди "@ccallable" ворид мекунед, ин ба таври худкор сурат мегирад. Дар натиҷа, шумораи риштаҳо акнун метавонад дар вақти корӣ тағир ёбад.
  • Функсияҳои нави китобхона
    • Функсияи нави "Iterators.flatmap".
    • Функсияи нави "pkgversion(m::Module)" барои гирифтани версияи бастае, ки модули додашударо бор кардааст, ба монанди "pkgdir(m::Module)".
    • Функсияи нави "стек(x)", ки "reduce(hcat, x::Vector{<:Vector})"-ро ба ҳама андоза умумӣ мекунад ва имкон медиҳад, ки ҳар як итератори итераторҳо. Усули "stack(f, x)" "mapreduce(f, hcat, x)"-ро умумӣ мекунад ва самараноктар аст.
    • Макроси нав барои таҳлили хотираи ҷудошуда "@allocations", шабеҳи "@allocated", ба истиснои он, ки он шумораи тақсимоти хотираро бармегардонад, на андозаи умумии хотираи ҷудошуда.
  • Хусусиятҳои нави китобхона
    • "RoundFromZero" ҳоло барои намудҳои ғайр аз "BigFloat" кор мекунад.
    • "Dict"-ро акнун метавон ба таври дастӣ бо "sizehint!" хурд кард.
    • "@time" ҳоло алоҳида фоизи вақти сарфшударо барои аз нав тартиб додани усулҳои беэътибор нишон медиҳад.
  • Тағирот дар китобхонаи стандартӣ
    • Масъалаи ҳамоҳангӣ дар усулҳои такрорӣ барои Dict ва дигар объектҳои ҳосилшуда, ба монанди калидҳо(::Dict), арзишҳо(::Dict) ва Set ислоҳ карда шуд. Ин усулҳои такрориро акнун метавон дар як Dict ё Set дар баробари шумораи номаҳдуди риштаҳо даъват кард, ба шарте ки ягон амале, ки луғат ё маҷмӯаро тағир медиҳад, вуҷуд надошта бошад.
    • Инкор кардани функсияи предикати "!f" акнун ба ҷои функсияи номаълум функсияи таркибии "(!) ∘ f" -ро бармегардонад.
    • Функсияҳои буридаи андоза ҳоло дар ченакҳои гуногун кор мекунанд: "herslice", "eachrow" ва "eachcol" объекти "Slices"-ро бармегардонад, ки ба фиристодан имкон медиҳад усулҳои муассиртарро таъмин кунад.
    • Макроси "@kwdef" ба API-и оммавӣ илова карда шуд.
    • Мушкилот бо тартиби амалиёт дар "fld1" ҳал карда шуд.
    • Мураттабсозӣ ҳоло ҳамеша бо вақт устувор аст (QuickSort аз нав тарҳрезӣ шудааст).
    • "Base.splat" ҳоло содир карда мешавад. Қимати баргардонидашуда навъи "Base.Splat" аст, на вазифаи беном, ки имкон медиҳад, ки он ба таври хуб хулоса бароварда шавад.
  • Менеҷери бастаҳо
    • "Изоҳҳои бастаҳо": дастгирӣ барои бор кардани пораи код аз бастаҳои дигар, ки дар сессияи Ҷулия бор карда шудаанд. Ин барнома ба бастаи "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.take_heap_snapshot(file)", ки файлро дар формати JSON асоси ".heapsnapshot" сабт мекунад, ки аз ҷониби Chrome дастгирӣ мешавад.
  • Random: randn ва randexp ҳоло барои ҳама намуди AbstractFloat кор мекунанд, ки rand-ро муайян мекунад.
  • ҶАВОБ
    • Пахш кардани комбинатсияи калидҳои "Alt-e" ҳоло вуруди ҷорӣро дар муҳаррир мекушояд. Мундариҷа (агар тағир дода шавад) ҳангоми баромадани муҳаррир иҷро карда мешавад.
    • Контексти модули ҷорӣро, ки дар REPL фаъол аст, метавонад бо истифода аз функсияи "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 барои қабули паёмҳои хатогии барвақт зарур бошад.
  • Сана: Сатрҳои холӣ дигар ҳамчун арзишҳои дурусти "DateTime", "Dates" ё "Times" нодуруст таҳлил карда намешаванд ва ба ҷои он дар конструкторҳо ва таҳлил хатои "ArgumentError" -ро мепартоянд, дар ҳоле ки "tryparse" чизе барнамегардонад.
  • Бастаи тақсимшуда
    • Конфигуратсияи бастаҳо (лоиҳаи фаъол, "LOAD_PATH", "DEPOT_PATH") ҳоло ҳангоми илова кардани равандҳои коргарии маҳаллӣ (масалан, бо "addprocs(N::Int)" ё бо парчами сатри фармон "-procs=N") паҳн мешавад.
    • "addprocs" барои равандҳои коргарии маҳаллӣ ҳоло як аргументеро бо номи "env" мегирад, то тағирёбандаҳои муҳити зистро ба равандҳои коргар интиқол диҳад.
  • Юникод: "graphemes(s, m:n)" зерсатри графемаҳои mth то n-умро дар "s" бармегардонад.
  • Бастаи DelimitedFiles аз китобхонаҳои система хориҷ карда шуд ва ҳоло ҳамчун бастаи алоҳида тақсим карда мешавад, ки барои истифода бояд ба таври возеҳ насб карда шавад.
  • Вобастагии беруна
    • Linux версияи китобхонаи системаи libstdc++-ро ба таври худкор муайян мекунад ва агар он навтар бошад, онро бор мекунад. Рафтори кӯҳнаи боркунии libstdc++-и дарунсохт новобаста аз версияи система метавонад бо гузоштани тағирёбандаи муҳити зист "JULIA_PROBE_LIBSTDCXX=0" барқарор карда шавад.
    • "RPATH" аз бинарии julia хориҷ карда шуд, ки метавонад китобхонаҳоро дар Linux вайрон кунад, ки тағирёбандаи "RUNPATH"-ро муайян карда наметавонанд.
    • Такмилдиҳии асбобҳо: Натиҷаи "MethodError" ва усулҳо (масалан, аз "methods(my_func)") ҳоло мувофиқи он ки усулҳо дар пайраҳаҳои стек чӣ гуна бароварда мешаванд, формат ва ранг карда мешаванд.

    Манбаъ: opennet.ru

Илова Эзоҳ