Lugha ya programu ya Julia 1.9 inapatikana

Kutolewa kwa lugha ya programu ya Julia 1.9 kumechapishwa, ikichanganya sifa kama vile utendaji wa hali ya juu, usaidizi wa kuandika kwa nguvu na zana zilizojumuishwa za upangaji programu sambamba. Sintaksia ya Julia iko karibu na MATLAB, ikikopa baadhi ya vipengele kutoka kwa Ruby na Lisp. Njia ya kudanganya kamba inawakumbusha Perl. Nambari ya mradi inasambazwa chini ya leseni ya MIT.

Vipengele muhimu vya lugha:

  • Utendaji wa juu: mojawapo ya malengo muhimu ya mradi ni kufikia utendaji karibu na programu za C. Mkusanyaji wa Julia unategemea kazi ya mradi wa LLVM na hutoa msimbo wa mashine asilia wa majukwaa mengi lengwa;
  • Inasaidia dhana mbalimbali za programu, ikiwa ni pamoja na vipengele vya upangaji unaolenga kitu na utendakazi. Maktaba ya kawaida hutoa, miongoni mwa mambo mengine, utendakazi kwa I/O isiyolingana, udhibiti wa mchakato, ukataji miti, uwekaji wasifu, na usimamizi wa vifurushi;
  • Kuandika kwa nguvu: lugha haihitaji ufafanuzi wazi wa aina za vigeu, sawa na lugha za kupanga programu. Hali ya mwingiliano inayoungwa mkono;
  • Uwezo wa hiari wa kubainisha aina kwa uwazi;
  • Sintaksia bora kwa kompyuta ya nambari, kompyuta ya kisayansi, kujifunza kwa mashine, na taswira ya data. Usaidizi wa aina nyingi za data za nambari na zana za kusawazisha mahesabu.
  • Uwezo wa kupiga simu moja kwa moja kazi kutoka kwa maktaba za C bila tabaka za ziada.

