Julia 1.9 ulwimi lwenkqubo ekhoyo

Ukukhutshwa kolwimi lweprogram ye-Julia 1.9 ishicilelwe, idibanisa iimpawu ezifana nokusebenza okuphezulu, inkxaso yokuchwetheza okuguquguqukayo kunye nezixhobo ezakhelwe ngaphakathi kwiprogram efanayo. I-syntax kaJulia isondele kwiMATLAB, iboleka ezinye izinto kwiRuby kunye neLisp. Indlela yokuguqula umtya ikhumbuza iPerl. Ikhowudi yeprojekthi ihanjiswa phantsi kwelayisenisi ye-MIT.

Iimpawu eziphambili zolwimi:

  • Ukusebenza okuphezulu: enye yeenjongo eziphambili zeprojekthi kukuphumeza ukusebenza kufutshane neenkqubo zeC. I-Julia compiler isekelwe kumsebenzi weprojekthi ye-LLVM kwaye ivelisa ikhowudi yomatshini wendalo esebenzayo kwiiplatifomu ezininzi ezijoliswe kuzo;
  • Ixhasa iiparadigms ezahlukeneyo zeprogram, kubandakanywa izinto ezijoliswe kwinto kunye neprogram esebenzayo. Ilayibrari eqhelekileyo ibonelela, phakathi kwezinye izinto, imisebenzi ye-I/O engahambelaniyo, ulawulo lwenkqubo, ukugawulwa kwemithi, iprofayili, kunye nolawulo lwephakheji;
  • Ukuchwetheza ngamandla: ulwimi alufuni ngcaciso icacileyo yeendidi zezinto eziguquguqukayo, ezifana neelwimi zenkqubo yokubhala. Imowudi yonxibelelwano iyaxhaswa;
  • Ukukwazi ukukhetha ukukhankanya ngokucacileyo iindidi;
  • Isivakalisi esifanelekileyo kwikhompuyutha yamanani, ikhompuyutha yesayensi, ukufunda ngomatshini, kunye nokubonwa kwedatha. Inkxaso kwiintlobo ezininzi zedatha yamanani kunye nezixhobo zokuhambelana nokubala.
  • Ukukwazi ukubiza ngokuthe ngqo imisebenzi evela kumathala eencwadi e-C ngaphandle kweemaleko ezongezelelweyo.

