Lang pwogramasyon Julia 1.9 disponib

Yo te pibliye liberasyon lang pwogramasyon Julia 1.9, ki konbine kalite tankou pèfòmans segondè, sipò pou sezisman dinamik ak zouti entegre pou pwogramasyon paralèl. Sentaks Julia se tou pre MATLAB, ak kèk eleman prete nan Ruby ak Lisp. Metòd manipilasyon fisèl la se okoumansman de Perl. Kòd pwojè a distribye anba lisans MIT.

Karakteristik kle nan lang nan:

  • Segondè pèfòmans: youn nan objektif kle pwojè a se reyalize pèfòmans tou pre pwogram C yo. Konpilateur Julia a baze sou pwojè LLVM epi li jenere kòd machin natif natal efikas pou anpil platfòm sib;
  • Sipò pou plizyè paradigm pwogramasyon, ki gen ladan eleman nan pwogram oryante objè ak fonksyonèl. Bibliyotèk estanda a bay fonksyon pou I/O asynchrone, jesyon pwosesis, anrejistreman, profilage, ak jesyon pake, pami lòt bagay;
  • Sezisman dinamik: Langaj la pa mande pou definisyon klè nan kalite pou varyab, pa analoji ak langaj pwogramasyon scripting. Sipòte mòd entèaktif;
  • Kapasite opsyonèl pou presize kalite yo klèman;
  • Sentaks ki ekselan pou kalkil nimerik, kalkil syantifik, sistèm aprantisaj machin ak vizyalizasyon done. Sipò pou anpil kalite done nimerik ak zouti pou paralelize kalkil yo.
  • Kapasite dirèkteman rele fonksyon nan bibliyotèk C san kouch adisyonèl.