Mabadiliko makubwa katika Julia 1.9:

  • Vipengele vya lugha mpya
    • Ruhusu kazi zifanywe katika moduli nyingine kwa kutumia "setproperty!(::Module, ::Alama, x)".
    • Kazi nyingi ambazo haziko katika nafasi ya mwisho zinaruhusiwa. Kwa mfano, mfuatano β€œa, b…, c = 1, 2, 3, 4” utachakatwa kama β€œa = 1; b…, = 2, 3; c = 4". Hii inashughulikiwa kupitia Base.split_rest.
    • Fasili za herufi moja sasa zinaauni sintaksia sawa na maandishi ya mfuatano; hizo. Sintaksia inaweza kuwakilisha mfuatano batili wa UTF-8, kama inavyoruhusiwa na aina ya Chati.
    • Usaidizi ulioongezwa kwa vipimo vya Unicode 15.
    • Michanganyiko ya nakala na nakala za herufi zilizopewa jina sasa zinaweza kutumika kama vigezo vya aina.
    • Vitendaji vipya vilivyojumuishwa "getglobal(::Moduli, ::Alama[, mpangilio])" na "setglobal!(::Moduli, ::Alama, x[, mpangilio])" kwa ajili ya kusoma na kuandika pekee kwa vigeu vya kimataifa. Njia ya getglobal sasa inapaswa kupendelewa kuliko njia ya getfield ya kupata vigeuzo vya kimataifa.
  • Mabadiliko ya lugha
    • Jumla ya "@invoke" iliyoletwa katika toleo la 1.7 sasa inasafirishwa na inapatikana kwa matumizi. Zaidi ya hayo, sasa inatumia mbinu ya "Core.Typeof(x)" badala ya "Yoyote" katika hali ambapo kidokezo cha aina kimeachwa kwa hoja ya "x". Hii ni muhimu ili kuhakikisha kuwa aina zinazopitishwa kama hoja zinachakatwa kwa usahihi.
    • Usafirishaji uliowashwa wa chaguo za kukokotoa za "invokelatest" na makro ya "@invokelatest", iliyoletwa katika toleo la 1.7.
  • Maboresho ya mkusanyaji/wakati wa utekelezaji
    • Muda uliopunguzwa kwa kiasi kikubwa hadi utekelezaji wa kwanza (TTFX - Muda wa utekelezaji wa kwanza). Kutayarisha kifurushi sasa huhifadhi msimbo asilia katika "pkgimage", ikimaanisha kuwa msimbo unaotolewa na mchakato wa utayarishaji hautahitaji kukusanywa tena baada ya kifurushi kupakiwa. Matumizi ya hali ya pkgimages yanaweza kulemazwa kwa kutumia chaguo la "--pkgimages=no".
    • Suala la utata wa quadratic linalojulikana la uelekezaji wa aina limerekebishwa, na makisio hutumia kumbukumbu ndogo kwa jumla. Baadhi ya visanduku vya ukingo vilivyo na vitendaji virefu vinavyozalishwa kiotomatiki (kama vile ModelingToolkit.jl iliyo na milinganyo isiyo kamili ya tofauti na miundo mikubwa ya visababishi) hukusanya haraka zaidi.
    • Simu zilizo na hoja zisizo na aina madhubuti sasa zinaweza kuboreshwa kwa ugawaji wa Muungano kwa utatuzi wa kudunga au tuli, hata kama kuna waombaji wengi wa aina tofauti za kutumwa. Hii inaweza kuboresha utendakazi katika hali fulani ambapo aina za vitu hazijatatuliwa kikamilifu, kwa kusuluhisha tovuti za simu za "@nospecialize-d" na kuepuka kurudisha.
    • Matumizi yote ya @pure macro katika moduli ya Msingi yamebadilishwa na Base.@assume_effects.
    • Simu za kuomba(f, invokesig, args...) zenye aina zisizo maalum kuliko kawaida zinazotumiwa kwa f(args...) hazisababishi tena kifurushi kukusanywa tena.
  • Mabadiliko kwa Chaguzi za Mstari wa Amri
    • Kwenye Linux na Windows, chaguo la "--threads=auto" sasa linajaribu kubainisha idadi inayopatikana ya vichakataji kulingana na mfungamano wa CPU, kinyago ambacho kwa kawaida huwekwa katika HPC na mazingira ya wingu.
    • Kigezo cha "--math-mode=fast" kimezimwa, badala yake kinapendekezwa kutumia macro ya "@fastmath", ambayo ina semantiki iliyofafanuliwa wazi.
    • Chaguo la "--threads" sasa liko katika umbizo la "auto | N[,auto|M]", ambapo M huonyesha idadi ya nyuzi wasilianifu za kuunda (kwa sasa otomatiki inamaanisha 1).
    • Chaguo lililoongezwa "-heap-size-hint=" ", ambayo huweka kizingiti baada ya ambayo ukusanyaji wa takataka huanza. Ukubwa unaweza kubainishwa kwa baiti, kilobaiti (1000 KB), megabytes (300 MB), au gigabytes (GB 1,5).
  • Mabadiliko katika multithreading
    • "Threads.@spawn" sasa ina hoja ya hiari ya kwanza yenye thamani ":default" au ":interactive". Jukumu wasilianifu linahitaji kusubiri kwa majibu ya chini na imeundwa kuwa fupi au kutekelezwa mara kwa mara. Majukumu shirikishi yataendeshwa kwenye nyuzi wasilianifu ikiwa yatabainishwa wakati wa kuanzisha Julia.
    • Mizigo inayoendeshwa nje ya muda wa utekelezaji wa Julia (kama vile kutoka C au Java) sasa inaweza kupiga msimbo wa Julia kwa kutumia "jl_adopt_thread". Hii hutokea kiotomatiki wakati wa kuingiza msimbo wa Julia kupitia "function" au mahali pa kuingilia "@ccallable". Kwa hivyo, idadi ya nyuzi sasa inaweza kubadilika wakati wa utekelezaji.
  • Vipengele vipya vya maktaba
    • Kazi mpya "Iterators.flatmap".
    • Chaguo mpya za kukokotoa "pkgversion(m::Moduli)" ili kupata toleo la kifurushi kilichopakia moduli fulani, sawa na "pkgdir(m::Moduli)".
    • Chaguo mpya za kukokotoa "stack(x)" zinazofanya jumla "punguza(hcat, x::Vector{<:Vector})" kwa kipimo chochote na kuruhusu kirudiarudia cha virudia. Mbinu ya "stack(f, x)" inaleta jumla "mapreduce(f, hcat, x)" na ni bora zaidi.
    • Jumla mpya ya kuchanganua kumbukumbu iliyotengwa "@allocations", sawa na "@allocated", isipokuwa kwamba inarudisha idadi ya mgao wa kumbukumbu, badala ya saizi ya jumla ya kumbukumbu iliyotengwa.
  • Vipengele vipya vya maktaba
    • "RoundFromZero" sasa inafanya kazi kwa aina zingine isipokuwa "BigFloat".
    • "Dict" sasa inaweza kupunguzwa kwa mikono kwa kutumia "sizehint!"
    • "@time" sasa inabainisha kando asilimia ya muda unaotumika kurejesha mbinu batili.
  • Mabadiliko ya maktaba ya kawaida
    • Imesuluhisha suala la upatanishi katika mbinu za urudiaji za Dict na vitu vingine vinavyotolewa kama vile vitufe(::Dict), values(::Dict) na Set. Mbinu hizi za kurudiarudia sasa zinaweza kuitwa kwa Dict au Kuweka sambamba kwa idadi isiyo na kikomo ya nyuzi, mradi tu hakuna vitendo vinavyorekebisha kamusi au seti.
    • Kukataa chaguo za kukokotoa za kihusishi "!f" sasa hurejesha kitendakazi cha mchanganyiko "(!) ∘ f" badala ya chaguo la kukokotoa lisilojulikana.
    • Vitendo vya kukokotoa vya vipande vya vipimo sasa vinafanya kazi katika vipimo vingi: "eachslice", "eachrow" na "eachcol" hurejesha kipengee cha "Vipande" ambacho huruhusu utumaji kutoa mbinu bora zaidi.
    • Imeongeza "@kwdef" jumla kwenye API ya umma.
    • Kutatua suala na utaratibu wa uendeshaji katika "fld1".
    • Upangaji sasa kila wakati ni thabiti (QuickSort imeundwa upya).
    • "Base.splat" sasa inasafirishwa. Thamani ya kurudi ni aina ya "Base.Splat" badala ya chaguo za kukokotoa zisizojulikana, na kuiruhusu kutoa matokeo vizuri.
  • Meneja wa kifurushi
    • "Viendelezi vya Kifurushi": Usaidizi wa kupakia kijisehemu cha msimbo kutoka kwa vifurushi vingine vilivyopakiwa katika kipindi cha Julia. Programu ni sawa na kifurushi cha "Requires.jl", lakini utayarishaji wa awali na upatanifu wa mipangilio unaauniwa.
  • Maktaba ya LinearAlgebra
    • Kwa sababu ya hatari ya kuchanganyikiwa na mgawanyiko wa busara wa kipengele, iliondoa njia za "a/b" na "b\a" na scalar "a" na vekta "b", ambazo zilikuwa sawa na "a * pinv(b)".
    • Kupigia simu BLAS na LAPACK sasa hutumia "libblastrampoline (LBT)". OpenBLAS hutolewa kwa chaguomsingi, lakini kujenga picha ya mfumo kwa kutumia maktaba zingine za BLAS/LAPACK hakutumiki. Badala yake, inashauriwa kutumia utaratibu wa LBT kubadilisha BLAS/LAPACK na seti nyingine iliyopo ya maktaba.
    • "lu" inaauni mkakati mpya wa mzunguko wa matrix, "RowNonZero()", ambayo huchagua kipengele cha kwanza cha mzunguko kisicho sifuri kwa matumizi na aina mpya za hesabu na kwa madhumuni ya mafunzo.
    • "normalize(x, p=2)" sasa inasaidia nafasi yoyote ya kawaida ya vekta "x", ikiwa ni pamoja na scalars.
    • Nambari chaguomsingi ya nyuzi za BLAS sasa ni sawa na idadi ya nyuzi za CPU kwenye usanifu wa ARM na nusu ya idadi ya nyuzi za CPU kwenye usanifu mwingine.
  • Chapisha: Ujumbe wa hitilafu uliofanyiwa kazi upya kwa mifuatano iliyoumbizwa vibaya kwa usomaji bora.
  • Wasifu: Chaguo jipya la kukokotoa "Profile.take_heap_snapshot(faili)", ambalo huandika faili katika umbizo la ".heapsnapshot" lenye msingi wa JSON linalotumika katika Chrome.
  • Nasibu: randn na randexp sasa zinafanya kazi kwa aina yoyote ya AbstractFloat inayofafanua rand.
  • REPL
    • Kubonyeza kitufe cha "Alt-e" sasa hufungua ingizo la sasa kwenye kihariri. Maudhui (ikiwa yamerekebishwa) yatatekelezwa utakapoondoka kwenye kihariri.
    • Muktadha wa moduli ya sasa inayofanya kazi katika REPL inaweza kubadilishwa (Kuu kwa chaguo-msingi) kwa kutumia chaguo za kukokotoa "REPL.activate(::Module)" au kwa kuingiza moduli katika REPL na kushinikiza mchanganyiko muhimu "Alt-m".
    • Hali ya "uhakika wa nambari", ambayo huchapisha nambari kwa kila ingizo na towe na kuhifadhi matokeo yaliyofungwa katika Out, inaweza kuwashwa kwa kutumia "REPL.numbered_prompt!()".
    • Ukamilishaji wa kichupo huonyesha hoja za nenomsingi zinazopatikana.
  • SuiteSparse: Msimbo uliohamishwa wa kitatuzi cha "SuiteSparse" hadi "SparseArrays.jl". Visuluhishi sasa vinasafirishwa tena na "SuiteSparse.jl".
  • SparseArrays
    • Vitatuzi vya "SuiteSparse" sasa vinapatikana kama moduli ndogo za "SparseArrays".
    • Njia za kulinda uzi za UMFPACK na CHOLMOD zimeboreshwa kwa kuondoa vigeuzo vya kimataifa na kutumia kufuli. Multi-threaded "ldiv!" Vipengee vya UMFPACK sasa vinaweza kutekelezwa kwa usalama.
    • Chaguo za kukokotoa za majaribio "SparseArrays.allowscalar(::Bool)" hukuruhusu kuzima au kuwezesha uwekaji faharasa wa safu chache. Chaguo hili la kukokotoa limeundwa ili kugundua uwekaji faharasa wa nasibu wa vipengee vya "SparseMatrixCSC", ambacho ni chanzo cha kawaida cha matatizo ya utendakazi.
  • Hali mpya ya kutofaulu kwa vyumba vya majaribio ambayo husitisha jaribio lililotekelezwa mapema ikiwa kuna kushindwa au hitilafu. Weka kupitia "@testset kwarg failfast=true" au "hamisha JULIA_TEST_FAILFAST=true". Hii ni muhimu wakati mwingine katika uendeshaji wa CI ili kupokea ujumbe wa makosa mapema.
  • Tarehe: Mifuatano tupu haijachanganuliwa tena kimakosa kama thamani halali za "DateTime", "Tarehe" au "Times" na badala yake tupa "ArgumentError" katika waundaji na uchanganuzi, huku "tryparse" haileti chochote.
  • Kifurushi Kimesambazwa
    • Usanidi wa kifurushi (mradi unaotumika, "LOAD_PATH", "DEPOT_PATH") sasa unaenezwa wakati wa kuongeza michakato ya mfanyakazi wa ndani (k.m. kutumia "addprocs(N::Int)" au kwa kutumia alama ya mstari wa amri "--procs=N").
    • "addprocs" kwa michakato ya wafanyikazi wa ndani sasa inakubali hoja inayoitwa "env" kupitisha anuwai za mazingira kwa michakato ya wafanyikazi.
  • Unicode: "graphemes(s, m:n)" hurejesha kamba ndogo kutoka kwa grafu za mth hadi nth katika "s".
  • Kifurushi cha DelimitedFiles kimeondolewa kwenye maktaba za mfumo na sasa kinasambazwa kama kifurushi tofauti ambacho lazima kisakinishwe kwa uwazi ili kitumike.
  • Vitegemezi vya nje
    • Katika Linux, toleo la maktaba ya mfumo wa libstdc++ hugunduliwa kiotomatiki na, ikiwa ni mpya zaidi, hupakiwa. Tabia ya zamani ya upakiaji ya libstdc++ iliyojengewa ndani, bila kujali toleo la mfumo, inaweza kurejeshwa kwa kuweka utofauti wa mazingira "JULIA_PROBE_LIBSTDCXX=0".
    • Imeondolewa "RPATH" kutoka kwa jozi ya julia, ambayo inaweza kuvunja maktaba kwenye Linux ambayo inashindwa kufafanua utofauti wa "RUNPATH".
    • Maboresho ya zana: Toleo la "MethodError" na mbinu (kwa mfano kutoka "methods(my_func)") sasa limeumbizwa na kupakwa rangi kwa mujibu wa kanuni ya utoaji wa mbinu katika ufuatiliaji wa rafu.

    Chanzo: opennet.ru

Kuongeza maoni