Ir publicÄts programmÄÅ”anas valodas Julia 1.9 izlaidums, kas apvieno tÄdas Ä«paŔības kÄ augsta veiktspÄja, atbalsts dinamiskai rakstÄ«Å”anai un iebÅ«vÄti rÄ«ki paralÄlai programmÄÅ”anai. JÅ«lijas sintakse ir tuva MATLAB, daži elementi ir aizgÅ«ti no Ruby un Lisp. StÄ«gu manipulÄcijas metode atgÄdina Perl. Projekta kods tiek izplatÄ«ts saskaÅÄ ar MIT licenci.
GalvenÄs valodas iezÄ«mes:
- Augsta veiktspÄja: viens no galvenajiem projekta mÄrÄ·iem ir sasniegt C programmÄm tuvu veiktspÄju. Julia kompilators ir balstÄ«ts uz LLVM projektu un Ä£enerÄ efektÄ«vu vietÄjo maŔīnkodu daudzÄm mÄrÄ·a platformÄm;
- Atbalsts dažÄdÄm programmÄÅ”anas paradigmÄm, ieskaitot objektorientÄtas un funkcionÄlÄs programmÄÅ”anas elementus. Standarta bibliotÄka nodroÅ”ina funkcijas asinhronai ievadei/izvadÄ«Å”anai, procesu pÄrvaldÄ«bai, reÄ£istrÄÅ”anai, profilÄÅ”anai un pakotÅu pÄrvaldÄ«bai, cita starpÄ;
- DinamiskÄ rakstÄ«Å”ana: valodai nav nepiecieÅ”ama precÄ«za mainÄ«go tipu definÄ«cija pÄc analoÄ£ijas ar skriptu programmÄÅ”anas valodÄm. Atbalsta interaktÄ«vo režīmu;
- PÄc izvÄles iespÄja skaidri norÄdÄ«t veidus;
- Sintakse, kas ir lieliski piemÄrota skaitliskiem aprÄÄ·iniem, zinÄtniskiem aprÄÄ·iniem, maŔīnmÄcÄ«Å”anÄs sistÄmÄm un datu vizualizÄcijai. Atbalsts daudziem skaitliskiem datu tipiem un rÄ«kiem aprÄÄ·inu paralÄlinÄÅ”anai.
- IespÄja tieÅ”i izsaukt funkcijas no C bibliotÄkÄm bez papildu slÄÅiem.
GalvenÄs izmaiÅas JÅ«lijÄ 1.9:
- Jaunas valodas funkcijas
- Atļaut uzdevumus veikt citÄ modulÄ«, izmantojot "setproperty!(::Module, ::Symbol, x)".
- Ir atļauti vairÄki uzdevumi, kas nav galÄ«gajÄ pozÄ«cijÄ. PiemÄram, virkne "a, b..., c = 1, 2, 3, 4" tiks apstrÄdÄta kÄ "a = 1; bā¦, = 2, 3; c = 4" Tas tiek apstrÄdÄts, izmantojot Base.split_rest.
- Viena rakstzÄ«mes literÄļi tagad atbalsta to paÅ”u sintaksi kÄ virknes literÄļi; tie. sintakse var attÄlot nederÄ«gas UTF-8 sekvences, kÄ to atļauj Char tips.
- Pievienots Unicode 15 specifikÄcijas atbalsts.
- KÄ tipa parametrus tagad var izmantot ligzdotas kortežu kombinÄcijas un nosauktas rakstzÄ«mju kopas.
- Jaunas iebÅ«vÄtÄs funkcijas "getglobal(::Module, ::Symbol[, order])" un "setglobal!(::Module, ::Symbol, x[, order])" lasÄ«Å”anai un rakstÄ«Å”anai tikai globÄlajos mainÄ«gajos. Lai piekļūtu globÄlajiem mainÄ«gajiem, tagad priekÅ”roka jÄdod getglobal metodei, nevis getfield metodei.
- Valodas izmaiÅas
- VersijÄ 1.7 ieviestais makro @invoke tagad ir eksportÄts un pieejams lietoÅ”anai. TurklÄt tagad tÄ izmanto metodi "Core.Typeof(x)", nevis "Any", ja argumentam "x" tipa anotÄcija ir izlaista. Tas ir nepiecieÅ”ams, lai tipi, kas nodoti kÄ argumenti, tiktu pareizi apstrÄdÄti.
- IespÄjots funkcijas "invokelatest" un makro "@invokelatest" eksportÄÅ”ana, kas ieviesta versijÄ 1.7.
- Kompilatora/izpildlaika uzlabojumi
- IevÄrojami samazinÄts laiks lÄ«dz pirmajai izpildei (TTFX ā laiks lÄ«dz pirmajai izpildei). Pakotnes iepriekÅ”Äja kompilÄcija tagad saglabÄ sÄkotnÄjo kodu "pkgimage", kas nozÄ«mÄ, ka kods, kas Ä£enerÄts iepriekÅ”Äjas kompilÄcijas laikÄ, pÄc pakotnes ielÄdes nebÅ«s jÄpÄrkompilÄ. Pkgimages režīma lietoÅ”anu var atspÄjot ar opciju "--pkgimages=no".
- ZinÄmÄ tipa secinÄjumu kvadrÄtiskÄs sarežģītÄ«bas problÄma ir novÄrsta, un kopumÄ secinÄjums izmanto mazÄk atmiÅas. Daži malas gadÄ«jumi ar automÄtiski Ä£enerÄtÄm garÄm funkcijÄm (piemÄram, ModelingToolkit.jl ar daļÄjiem diferenciÄlvienÄdojumiem un lieliem cÄloÅsakarÄ«bas modeļiem) tiek apkopoti daudz ÄtrÄk.
- Zvani ar veidam nespecifiskiem argumentiem tagad var bÅ«t SavienÄ«bas sadalÄ«Å”ana optimizÄta injekcijai vai statiskai izŔķirtspÄjai, pat ja ir vairÄki dažÄdi nosÅ«tÄ«Å”anas kandidÄtu veidi. Tas var uzlabot veiktspÄju noteiktÄs situÄcijÄs, kad objektu tipi nav pilnÄ«bÄ statiski atrisinÄti, statiski atrisinot @nospecialize-d zvanu vietnes un izvairoties no atkÄrtotas kompilÄcijas.
- Visi makro @pure lietojumi Base modulÄ« ir aizstÄti ar Base.@assume_effects.
- Izsaukumi uz invoke(f, invokesig, args...) ar tipiem, kas ir mazÄk specifiski nekÄ tie, kas parasti tiek izmantoti f(args...), vairs neizraisa pakotnes pÄrkompilÄÅ”anu.
- Komandrindas parametru izmaiÅas
- OperÄtÄjsistÄmÄs Linux un Windows opcija "--threads=auto" tagad mÄÄ£ina noteikt pieejamo procesoru skaitu, pamatojoties uz CPU afinitÄti, kas ir maska, kas parasti tiek iestatÄ«ta HPC un mÄkoÅa vidÄs.
- Opcija "--math-mode=fast" ir atspÄjota, tÄs vietÄ ieteicams izmantot makro "@fastmath", kam ir labi definÄta semantika.
- Parametram "--threads" tagad ir formÄts "auto | N[,auto|M]", kur M norÄda veidojamo interaktÄ«vo pavedienu skaitu (paÅ”laik auto nozÄ«mÄ 1).
- Pievienota opcija "--heap-size-hint= ā, kas nosaka slieksni, pÄc kura sÄkas aktÄ«va atkritumu savÄkÅ”ana. Lielumu var norÄdÄ«t baitos, kilobaitos (1000 KB), megabaitos (300 MB) vai gigabaitos (1,5 GB).
- Daudzpavedienu izmaiÅas
- "Threads.@spawn" tagad ir neobligÄts pirmais arguments ar vÄrtÄ«bu ":default" vai ":interactive". InteraktÄ«vam uzdevumam ir nepiecieÅ”ams mazs atbildes latentums, un tas ir paredzÄts Ä«sam vai bieži veiktam. InteraktÄ«vie uzdevumi darbosies interaktÄ«vos pavedienos, ja tie bÅ«s norÄdÄ«ti, startÄjot Julia.
- Pavedieni, kas palaisti Ärpus Julia izpildlaika (piemÄram, no C vai Java), tagad var izsaukt Julia kodu, izmantojot "jl_adopt_thread". Tas notiek automÄtiski, kad ievadÄt JÅ«lijas kodu, izmantojot ieejas punktu "cfunction" vai "@ccallable". TÄ rezultÄtÄ pavedienu skaits tagad var mainÄ«ties izpildes laikÄ.
- Jaunas bibliotÄkas funkcijas
- Jauna funkcija "Iterators.flatmap".
- Jauna funkcija "pkgversion(m::Module)", lai iegÅ«tu pakotnes versiju, kurÄ tika ielÄdÄts dotais modulis, lÄ«dzÄ«gi kÄ "pkgdir(m::Module)".
- Jauna funkcija "steck(x)", kas vispÄrina "reduce(hcat, x::Vector{<:Vector})" uz jebkuru dimensiju un atļauj jebkuru iteratoru iteratoru. Metode "steck(f, x)" vispÄrina "mapreduce(f, hcat, x)" un ir efektÄ«vÄka.
- Jauns makro pieŔķirtÄs atmiÅas parsÄÅ”anai "@allocations", kas lÄ«dzÄ«gs "@allocated", izÅemot to, ka tas atgriež atmiÅas pieŔķīrumu skaitu, nevis kopÄjo pieŔķirtÄs atmiÅas lielumu.
- Jaunas bibliotÄkas iespÄjas
- "RoundFromZero" tagad darbojas citiem veidiem, nevis BigFloat.
- "Dict" tagad var samazinÄt manuÄli ar "sizehint!".
- "@time" tagad atseviŔķi norÄda laika procentuÄlo daļu, kas pavadÄ«ts nederÄ«gu metožu pÄrkompilÄÅ”anai.
- IzmaiÅas standarta bibliotÄkÄ
- NovÄrsta vienlaicÄ«bas problÄma iterÄcijas metodÄs Dict un citiem atvasinÄtiem objektiem, piemÄram, taustiÅiem (::Dict), vÄrtÄ«bÄm (::Dict) un Set. Å Ä«s iterÄcijas metodes tagad var izsaukt Dict vai Set paralÄli neierobežotÄ skaitÄ pavedienu, ja vien nav darbÄ«bu, kas modificÄ vÄrdnÄ«cu vai kopu.
- Noliedzot predikÄta funkciju "!f", tagad anonÄ«mas funkcijas vietÄ tiek atgriezta saliktÄ funkcija "(!) ā f".
- Dimensiju slÄÅa funkcijas tagad darbojas vairÄkÄs dimensijÄs: "eachslice", "eachrow" un "eachcol" atgriež objektu "Slices", kas ļauj nosÅ«tÄ«t, lai nodroÅ”inÄtu efektÄ«vÄkas metodes.
- Publiskajai API ir pievienots makro "@kwdef".
- NovÄrsta problÄma ar darbÄ«bu secÄ«bu "fld1".
- KÄrtoÅ”ana tagad vienmÄr ir laika ziÅÄ stabila (pÄrveidots QuickSort).
- "Base.splat" tagad ir eksportÄts. AtgrieÅ”anas vÄrtÄ«ba ir āBase.Splatā tipa, nevis anonÄ«ma funkcija, kas ļauj to labi secinÄt.
- Iepakojuma pÄrvaldnieks
- "PakotÅu paplaÅ”inÄjumi": atbalsts koda fragmenta ielÄdei no citÄm Julia sesijÄ ielÄdÄtÄm pakotnÄm. Lietojumprogramma ir lÄ«dzÄ«ga pakotnei "Requires.jl", taÄu tiek atbalstÄ«ta iepriekÅ”Äja kompilÄcija un konfigurÄcijas saderÄ«ba.
- LineÄrÄs algebras bibliotÄka
- SajaukÅ”anas riska dÄļ ar dalÄ«Å”anu elementÄri tika noÅemtas metodes "a / b" un "b \ a" ar skalÄru "a" un vektoru "b", kas bija lÄ«dzvÄrtÄ«gas "a * pinv(b)".
- BLAS un LAPACK zvani tagad izmanto "libblastrampoline (LBT)". OpenBLAS tiek nodroÅ”inÄts pÄc noklusÄjuma, taÄu sistÄmas attÄla veidoÅ”ana ar citÄm BLAS/LAPACK bibliotÄkÄm netiek atbalstÄ«ta. TÄ vietÄ ir ieteicams izmantot LBT mehÄnismu, lai aizstÄtu BLAS/LAPACK ar citu pieejamo bibliotÄku komplektu.
- "lu" atbalsta jauno "RowNonZero()" matricas rotÄcijas stratÄÄ£iju, kas atlasa pirmo rotÄcijas elementu, kas nav nulle, izmantoÅ”anai ar jaunajiem aritmÄtikas veidiem un izglÄ«tÄ«bas nolÅ«kos.
- "normalize(x, p=2)" tagad atbalsta jebkuru normalizÄtu vektortelpu "x", ieskaitot skalÄrus.
- NoklusÄtais BLAS pavedienu skaits tagad ir vienÄds ar CPU pavedienu skaitu ARM arhitektÅ«rÄ un pusi no CPU pavedienu skaita citÄs arhitektÅ«rÄs.
- Printf: PÄrstrÄdÄti kļūdu ziÅojumi nepareizi veidotÄm virknÄm labÄkai lasÄmÄ«bai.
- Profils: jauna funkcija "Profile.take_heap_snapshot(file)", kas tver failu JSON formÄtÄ ".heapsnapshot", ko atbalsta pÄrlÅ«ks Chrome.
- NejauÅ”i: randn un randexp tagad darbojas jebkuram AbstractFloat veidam, kas definÄ randu.
- REPL
- Nospiežot taustiÅu kombinÄciju "Alt-e", tagad redaktorÄ tiek atvÄrta paÅ”reizÄjÄ ievade. Saturs (ja tas ir mainÄ«ts) tiks izpildÄ«ts, kad redaktors iziet.
- PaÅ”reizÄjo moduļa kontekstu, kas ir aktÄ«vs REPL, var mainÄ«t (pÄc noklusÄjuma tas ir galvenais), izmantojot funkciju "REPL.activate(::Module)" vai ievadot moduli REPL un nospiežot taustiÅu "Alt-m". kombinÄcija.
- Režīmu "NumurÄtais uzvedne", kas drukÄ skaitļus katrai ievadei un izvadei un novÄrtÄ novÄrtÄtos rezultÄtus saglabÄ izejÄ Out, var aktivizÄt ar "REPL.numbered_prompt!()".
- Cilnes pabeigÅ”ana parÄda pieejamos atslÄgvÄrdu argumentus.
- SuiteSparse: āSuiteSparseā risinÄtÄja kods ir pÄrvietots uz āSparseArrays.jlā. RisinÄtÄjus tagad atkÄrtoti eksportÄ "SuiteSparse.jl".
- SparseArrays
- SuiteSparse risinÄtÄji tagad ir pieejami kÄ SparseArrays apakÅ”moduļi.
- UMFPACK un CHOLMOD straumes aizsardzÄ«bas režīmi ir uzlaboti, novÄrÅ”ot globÄlos mainÄ«gos un izmantojot slÄdzenes. Daudzpavedienu "ldiv!" UMFPACK objektus tagad var droÅ”i izpildÄ«t.
- EksperimentÄlÄ funkcija "SparseArrays.allowscalar(::Bool)" ļauj atspÄjot vai iespÄjot retu masÄ«vu skalÄro indeksÄciju. Å Ä« funkcija ir paredzÄta, lai noteiktu nejauÅ”u "SparseMatrixCSC" objektu skalÄro indeksÄciju, kas ir izplatÄ«ts veiktspÄjas problÄmu avots.
- Jauns kļūmjpÄrlÄces režīms testa komplektiem, kas priekÅ”laicÄ«gi pÄrtrauc testa darbÄ«bu kļūmes vai kļūdas gadÄ«jumÄ. Iestatiet, izmantojot "@testset kwarg failfast=true" vai "export JULIA_TEST_FAILFAST=true". Tas var bÅ«t nepiecieÅ”ams CI palaiÅ”anas laikÄ, lai saÅemtu agrÄ«nus kļūdu ziÅojumus.
- Datumi: tukÅ”as virknes vairs netiek nepareizi parsÄtas kÄ derÄ«gas "DateTime", "Dates" vai "Times" vÄrtÄ«bas, un tÄ vietÄ konstruktoros un parsÄjot tiek parÄdÄ«ta kļūda "ArgumentError", savukÄrt "tryparse" neko neatgriež.
- IzdalÄ«tÄ pakete
- Pakotnes konfigurÄcija (aktÄ«vais projekts, "LOAD_PATH", "DEPOT_PATH") tagad tiek izplatÄ«ta, kad tiek pievienoti lokÄlie darbinieka procesi (piemÄram, ar "addprocs(N::Int)" vai ar komandrindas karogu "-procs=N").
- VietÄjo darbinieku procesu "addprocs" tagad izmanto argumentu ar nosaukumu "env", lai vides mainÄ«gos nodotu darbinieka procesiem.
- Unicode: "graphemes(s, m:n)" atgriež apakÅ”virkni no mth lÄ«dz nth grafÄmÄm "s".
- Pakotne DelimtedFiles ir noÅemta no sistÄmas bibliotÄkÄm un tagad tiek izplatÄ«ta kÄ atseviŔķa pakotne, kas ir skaidri jÄinstalÄ, lai to varÄtu izmantot.
- ÄrÄjÄs atkarÄ«bas
- Linux automÄtiski nosaka sistÄmas bibliotÄkas libstdc++ versiju un ielÄdÄ to, ja tÄ ir jaunÄka. IepriekÅ”Äjo iebÅ«vÄtÄ libstdc++ ielÄdes darbÄ«bu neatkarÄ«gi no sistÄmas versijas var atjaunot, iestatot vides mainÄ«go "JULIA_PROBE_LIBSTDCXX=0".
- No julia binÄrÄ faila tika noÅemts "RPATH", kas var sabojÄt tÄs bibliotÄkas operÄtÄjsistÄmÄ Linux, kuras nespÄj definÄt mainÄ«go "RUNPATH".
- RÄ«ka uzlabojumi: āMethodErrorā un metožu izvade (piemÄram, no āmethods(my_func)ā) tagad ir formatÄta un iekrÄsota atbilstoÅ”i tam, kÄ metodes tiek izvadÄ«tas steka trasÄs.
Avots: opennet.ru