Utshintsho olukhulu kuJulia 1.9:

  • Iimpawu zolwimi olutsha
    • Vumela izabelo zenziwe kwenye imodyuli kusetyenziswa "setproperty!(::Module, ::Symbol, x)".
    • Izabelo ezininzi ezingekho kwindawo yokugqibela zivumelekile. Umzekelo, umtya othi β€œa, b…, c = 1, 2, 3, 4” uya kucutshungulwa njenge β€œa = 1; b…, = 2, 3; c = 4". Oku kusingathwa nge-Base.split_rest.
    • Unobumba omnye ngoku uxhasa isintaksi esifanayo nesomtya; abo. Isivakalisi sinokubonisa ulandelelwano olungasebenziyo lwe-UTF-8, njengoko kuvunyelwe ludidi lweTshala.
    • Inkxaso eyongeziweyo yenkcazo ye-Unicode 15.
    • Imidibaniso ebekwe kwindlwana yee-tuples kunye neekopi zabalinganiswa ezithiwe thaca ngoku zingasetyenziswa njengohlobo lweeparamitha.
    • Imisebenzi emitsha eyakhelwe-ngaphakathi "getglobal(::Modyuli, ::Symbol[, order])" kunye ne "setglobal!(::Modyuli, ::Symbol, x[, order])" yokufunda nokubhala kuphela kwizinto eziguquguqukayo zehlabathi. Indlela ye-getglobal kufuneka ngoku ikhethwe ngaphezu kwendlela ye-getfield yokufikelela kwizinto eziguquguqukayo zehlabathi.
  • Utshintsho kulwimi
    • I-"@invoke" macro efakwe kwinguqulelo 1.7 ngoku ithunyelwa ngaphandle kwaye iyafumaneka ukuze isetyenziswe. Ukongeza, ngoku isebenzisa indlela "Core.Typeof(x)" kune "Nayiphi na" kwimeko apho uhlobo lwesichasiselo lushiyiweyo kwingxoxo ka "x". Oku kuyimfuneko ukuze kuqinisekiswe ukuba iindidi ezigqithisiweyo njengeengxoxo zilungiswa ngokuchanekileyo.
    • Ukuthunyelwa kwamanye amazwe kunikwe amandla umsebenzi we-"invokelatest" kunye ne-"@invokelatest" macro, efakwe kwinguqulo ye-1.7.
  • Umqokeleli/uphuculo lwexesha lokusebenza
    • Ixesha elincitshisiweyo ngokuphawulekayo ekuqhutyweni kokuqala (i-TTFX - Ixesha lokuqhutywa kokuqala). Ukuqulunqa ipakethe ngoku igcina ikhowudi yemveli kwi "pkgimage", oku kuthetha ukuba ikhowudi eveliswe yinkqubo yokuqulunqwa kwangaphambili ayizukudinga ukuphinda ihlanganiswe emva kokuba ipakethe ilayishiwe. Usetyenziso lwemowudi ye-pkgimages inokuyekiswa kusetyenziswa "--pkgimages=no" ukhetho.
    • Umba owaziwayo wokuntsokotha kwequadratic wohlobo lokuthelekelela ulungisiwe, kwaye inkcazo isebenzisa imemori encinci iyonke. Ezinye iimeko zomphetho ezinemisebenzi emide eyenziwe ngokuzenzekelayo (efana neModelingToolkit.jl eneequation zomahluko ngokungagqibelelanga kunye nemifuziselo eyicausal enkulu) qokelela ngokukhawuleza okukhulu.
    • Iifowuni ezineengxoxo ezingenazo iintlobo zekhonkrithi ngoku ziyakwazi ukwahlulwa-hlulwa kweManyano elungiselelwe inaliti okanye isisombululo esingaguqukiyo, nokuba kukho abagqatswa abaninzi abahlukeneyo bokuthunyelwa. Oku kunokuphucula ukusebenza kwiimeko ezithile apho iintlobo zezinto zingasonjululwanga ngokupheleleyo, ngokusombulula ngokweenkcukacha "@nospecialize-d" iisayithi zokufowuna kunye nokunqanda ukuphinda kuhlanganiswe.
    • Konke usetyenziso lwe @pure macro kwimodyuli yeSiseko kuthatyathelwe indawo yi-Base.@assume_effects.
    • Iminxeba yokubiza(f, invokesig, args...) eneentlobo ezikhethekileyo ezingaphantsi kuneziqhele ukusetyenziswa kwi f(args...) azisabangeli ukuba uqokelelwe kwakhona impahla.
  • Utshintsho kwiiKhetho zeLayini yoMyalelo
    • Kwi-Linux kunye ne-Windows, i-"--threads=auto" ngoku izama ukumisela inani elikhoyo labaqhubekekisi ngokusekwe kubudlelwane be-CPU, imaski eqhele ukusetwa kwi-HPC kunye neemekobume zamafu.
    • Iparamitha "--math-mode=fast" ivaliwe, endaweni yoko kucetyiswa ukuba kusetyenziswe "@fastmath" macro, echaze ngokucacileyo i-semantics.
    • Ukhetho "--imisonto" ngoku lukwifomathi "auto | N[,auto|M]", apho uM ebonisa inani lemisonto esebenzisanayo ukuyila (okwangoku i-auto ithetha u-1).
    • Inketho eyongeziweyo "-heap-size-hint=", ebeka umda emva kokuba uqokelelo lwenkunkuma olusebenzayo luqala. Ubungakanani bunokucaciswa ngeebytes, kilobytes (1000 KB), megabytes (300 MB), okanye iigigabytes (1,5 GB).
  • Utshintsho kwi-multithreading
    • "I-Treads.@spawn" ngoku inengxoxo yokuqala ekhethwayo enexabiso ":default" okanye ":interactive". Umsebenzi osebenzisanayo ufuna ukubambezeleka kwempendulo ephantsi kwaye yenzelwe ukuba ibemfutshane okanye yenziwe rhoqo. Imisebenzi esebenzayo iya kuqhuba kwimisonto edibeneyo ukuba ichaziwe xa iqala uJulia.
    • Imisonto ebalekayo ngaphandle kwexesha leJulia (elifana neC okanye iJava) ngoku lingafowunela ikhowudi yeJulia usebenzisa "jl_adopt_thread". Oku kwenzeka ngokuzenzekelayo xa ufaka ikhowudi yeJulia nge "cfunction" okanye indawo yokungena "@ccallable". Ngenxa yoko, inani lemisonto ngoku lingatshintsha ngexesha lokwenziwa.
  • Imisebenzi yethala leencwadi elitsha
    • Umsebenzi omtsha "Iterators.flatmap".
    • Umsebenzi omtsha "pkgversion(m::Modyuli)" ukufumana uguqulelo lwempahla elayishe umnqongo onikiweyo, efana ne "pkgdir(m::Modyuli)".
    • Umsebenzi omtsha "istack(x)" owenza ngokubanzi "nciphisa(hcat, x::Vector{<:Vector})" kuwo nawuphi na umlinganiselo kwaye ivumela nawuphi na umphinda-phinda we-iterators. Indlela ethi "stack(f, x)" yenza ngokubanzi "mapreduce(f, hcat, x)" kwaye isebenza kakuhle ngakumbi.
    • Imakhro entsha yokuhlalutya imemori eyabiweyo "@allocations", efana no "@allocation", ngaphandle kokuba ibuyisela inani leenkumbulo ezabelweyo, endaweni yobungakanani bubonke bememori eyabiweyo.
  • Iimpawu ezintsha zethala leencwadi
    • "RoundFromZero" ngoku isebenza kwezinye iintlobo ngaphandle kwe "BigFloat".
    • "I-Dict" ngoku ingancitshiswa ngesandla kusetyenziswa i-"sizehint!"
    • "@ixesha" ngoku ngokwahlukeneyo ixela ipesenti yexesha elichithwe kubuyisela iindlela ezingasebenziyo.
  • Utshintsho kwilayibrari eqhelekileyo
    • Kulungiswe umba weconcurrence kwiindlela zophinda-phindo zeDict nezinye izinto ezifana nezitshixo(::Dict), amaxabiso(::Dict) kunye neSeti. Ezi ndlela zokuphinda-phinda ngoku zingabizwa kwi-Dict okanye iSeti ngokunxuseneyo kwinani elingenamda lemisonto, ukuba akukho zenzo eziguqula kancinane isichazi-magama okanye iseti.
    • Ukulandula isivisa umsebenzi "!f" ngoku ubuyisela umsebenzi odityanisiweyo "(!) ∘ f" endaweni yomsebenzi ongachazwanga magama.
    • Imisebenzi ye-Dimension slice ngoku isebenza kwi-dimensions ezininzi: "i-eachslice", "i-eachrow" kunye ne-"eachcol" ibuyisela into ethi "Iziqwenga" evumela ukuthunyelwa ukunika iindlela ezisebenza ngokufanelekileyo.
    • Yongeza "@kwdef" macro kwi-API yoluntu.
    • Kulungiswe umba ngolandelelwano lwemisebenzi kwi-"fld1".
    • Ukuhlela ngoku kusoloko kuzinzile ixesha (uQuickSort uyilwe ngokutsha).
    • "I-Base.splat" ngoku ithunyelwa ngaphandle. Ixabiso lembuyekezo luhlobo lwe "Base.Splat" kunomsebenzi ongachazwanga igama, elivumela ukuba likhutshwe kakuhle.
  • Umphathi wePhakeji
    • "Izandiso zePackage": Inkxaso yokulayisha ikhowudi ye-snippet evela kwezinye iipakethe ezilayishwe kwiseshoni kaJulia. Isicelo siyafana nephakheji ethi "Requires.jl", kodwa ukuqulunqwa kwangaphambili kunye nokuhambelana kwesetingi kuyaxhaswa.
  • LinearAlgebra Library
    • Ngenxa yomngcipheko wokubhideka kunye necandelo lobulumko, kususwe iindlela zika-"a/b" kunye no-"b\a" ezine-scalar "a" kunye ne-vector "b", ezazilingana no "a * pinv(b)".
    • Ukubiza i-BLAS kunye ne-LAPACK ngoku isebenzisa "i-libblastrampoline (LBT)". I-OpenBLAS ibonelelwa ngokungagqibekanga, kodwa ukwakha umfanekiso wenkqubo namanye amathala e-BLAS/LAPACK akuxhaswanga. Endaweni yoko, kuyacetyiswa ukuba kusetyenziswe indlela ye-LBT ukubuyisela i-BLAS/LAPACK enye isethi ekhoyo yamathala eencwadi.
    • "lu" ixhasa isicwangciso esitsha sokujikeleziswa kwe-matrix, "RowNonZero()", ekhetha into yokuqala ejikelezayo engeyiyo i-zero ukuze isetyenziswe neentlobo ezintsha ze-arithmetic kunye neenjongo zoqeqesho.
    • "normalize(x, p=2)" ngoku ixhasa nasiphi na isithuba sevektha esiqhelekileyo "x", kuquka nezikali.
    • Inani elimiselweyo lemisonto ye-BLAS ngoku lilingana nenani lemisonto ye-CPU kwizakhiwo ze-ARM kunye nesiqingatha senani lemisonto ye-CPU kwezinye izakhiwo.
  • I-Printf: Imiyalezo yemposiso ephinde yalungiswa ukulungiselela imitya efomathiweyo ngokungalunganga ukuze ifundeke ngcono.
  • Iprofayili: Umsebenzi omtsha "Profile.take_heap_snapshot(ifayile)", ebhala ifayile kwi-JSON-based ".heapsnapshot" ifomathi exhaswa kwiChrome.
  • Random: irandn kunye nerandexp ngoku zisebenzela naluphi na uhlobo lwe-AbstractFloat oluchaza irandi.
  • Phendula
    • Ukucofa "Alt-e" indibaniselwano yesitshixo ngoku ivula igalelo langoku kumhleli. Umxholo (ukuba ulungisiwe) uya kuphunyezwa xa uphuma kumhleli.
    • Umxholo wemodyuli yangoku osebenzayo kwiREPL unokutshintshwa (Engundoqo ngokungagqibekanga) usebenzisa umsebenzi "REPL.activate(::Module)" okanye ngokungenisa imodyuli kwiREPL kwaye ucinezele indibaniselwano yesitshixo "Alt-m".
    • Imowudi ye-"numbered prompt", eprinta amanani kwigalelo ngalinye kunye nesiphumo kwaye igcine iziphumo ezifunyenweyo kwi-Out, inokuvulwa kusetyenziswa "REPL.numbered_prompt!()".
    • Ukugqitywa kwethebhu kubonisa iingxoxo zamagama angundoqo akhoyo.
  • I-SuiteSparse: Ikhowudi ehanjisiweyo ye-"SuiteSparse" isombululi ukuya ku-"SparseArrays.jl". Izisombululi ngoku zithunyelwa ngaphandle kwakhona ngu "SuiteSparse.jl".
  • SparseArrays
    • Izisombululi ze "SuiteSparse" ngoku ziyafumaneka njenge "SparseArrays" iimodyuli ezisezantsi.
    • I-UMFPACK kunye ne-CHOLMOD iindlela zokukhusela intambo ziye zaphuculwa ngokususa iinguqu zehlabathi kunye nokusebenzisa izitshixo. Iintambo ezininzi "ldiv!" Izinto ze-UMFPACK ngoku zinokwenziwa ngokukhuselekileyo.
    • Umsebenzi wovavanyo "SparseArrays.allowscalar(::Bool)" ikuvumela ukuba uvale okanye wenze isalathiso se-scalar se-arrays. Lo msebenzi uyilelwe ukukhangela isalathiso esingakhethiyo se-scalar sezinto ze-"SparseMatrixCSC", engumthombo oqhelekileyo weengxaki zokusebenza.
  • Imowudi entsha ye-failsafe yeesuti zovavanyo eziphelisa uvavanyo oluqhutywa kwangoko xa kukho ukungaphumeleli okanye impazamo. Cwangcisa nokuba β€œ@testset kwarg failfast=true” okanye β€œexport JULIA_TEST_FAILFAST=true”. Oku ngamanye amaxesha kuyimfuneko kwi-CI ibaleka ukufumana imiyalezo yempazamo kwangoko.
  • Umhla
  • Iphakheji isasazwe
    • Ubumbeko lwephakheji (iprojekthi esebenzayo, "LOAD_PATH", "DEPOT_PATH") ngoku iyasasazwa xa isongeza iinkqubo zomsebenzi wasekhaya (umzekelo usebenzisa "i-addprocs(N::Int)" okanye usebenzisa iflegi yomgca womyalelo "--procs=N").
    • "i-adddprocs" yeenkqubo zabasebenzi basekhaya ngoku yamkela ingxoxo enegama elithi "env" ukudlulisa izinto eziguquguqukayo zemo engqongileyo kwiinkqubo zabasebenzi.
  • Unicode: "iigraphemes, m:n)" ibuyisela umtya ongezantsi ukusuka kwi-mth ukuya kwi-nth kwiigrafu ku-"s".
  • Iphakheji ye-DelimitedFiles isusiwe kwiilayibrari zesistim kwaye ngoku isasazwe njengephakheji eyahlukileyo ekufuneka ifakwe ngokucacileyo ukuze isetyenziswe.
  • Ukuxhomekeka kwangaphandle
    • Kwi-Linux, uguqulelo lwelayibrari yenkqubo ye-libstdc++ ichongiwe ngokuzenzekelayo kwaye, ukuba intsha, iyalayishwa. Indlela endala yokulayisha i-libstdc++ eyakhelwe-ngaphakathi, kungakhathaliseki ukuba ithini inguqulelo yesixokelelwano, inokubuyiselwa ngokumisela ukuguquguquka kokusingqongileyo "JULIA_PROBE_LIBSTDCXX=0".
    • Isusiwe "RPATH" kwi julia yokubini, enokwaphula amathala eencwadi kwi Linux angaphumeleliyo ukuchaza "RUNPATH" ukuguquguquka.
    • Ukuphuculwa kwesixhobo: Imveliso ye "MethodError" kunye neendlela (umzekelo ukusuka kwi "methods(my_func)") ngoku ifomathiweyo kwaye ifakwe umbala ngokuhambelana nomgaqo wemveliso yeendlela kwi-stack trace.

    umthombo: opennet.ru

Yongeza izimvo