Pieejama programmēŔanas valoda Julia 1.9

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

Pievieno komentāru