Gwo chanjman nan Julia 1.9:

  • Nouvo karakteristik lang
    • Pèmèt devwa yo fèt nan yon lòt modil lè l sèvi avèk "setproperty!(::Module, ::Symbol, x)".
    • Yo pèmèt plizyè devwa ki pa nan pozisyon final la. Pa egzanp, kòd "a, b..., c = 1, 2, 3, 4" pral trete kòm "a = 1; b…, = 2, 3; c = 4". Sa a se okipe atravè Base.split_rest.
    • Literal karaktè sèl kounye a sipòte menm sentaks ak literal fisèl; sa yo. Sentaks la ka reprezante sekans UTF-8 ki pa valab, jan kalite Char la pèmèt.
    • Te ajoute sipò pou spesifikasyon Unicode 15 la.
    • Konbinezon ibrid nan tuple ak tiple karaktè yo nonmen kounye a ka itilize kòm paramèt kalite.
    • Nouvo fonksyon entegre "getglobal(::Module, ::Symbol[, order])" ak "setglobal!(::Module, ::Symbol, x[, order])" pou li ak ekri sèlman nan varyab mondyal yo. Metòd getglobal la ta dwe kounye a pi pito pase metòd getfield pou jwenn aksè nan varyab mondyal yo.
  • Chanjman lang
    • Makro "@invoke" prezante nan vèsyon 1.7 kounye a ekspòte epi li disponib pou itilize. Anplis de sa, kounye a li itilize metòd "Core.Typeof(x)" olye ke "Nenpòt" nan ka kote yo omisyon anotasyon kalite a pou agiman "x". Sa nesesè pou asire ke kalite yo pase kòm agiman yo trete kòrèkteman.
    • Pèmèt ekspòtasyon fonksyon "invokelatest" ak makro "@invokelatest", prezante nan vèsyon 1.7.
  • Amelyorasyon konpilatè / Runtime
    • Siyifikativman redwi tan nan premye ekzekisyon (TTFX - Tan nan premye ekzekisyon). Prekonpile yon pake kounye a estoke kòd natif natal nan "pkgimage", sa vle di ke kòd ki te pwodwi pa pwosesis la prekonpile p ap bezwen rekonpile apre pake a chaje. Ou ka dezaktive mòd pkgimages lè l sèvi avèk opsyon "--pkgimages=no".
    • Pwoblèm konpleksite kwadratik nan enferans kalite yo te fiks, epi enferans itilize mwens memwa an jeneral. Gen kèk ka kwen ki gen fonksyon long otomatikman pwodwi (tankou ModelingToolkit.jl ak ekwasyon diferans pasyèl ak gwo modèl kozatif) konpile pi vit.
    • Apèl ak agiman san kalite konkrè kapab kounye a se Inyon-divize optimize pou piki oswa rezolisyon estatik, menm si gen plizyè kalite kandida diferan pou dispatch. Sa a ka amelyore pèfòmans nan sèten sitiyasyon kote kalite objè yo pa konplètman estatik rezoud, pa estatik rezoud "@nospecialize-d" sit apèl ak evite rekonpilasyon.
    • Tout itilizasyon macro @pure nan modil baz la te ranplase ak Base.@assume_effects.
    • Apèl pou envoke (f, invokesig, args...) ak kalite mwens espesifik pase tipikman yo itilize pou f (args...) pa lakòz pake a dwe rekonpile ankò.
  • Chanjman paramèt liy lòd
    • Sou Linux ak Windows, opsyon "--threads = oto" kounye a eseye detèmine kantite processeurs ki disponib ki baze sou afinite CPU, yon mask anjeneral mete nan anviwònman HPC ak nwaj.
    • Paramèt "--math-mode = rapid" la enfim, olye pou yo li rekòmande yo sèvi ak makro "@fastmath" la, ki te defini klèman semantik.
    • Opsyon "--threads" la kounye a nan fòma "oto | N[,oto|M]", kote M endike kantite fil entèaktif pou kreye (kounye a oto vle di 1).
    • Te ajoute opsyon "—heap-size-hint=" ", ki fikse papòt la apre yo kòmanse koleksyon fatra aktif. Gwosè a ka espesifye nan byte, kilobyte (1000 KB), megabyte (300 MB), oswa gigabyte (1,5 GB).
  • Chanjman nan multithreading
    • "Threads.@spawn" kounye a gen yon premye agiman opsyonèl ak valè ":default" oswa ":interactive". Yon travay entèaktif mande pou latansi repons ki ba epi li fèt pou l kout oswa fè souvan. Travay entèaktif yo pral kouri sou fil entèaktif si yo espesifye lè yo kòmanse Julia.
    • Threads kouri deyò Julia ekzekisyon (tankou soti nan C oswa Java) kapab kounye a rele Julia kòd lè l sèvi avèk "jl_adopt_thread". Sa rive otomatikman lè w ap antre kòd Julia atravè "cfunction" oswa "@ccallable" pwen antre. Kòm yon konsekans, kantite fil kapab kounye a chanje pandan ekzekisyon.
  • Nouvo fonksyon bibliyotèk
    • Nouvo fonksyon "Iterators.flatmap".
    • Nouvo fonksyon "pkgversion(m::Module)" pou jwenn vèsyon pake ki chaje yon modil bay, menm jan ak "pkgdir(m::Module)".
    • Nouvo fonksyon "stack(x)" ki jeneralize "redwi(hcat, x::Vector{<:Vector})" nan nenpòt dimansyon epi ki pèmèt nenpòt iteratè nan iteratè. Metòd "stack(f, x)" jeneralize "mapreduce(f, hcat, x)" epi li pi efikas.
    • Nouvo makro pou analize memwa atribye ba "@allocations", menm jan ak "@allocation", eksepte ke li retounen kantite alokasyon memwa, olye ke gwosè total memwa atribye ba a.
  • Nouvo karakteristik bibliyotèk la
    • "RoundFromZero" kounye a ap travay pou lòt kalite "BigFloat".
    • "Dict" kapab kounye a dwe manyèlman redwi lè l sèvi avèk "sizehint!"
    • "@time" kounye a separeman espesifye pousantaj tan ki pase nan rekonpile metòd envalid.
  • Chanjman nan bibliyotèk estanda a
    • Fikse yon pwoblèm konkou nan metòd iterasyon pou Dict ak lòt objè ki sòti tankou kle(::Dict), valè (::Dict) ak Set. Metòd iterasyon sa yo kapab kounye a rele sou yon Dict oswa yon seri an paralèl pou yon kantite fil illimité, osi lontan ke pa gen okenn aksyon ki modifye diksyonè a oswa seri a.
    • Nègasyon yon fonksyon predikate "!f" kounye a retounen yon fonksyon konpoze "(!) ∘ f" olye pou yo yon fonksyon anonim.
    • Fonksyon tranch dimansyon kounye a travay sou plizyè dimansyon: "eachslice", "eachrow" ak "eachcol" retounen yon objè "Slices" ki pèmèt dispatching bay metòd pi efikas.
    • Te ajoute makro "@kwdef" nan API piblik la.
    • Fiks yon pwoblèm ak lòd operasyon yo nan "fld1".
    • Triyay se kounye a toujou tan ki estab (QuickSort te reamenaje).
    • "Base.splat" se kounye a ekspòte. Valè a retounen se yon kalite "Base.Splat" olye ke yon fonksyon anonim, ki pèmèt li yo dwe pwodiksyon joliman.
  • Manadjè pake
    • "Pakè ekstansyon": Sipò pou chaje yon snippet kòd ki soti nan lòt pake ki chaje nan yon sesyon Julia. Aplikasyon an sanble ak pakè "Requires.jl", men yo sipòte konpatibilite pre-konpilasyon ak paramèt.
  • Bibliyotèk LinearAlgebra
    • Akòz risk pou yo konfizyon ak divizyon ki gen bon konprann nan eleman, yo retire metòd "a/b" ak "b\a" ak "a" ak vektè "b", ki te ekivalan a "a * pinv(b)".
    • Lè w rele BLAS ak LAPACK kounye a itilize "libblastrampoline (LBT)". OpenBLAS yo bay pa default, men yo pa sipòte bati imaj sistèm lan ak lòt bibliyotèk BLAS/LAPACK. Olye de sa, li rekòmande pou itilize mekanis LBT pou ranplase BLAS/LAPACK ak yon lòt seri bibliyotèk ki egziste deja.
    • "lu" sipòte yon nouvo estrateji wotasyon matris, "RowNonZero()", ki chwazi premye eleman wotasyon ki pa zewo pou itilize ak nouvo kalite aritmetik ak pou fòmasyon.
    • "normalize(x, p=2)" kounye a sipòte nenpòt espas vektè nòmalize "x", ki gen ladan eskalè.
    • Nimewo defo BLAS kounye a egal a kantite fil CPU sou achitekti ARM ak mwatye kantite fil CPU sou lòt achitekti.
  • Printf: Retravay mesaj erè pou kòd ki pa gen fòma pou pi bon lizibilite.
  • Profile: Nouvo fonksyon "Profile.take_heap_snapshot(file)", ki ekri yon fichye nan fòma JSON ki baze sou ".heapsnapshot" sipòte nan Chrome.
  • Random: randn ak randexp kounye a travay pou nenpòt kalite AbstractFloat ki defini rand.
  • REPL
    • Peze "Alt-e" konbinezon kle kounye a ouvè opinyon aktyèl la nan editè a. Kontni an (si modifye) pral egzekite lè ou sòti editè a.
    • Kontèks modil aktyèl la aktif nan REPL ka chanje (Principal pa default) lè l sèvi avèk fonksyon "REPL.activate(::Module)" oswa lè w antre nan modil la nan REPL la epi peze konbinezon kle "Alt-m".
    • Mòd "nombred èd memwa" a, ki enprime nimewo pou chak antre ak pwodiksyon epi ki estoke rezilta nòt yo nan Out, ka aktive lè l sèvi avèk "REPL.numbered_prompt!()".
    • Fini onglet montre agiman mo kle ki disponib.
  • SuiteSparse: Deplase kòd pou solisyon "SuiteSparse" nan "SparseArrays.jl". Solvers yo kounye a re-ekspòte pa "SuiteSparse.jl".
  • SparseArrays
    • Solveur "SuiteSparse" yo disponib kounye a kòm submodul "SparseArrays".
    • Mòd pwoteksyon fil UMFPACK ak CHOLMOD yo te amelyore lè yo elimine varyab mondyal yo ak lè l sèvi avèk kadna. Multi-threaded "ldiv!" Objè UMFPACK kounye a ka egzekite san danje.
    • Fonksyon eksperimantal "SparseArrays.allowscalar(::Bool)" pèmèt ou enfim oswa aktive endèks eskalatè nan etalaj ki ra. Fonksyon sa a fèt pou detekte endèks scalar o aza objè "SparseMatrixCSC", ki se yon sous komen pwoblèm pèfòmans.
  • Nouvo mòd failsafe pou swit tès ki mete fen nan yon tès byen bonè nan ka yon echèk oswa erè. Mete swa via “@testset kwarg failfast=true” oswa “export JULIA_TEST_FAILFAST=true”. Sa a se pafwa nesesè nan kouri CI yo resevwa mesaj erè bonè.
  • Dat: Fisèl vid yo pa mal analize kòm valè valab "DateTime", "Dat" oswa "Times" epi olye voye yon "ArgumentError" nan konstrukteur ak analiz, pandan y ap "tryparse" pa retounen anyen.
  • Pake distribye
    • Konfigirasyon pake a (pwojè aktif, "LOAD_PATH", "DEPOT_PATH") se kounye a pwopaje lè yo ajoute pwosesis travayè lokal yo (pa egzanp lè l sèvi avèk "addprocs(N::Int)" oswa lè l sèvi avèk drapo nan liy lòd "--procs = N").
    • "addprocs" pou pwosesis travayè lokal yo kounye a aksepte yon agiman ki rele "env" pou pase varyab anviwònman yo bay pwosesis travayè yo.
  • Unicode: "grafèm(s, m:n)" retounen substring ki soti nan mth rive nan nyèm grafèm nan "s".
  • Pake DelimitedFiles yo te retire nan bibliyotèk sistèm yo epi kounye a distribye kòm yon pake separe ki dwe enstale klèman pou itilize.
  • Depandans ekstèn
    • Nan Linux, vèsyon an nan bibliyotèk sistèm libstdc++ otomatikman detekte epi, si li se pi nouvo, li chaje. Konpòtman chajman ansyen libstdc++ bati-an, kèlkeswa vèsyon sistèm lan, ka retabli lè w mete varyab anviwònman an "JULIA_PROBE_LIBSTDCXX=0".
    • Retire "RPATH" nan binè Julia, ki ka kraze bibliyotèk sou Linux ki pa defini varyab "RUNPATH".
    • Amelyorasyon zouti: Pwodiksyon "MethodError" ak metòd (pa egzanp nan "methods(my_func)") se kounye a fòma ak koulè an akò ak prensip la nan pwodiksyon metòd nan yon tras pil.

    Sous: opennet.ru

Add nouvo kòmantè