Ulimi lokuhlela i-Julia 1.9 iyatholakala

Ukukhululwa kolimi lokuhlela i-Julia 1.9 kushicilelwe, kuhlanganisa izimfanelo ezifana nokusebenza okuphezulu, ukusekelwa kokuthayipha okunamandla namathuluzi akhelwe ngaphakathi ohlelo olufanayo. I-syntax ka-Julia iseduze ne-MATLAB, inezici ezithile ezibolekwe ku-Ruby no-Lisp. Indlela yokukhohlisa iyunithi yezinhlamvu ikhumbuza i-Perl. Ikhodi yephrojekthi isatshalaliswa ngaphansi kwelayisensi ye-MIT.

Izici ezibalulekile zolimi:

  • Ukusebenza okuphezulu: enye yezinhloso ezibalulekile zephrojekthi ukufeza ukusebenza eduze nezinhlelo ze-C. I-Julia compiler isekelwe kuphrojekthi ye-LLVM futhi ikhiqiza ikhodi yomshini yomdabu ephumelelayo yamapulatifomu amaningi okuhlosiwe;
  • Ukusekelwa kwama-paradigm ohlelo ahlukahlukene, okuhlanganisa izici zohlelo olugxile entweni nokusebenza. Umtapo wolwazi ojwayelekile uhlinzeka ngemisebenzi ye-I/O engavumelanisi, ukuphathwa kwenqubo, ukugawulwa kwemithi, ukwenza iphrofayela, nokuphathwa kwephakheji, phakathi kwezinye izinto;
  • Ukuthayipha okunamandla: Ulimi aludingi incazelo ecacile yezinhlobo zezinto eziguquguqukayo, ngokufanisa nezilimi zohlelo lokubhala. Isekela imodi interactive;
  • Ikhono lokuzikhethela lokucacisa izinhlobo ngokusobala;
  • I-syntax ehamba phambili ekubalweni kwezinombolo, izibalo zesayensi, izinhlelo zokufunda ngomshini nokubonwa kwedatha. Ukusekelwa kwezinhlobo eziningi zedatha yezinombolo namathuluzi okubala okuhambisanayo.
  • Amandla okushayela ngokuqondile imisebenzi kusuka kumalabhulali e-C ngaphandle kwezendlalelo ezengeziwe.

Izinguquko ezinkulu ku-Julia 1.9:

  • Izici zolimi olusha
    • Vumela imisebenzi ezokwenziwa kwenye imojuli kusetshenziswa "setproperty!(::Module, ::Symbol, x)".
    • Izabelo eziningi ezingekho esimweni sokugcina zivunyelwe. Isibonelo, iyunithi yezinhlamvu ethi "a, b..., c = 1, 2, 3, 4" izocutshungulwa ngokuthi "a = 1; b…, = 2, 3; c = 4". Lokhu kusingathwa nge-Base.split_rest.
    • Amazwi ohlamvu olulodwa manje asekela i-syntax efanayo neyunithi yezinhlamvu; labo. i-syntax ingamela ukulandelana kwe-UTF-8 okungavumelekile, njengoba kuvunyelwe uhlobo lwe-Char.
    • Kungezwe ukusekelwa kokucaciswa kwe-Unicode 15.
    • Inhlanganisela efakwe esidlekeni yama-tuples nama-tuples aqanjwe amagama ezinhlamvu manje angasetshenziswa njengohlobo lwamapharamitha.
    • Imisebenzi emisha eyakhelwe ngaphakathi "getglobal(::Module, ::Symbol[, order])" kanye "setglobal!(::Module, ::Symbol, x[, order])" yokufunda nokubhala kuphela eziguquguqukayo zomhlaba. Indlela ye-getglobal manje kufanele ikhethwe ngaphezu kwendlela ye-getfield yokufinyelela okuguquguqukayo komhlaba.
  • Ulimi luyashintsha
    • I-"@invoke" macro eyethulwe enguqulweni 1.7 manje isikhishiwe futhi isiyatholakala ukuthi isetshenziswe. Futhi, manje isebenzisa indlela ethi "Core.Typeof(x)" esikhundleni sokuthi "Noma yini" lapho uhlobo lwesichasiselo lushiyiwe ku-agumenti ethi "x". Lokhu kuyadingeka ukuze izinhlobo eziphasiswe njengezimpikiswano zicutshungulwe ngendlela efanele.
    • Ukuthekelisa okunikwe amandla komsebenzi we-"invokelatest" kanye ne-"@invokelatest" macro eyethulwe kunguqulo 1.7.
  • I-Compiler/Ukuthuthukiswa Kwesikhathi Sokusebenza
    • Isikhathi esincishiswe ngokuphawulekayo ekwenzeni kokuqala (TTFX - Isikhathi sokwenza kokuqala). Ukuhlanganiswa kwangaphambili kwephakheji manje kulondoloza ikhodi yomdabu ku-"pkgimage", okusho ukuthi ikhodi ekhiqizwe ngesikhathi sokuhlanganiswa ngaphambilini ngeke kudingeke ukuthi iphinde ihlanganiswe ngemva kokulayishwa kwephakheji. Ukusetshenziswa kwemodi ye-pkgimages kungakhutshazwa ngenketho ethi "--pkgimages=no".
    • Inkinga eyaziwayo ye-quadratic complexity of type inference ilungisiwe, futhi ngokuvamile okucatshangwayo kusebenzisa inkumbulo encane. Amanye amakesi onqenqema anemisebenzi emide ekhiqizwa ngokuzenzakalela (efana ne-ModelingToolkit.jl enezibalo ezihlukene ezihlukene kanye namamodeli amakhulu ayimbangela) ahlanganisa ngokushesha okukhulu.
    • Izingcingo ezinama-agumenti okungezona uhlobo oluthile manje zingase zihlukaniselwe i-Union ukuze zibe umjovo noma ukulungiswa okumile, ngisho noma kunezinhlobo eziningi ezahlukene zamakhandidethi okuthumela. Lokhu kungathuthukisa ukusebenza ezimeni ezithile lapho izinhlobo zezinto zingaxazululwanga ngokugcwele, ngokuxazulula ngokwezibalo amasayithi ocingo okuthi "@nospecialize-d" nokugwema ukuhlanganiswa.
    • Konke ukusetshenziswa kwe-@pure macro kumojuli ye-Base kuthathelwe indawo i-Base.@assume_effects.
    • Izingcingo zokucela(f, invokesig, args...) ezinezinhlobo ezingaqondile kakhulu kunalezo ezivame ukusetshenziselwa u-f(args...) azisabangeli ukuthi iphakheji iphinde ihlanganiswe.
  • Izinguquko zepharamitha yomugqa womyalo
    • Ku-Linux ne-Windows, inketho ethi "--threads=auto" manje izama ukunquma inombolo etholakalayo yamaphrosesa ngokusekelwe ku-CPU affinity, okuyimaski evamise ukusetha ku-HPC nasezindaweni zamafu.
    • Inketho ethi "--math-mode=fast" ivaliwe, esikhundleni salokho kutuswa ukuthi kusetshenziswe i-"@fastmath" macro, ene-semantics echazwe kahle.
    • Ipharamitha ethi "--threads" manje inefomethi ethi "auto | N[,auto|M]", lapho u-M ecacisa inombolo yochungechunge olusebenzisanayo olungadalwa (okwamanje okuzenzakalelayo kusho u-1).
    • Inketho eyengeziwe "--heap-size-hint= ”, ebeka umkhawulo ngemuva kokuthi ukuqoqwa kukadoti okusebenzayo kuqala. Usayizi ungacaciswa ngamabhayithi, amakhilobhayithi (1000 KB), amamegabhayithi (300 MB), noma amagigabhayithi (1,5 GB).
  • Izinguquko ze-Multithreading
    • I-"Threads.@spawn" manje isinokuphikisana kokuqala okungakhethwa kukho ngenani ":okuzenzakalelayo" noma ":interactive". Umsebenzi osebenzisanayo udinga ukubambezeleka kwempendulo ephansi futhi uklanyelwe ukuba mfushane noma wenziwe njalo. Imisebenzi yokusebenzelana izosebenza ochungechungeni olusebenzisanayo uma icaciswa lapho iqala i-Julia.
    • Imicu eyethulwe ngaphandle kwesikhathi sokusebenza sika-Julia (isibonelo, kusukela ku-C noma ku-Java) manje ingashayela ikhodi ka-Julia isebenzisa "jl_adopt_thread". Lokhu kwenzeka ngokuzenzakalelayo lapho ufaka ikhodi ka-Julia ngokusebenzisa "i-cfunction" noma indawo yokungena ethi "@ccallable". Ngenxa yalokho, inani lemicu manje lingashintsha ngesikhathi sokusebenza.
  • Imisebenzi emisha yelabhulali
    • Umsebenzi omusha we-"Iterators.flatmap".
    • Umsebenzi omusha we-"pkgversion(m::Module)" ukuze uthole inguqulo yephakheji elayishe imojuli enikeziwe, efana ne-"pkgdir(m::Module)".
    • Umsebenzi omusha "wesitaki(x)" owenza ngokujwayelekile "nciphisa(hcat, x::Vector{<:Vector})" kunoma ibuphi ubukhulu futhi uvumela noma iyiphi i-iterators. Indlela "yesitaki(f, x)" ihlanganisa "i-mapreduce(f, hcat, x)" futhi isebenza kahle kakhulu.
    • Imakhro entsha yokuhlaziya inkumbulo eyabiwe ethi "@allocations", efana nokuthi "@allocated", ngaphandle kokuthi ibuyisela inani lememori eyabiwe, hhayi isamba sikasayizi wememori eyabiwe.
  • Izici ezintsha zomtapo wolwazi
    • I-"RoundFromZero" manje isisebenzela ezinye izinhlobo ngaphandle kwe-"BigFloat".
    • "I-Dict" manje ingehliswa ngesandla ngokuthi "sizehint!".
    • U-"@time" manje ukhombisa ngokuhlukile iphesenti lesikhathi esichithwe kubuyiswa izindlela ezingavumelekile.
  • Izinguquko kulabhulali ejwayelekile
    • Kulungiswe inkinga yezimali ezindleleni zokuphindaphinda ze-Dict nezinye izinto ezitholiwe njengokhiye(::Dict), amanani(::Dict) kanye ne-Set. Lezi zindlela zokuphindaphinda manje zingabizwa ngokuthi I-Dict noma Setha ngokuhambisana enanini elingenamkhawulo lemicu, inqobo nje uma zingekho izenzo ezishintsha isichazamazwi noma isethi.
    • Ukuphika umsebenzi wesilandiso "!f" manje kubuyisela umsebenzi oyinhlanganisela "(!) ∘ f" esikhundleni somsebenzi ongaziwa.
    • Imisebenzi ye-Dimension slice manje isebenza kuzo zonke izilinganiso eziningi: "i-eachslice", "i-eachrow", kanye ne-"eachcol" ibuyisela into ethi "Iziqephu" evumela ukuthunyelwa ukuze kunikeze izindlela ezisebenza kahle kakhulu.
    • Kwengezwe "@kwdef" macro ku-API yomphakathi.
    • Kulungiswe inkinga ngohlelo lokusebenza kokuthi "fld1".
    • Ukuhlunga manje kuhlala kuzinzile (i-QuickSort eklanywe kabusha).
    • "I-Base.splat" manje isikhishiwe. Inani lokubuyisela liwuhlobo oluthi "Base.Splat" kunomsebenzi ongaziwa, oluvumela ukuthi lichazwe kahle.
  • Umphathi Wephakheji
    • "Izandiso Zephakheji": usekelo lokulayisha amazwibela ekhodi asuka kwamanye amaphakheji alayishwe kuseshini ka-Julia. Uhlelo lokusebenza luyafana nephakheji ye-"Requires.jl", kodwa ukuhlanganiswa kwangaphambili nokuhambisana nokucushwa kuyasekelwa.
  • I-LinearAlgebra Library
    • Ngenxa yengozi yokudideka nokuhlukaniswa kwe-elementiwise, izindlela zika-"a/b" kanye no-"b \a" ezine-scalar "a" ne-vector "b" zisusiwe, ezazilingana ne-"a * pinv(b)".
    • Izingcingo ze-BLAS ne-LAPACK manje zisebenzisa i-"libblastrampoline (LBT)". I-OpenBLAS ihlinzekwa ngokuzenzakalelayo, kodwa ukwakha isithombe sesistimu namanye amalabhulali e-BLAS/LAPACK akusekelwa. Kunalokho, kuyanconywa ukusebenzisa indlela ye-LBT ukuze umiselele i-BLAS/LAPACK enye isethi etholakalayo yamalabhulali.
    • I-"lu" isekela isu elisha lokuzungezisa le-matrix le-"RowNonZero()", elikhetha into yokuqala engelona uziro ukuze isetshenziswe nezinhlobo ezintsha ze-arithmetic kanye nezinjongo zemfundo.
    • I-"normalize(x, p=2)" manje isekela noma yisiphi isikhala se-vector esijwayelekile "x", okuhlanganisa nezikali.
    • Inombolo ezenzakalelayo yochungechunge lwe-BLAS manje isilingana nenani lezintambo ze-CPU ezakhiweni ze-ARM kanye nohhafu yenani lezintambo ze-CPU kwezinye izakhiwo.
  • I-Printf: Imilayezo yephutha esenziwe kabusha yamayunithi ezinhlamvu angalungile ukuze afundeke kangcono.
  • Iphrofayela: Umsebenzi omusha we-"Profile.take_heap_snapshot(ifayela)" othwebula ifayela ngefomethi ye-".heapsnapshot" esekelwe ku-JSON esekelwe yi-Chrome.
  • Okungahleliwe: i-randn ne-randexp manje zisebenza kunoma yiluphi uhlobo lwe-AbstractFloat oluchaza irandi.
  • I-REPL
    • Ukucindezela inhlanganisela yokhiye "Alt-e" manje kuvula okokufaka kwamanje kusihleli. Okuqukethwe (uma kushintshiwe) kuzosetshenziswa lapho umhleli ephuma.
    • Umongo wemojuli yamanje osebenzayo ku-REPL ungashintshwa (ngokuzenzakalelayo uthi Okuyinhloko) kusetshenziswa umsebenzi we-"REPL.activate(::Module)" noma ngokufaka imojuli ku-REPL bese ucindezela inkinobho ethi "Alt-m" inhlanganisela.
    • Imodi "yokwaziswa okunezinombolo", ephrinta izinombolo zokufakwayo nokukhiphayo ngakunye futhi igcine imiphumela ehloliwe kokuthi Out, ingenziwa isebenze ngokuthi "REPL.numbered_prompt!()".
    • Ukuqedwa kwethebhu kubonisa izimpikiswano zamagama angukhiye atholakalayo.
  • I-SuiteSparse: Ikhodi ehanjisiwe yesixazululi se-"SuiteSparse" yayiswa kokuthi "SparseArrays.jl". Izixazululi manje zithunyelwa kabusha nge-"SuiteSparse.jl".
  • I-SparseArrays
    • Izixazululi ze-SuiteSparse manje seziyatholakala njengama-submodule e-SparseArrays.
    • Izindlela zokuvikela ukusakaza kwe-UMFPACK kanye ne-CHOLMOD zithuthukisiwe ngokususa okuguquguqukayo komhlaba wonke nokusebenzisa izingidi. I-Multhreaded "ldiv!" Izinto ze-UMFPACK manje zingasetshenziswa ngokuphepha.
    • Umsebenzi wokuhlola "i-SparseArrays.allowscalar(::Bool)" ikuvumela ukuthi ukhubaze noma unike amandla ukukhonjwa kwesikali kwamalungu afanayo amancane. Lo msebenzi uklanyelwe ukuthola ukukhomba okungahleliwe kwesikali sezinto ze-"SparseMatrixCSC", okuwumthombo ovamile wezinkinga zokusebenza.
  • Imodi entsha ye-faillover yama-suite wokuhlola enqamula ukuhlolwa okwenziwa ngaphambi kwesikhathi esimweni sokwehluleka noma iphutha. Setha ngokuthi "@testset kwarg failfast=true" noma "thekelisa JULIA_TEST_FAILFAST=true". Lokhu kungase kudingeke ekuqalisweni kwe-CI ukuze uthole imilayezo yamaphutha ngaphambi kwesikhathi.
  • Izinsuku: Iyunithi yezinhlamvu ezingenalutho azisacutshungulwa ngokungalungile njengamavelu e-"DateTime", "Idethi" noma "Izikhathi" futhi esikhundleni salokho phonsa iphutha elithi "ArgumentError" kubakhi nasekuhlaziyeni, kuyilapho okuthi "tryparse" kungabuyisi lutho.
  • Iphakheji esabalalisiwe
    • Ukumiswa kwephakheji (iphrojekthi esebenzayo, "LOAD_PATH", "DEPOT_PATH") manje isisakazwa lapho izinqubo zesisebenzi sendawo zengezwa (isb. nge-"addprocs(N::Int)" noma ngefulegi lomugqa womyalo "-procs=N").
    • "i-addprocs" yezinqubo zabasebenzi bendawo manje ithatha impikiswano ebizwa ngokuthi "env" ukuze idlulisele okuguquguqukayo kwendawo kuzinqubo zabasebenzi.
  • I-Unicode: "ama-graphemes, m:n)" ibuyisela uchungechunge oluncane olusuka ku-mth ukuya ku-nth kumagrafu kokuthi "s".
  • Iphakheji ye-DelimitedFiles ikhishiwe kumitapo yolwazi yesistimu futhi manje isatshalaliswa njengephakheji ehlukile okufanele ifakwe ngokucacile ukuze isetshenziswe.
  • Ukuncika kwangaphandle
    • I-Linux ithola ngokuzenzakalelayo inguqulo yelabhulali yesistimu i-libstdc++ futhi iyilayishe uma iyintsha. Ukuziphatha okudala kokulayisha i-libstdc++ eyakhelwe ngaphakathi kungakhathaliseki ukuthi inguqulo yesistimu ingabuyiselwa kanjani ngokusetha "JULIA_PROBE_LIBSTDCXX=0" ukuhluka kwemvelo.
    • Kukhishwe okuthi "RPATH" kunambambili ye-julia, engaphula imitapo yolwazi ku-Linux ehlulekayo ukuchaza okuhlukile kokuthi "RUNPATH".
    • Ukuthuthukiswa kwethuluzi: Okukhiphayo kokuthi "MethodError" nezindlela (isibonelo, kusukela kokuthi "methods(my_func)") manje sekufomethwe futhi kunombala ngokuya ngokuthi izindlela zikhishwa kanjani ekulandeleni isitaki.

    Source: opennet.ru

Engeza amazwana