Programmeerimiskeel Julia 1.9 on saadaval

Avaldatud programmikeele Julia 1.9 versioon, mis ühendab endas kõrge jõudluse, dünaamilise tüübi toe ja sisseehitatud tööriistad paralleelseks programmeerimiseks. Julia süntaks sarnaneb MATLAB-iga, laenates mõningaid elemente Ruby ja Lispist. Stringide manipuleerimise meetod meenutab Perl'i. Projekti kood on litsentseeritud MIT litsentsi alusel.

Keele põhijooned:

  • Kõrge jõudlus: projekti üheks peamiseks eesmärgiks on jõudluse saavutamine, mis on lähedane C keeles kirjutatud programmidele. Julia kompilaator põhineb LLVM projektide arendustel ja genereerib tõhusat natiivset masinkoodi mitmesugustele sihtplatvormidele;
  • Toetab erinevaid programmeerimisparadigmasid, sealhulgas objekte orienteeritud ja funktsionaalset programmeerimist. Standardraamatukogu sisaldab funktsioone, sealhulgas asünkroonseks sisendiks/väljundiks, protsesside juhtimiseks, logimise, profileerimise ja paketihaldamise jaoks;
  • Dünaamiline tüpiseerimine: keel ei nõua muutujate tüüpide selget määratlemist, sarnaselt skriptikeeltele. Toetatakse interaktiivset töörežiimi;
  • Valikuline võimalus tüüpide selgeks määramiseks;
  • Süntaks, mis sobib suurepäraselt arvutuste, teaduslike arvutuste, masinõppe süsteemide ja andmete visualiseerimise jaoks. Toetatakse mitmeid arvandmete type ja lahendusi arvutuste paralleliseerimiseks.
  • Otsene funktsioonide kutsumise võimalus C-keele raamatukogudest ilma täiendavate vahelkihtideta.

Peamised muudatused Julia 1.9-is:

  • Keele uued võimalused
    • Muudatuste tegemine teises moodulis on lubatud läbi "setproperty!(::Module, ::Symbol, x)".
    • Lubatud on mitme väärtuse määramine mitte lõpp-positsioonis. Näiteks rida "a, b…, c = 1, 2, 3, 4" töödeldakse kui "a = 1; b…, = 2, 3; c = 4". See töödeldakse läbi Base.split_rest.
    • Üksikute sümbolite literäärid toetavad nüüd sama süntaksit kui stringi literäärid; st. süntaks võib esindada kehtetuid UTF-8 järjekordi, nagu lubatud Char tüübi puhul.
    • Lisatud tuge Unicode 15 spetsifikatsioonile.
    • Nüüd on sisemised tuple kombineeringud ja nimetatud tuple sümbolid saadaval tüübi parameetritena.
    • Uued sisseehitatud funktsioonid „getglobal(::Module, ::Symbol[, order])“ ja „setglobal!(::Module, ::Symbol, x[, order])“ globaalsete muutujate lugemiseks ja kirjutamiseks. Funktsiooni getglobal kasutamine peaks nüüd olema eelistatavam globaalsete muutujate juurde pääsemiseks võrreldes meetodiga getfield.
  • Keeles tehtud muudatused
    • Makros „@invoke“, mis tutvustati versioonis 1.7, on nüüd eksporditav ja saadaval kasutamiseks. Samuti kasutab see nüüd meetodit „Core.Typeof(x)“ selle asemel, et kasutada „Any“, kui tüübi annotatsioon argumendiks „x“ on jäetud vahele. See on vajalik, et tagada argumentide kaudu edastatud tüüpide korrektne töötlemine.
    • Ekspordatud on funktsioon „invokelatest“ ja makros „@invokelatest“, mis ilmusid versioonis 1.7.
  • Kompilaatori/ajaviimese parandused
    • Esialgselt on oluliselt lühenenud esmakordse täitmise aeg (TTFX — Time to first execution). Paketi eelkompileerimine salvestab nüüd masinkoodi 'pkgimage', mis tähendab, eteelkompileerimise käigus genereeritud kood ei vaja pärast paketi laadimist uuesti kompileerimist. 'pkgimages' režiimi kasutamine on võimalik välja lülitada valikuga '—pkgimages=no'.
    • On lahendatud tuntud probleem, mis seondub kvadratilise keerukuse tüüpide tuletamisega, ja üldiselt kasutatakse vähem mälu. Mõned äärealade juhtumid automaatselt genereeritud pikkade funktsioonidega (nt ModelingToolkit.jl osaliste diferentsiaalvõrrandite ja suurte põhjuslike mudelitega) kompileeritakse palju kiiremini.
    • Argumentidega kõned ilma konkreetsete tüüpide määratlemiseta võivad nüüd olla optimeeritud Union-splitting meetodiga, et võimaldada sisestamist või staatilist määramist, isegi kui mitmeid erineva tüübi kandidaate on saadaval edastamiseks. See võib parandada jõudlust teatud olukordades, kus objektide tüübid ei ole täielikult staatiliselt määratletud, tänu staatilisele määratlemisele, mis ei erista „@nospecialize-d” kutsete saite ja vältides uuesti kompileerimist.
    • Kõik @pure makro kasutusvariandid Base moodulis asendatakse Base.@assume_effects.
    • Kutsete invoke(f, invokesig, args…) puhul, mille tüübid on vähem konkreetsed kui tavaliselt f(args…) jaoks, ei põhjusta enam pakettide uuesti kompileerimist.
  • Käsurea parameetrite muudatused
    • Linuxi ja Windowsi puhul püüab parameeter „—threads=auto” nüüd määrata saadaval olevate protsessorite arvu, tuginedes CPU affinity'le, mille mask on tavaliselt seatud kõrge jõudlusega arvutuskeskkondades ja pilvekeskkondades.
    • Parameeter „—math-mode=fast” on keelatud, selle asemel soovitatakse kasutada makrot „@fastmath”, millel on selgelt määratletud semantika.
    • Parameeter «—threads» on nüüd vormingus «auto | N[,auto|M]», kus M näitab loodavate interaktiivsete niitide arvu (praegu tähendab auto 1).
    • Lisatud on valik «—heap-size-hint=<size>», mis seab künnise, pärast mida algab aktiivne prügikoristus. Suurus võib olla märgitud baitides, kilobaitides (1000 KB), megabaitides (300 MB) või gigabaitides (1,5 GB).
  • Muutused mitme niidi käsitluses
    • «Threads.@spawn» on nüüd valikuline esimene argument väärtusega «:default» või «:interactive». Interaktiivne ülesanne nõuab madalat viivitust ja on mõeldud olema lühike või sageli teostatav. Interaktiivsed ülesanded täidetakse interaktiivsetes niitides, kui need on käivitamisel määratud.
    • Niidid, mis käivitatakse väljaspool Julia käituskeskkonda (näiteks C-st või Java-st), saavad nüüd kutsuda Julia koodi, kasutades «jl_adopt_thread». See toimub automaatselt Julia koodi sisestamisel «cfunction» või sisendi punktiga «@ccallable». Selle tulemusena võib niitide arv nüüd täitmise ajal muutuda.
  • Uued raamatukogu funktsioonid
    • Uus funktsioon «Iterators.flatmap».
    • Uus funktsioon „pkgversion(m::Module)”, mis saadakse paketi versioon, mille see moodul laadis, sarnaselt „pkgdir(m::Module)”.
    • Uus funktsioon „stack(x)”, mis üldistab „reduce(hcat, x::Vector{<:Vector})” igas mõõtmes ja lubab igasuguseid iteratoreid. Meetod „stack(f, x)” üldistab „mapreduce(f, hcat, x)” ja on efektiivsem.
    • Uus makro mälu jaotuse analüüsimiseks „@allocations”, mis on analoogne „@allocated”, kuid tagastab mälu jaotamise operatsioonide arvu, mitte jaotatud mälu kogusumma.
  • Uued võimalused raamatukogus
    • „RoundFromZero” töötab nüüd ka tüüpide puhul, mis ei ole „BigFloat”.
    • „Dict” saab nüüd käsitsi vähendada „sizehint!” abil.
    • „@time” näitab nüüd eraldi protsenti ajast, mis veidrate meetodite ümberkompileerimisele kulus.
  • Standardteegis muudatused
    • Parandatud on samal ajal juurdepääsu probleemid iteratsioonimeetodites Dict ja teiste tuletatud objektide puhul, nagu keys(::Dict), values(::Dict) ja Set. Neid iteratsioonimeetodeid saab nüüd Dict või Set puhul käivitada paralleelselt piiramatute võrkude korral, tingimusel et ei toimu sõnastiku või kogumi muutmist.
    • Predikaatfunktsiooni „!f“ eitamine tagastab nüüd komposiitfunktsiooni „(!) ∘ f“ anoonüümse funktsiooni asemel.
    • Dimensioonilõikefunktsioonid töötavad nüüd mitmes mõõtmes: „eachslice“, „eachrow“ ja „eachcol“ tagastavad objekti „Slices“, mis võimaldab töötlust, et pakkuda tõhusamaid meetodeid.
    • Avalikku API-sse on lisatud makro „@kwdef“.
    • Probleem toimingute järjekorraga „fld1“ on parandatud.
    • Sorteerimine on nüüd alati ajaliselt stabiilne (QuickSort on ümber töötatud).
    • „Base.splat“ on nüüd eksporditud. Tagastatav väärtus esindab tüüpi „Base.Splat“, mitte anoonüümset funktsiooni, mis võimaldab seda ilusasti välja printida.
  • Pakkide haldaja
    • „Package Extensions“: toetab koodifragmendi laadimist teistest pakettidest, mis laaditakse Julia seansis. Rakendamine on sarnane paketiga „Requires.jl“, kuid toetatakse eelkompileerimist ja seadistuste ühilduvust.
  • Lineaaralgebra raamatukogu
    • Segaduse vältimiseks elemendi järgi jagamise osas on eemaldatud meetodid „a / b“ ja „b \ a“, kus skalaari „a“ ja vektori „b“ vahel olid need võrdväärsed „a * pinv(b)“.
    • BLAS-i ja LAPACK-i kutsumiseks kasutatakse nüüd "libblastrampoline (LBT)". OpenBLAS tarnitakse vaikimisi, kuid süsteemipildi koostamine muude BLAS/LAPACK teekidega ei ole toetatud. Soovitav on kasutada LBT mehhanismi BLAS/LAPACK asendamiseks mõne muu saadaval oleva teegiga.
    • "lu" toetab uut maatriksi pööramise strateegiat "RowNonZero()", mis valib pööramiseks kasutamiseks esimese nullist erineva elemendi, et kasutada seda uute aritmeetiliste tüüpidega ja õppimise eesmärkidel.
    • "normalize(x, p=2)" toetab nüüd mis tahes normeeritud vektoriruumi "x", sealhulgas skalaarid.
    • BLAS-i lõimede arv vaikimisi on nüüd võrdne CPU lõimede arvuga ARM-arkiitektuuris ja poolega CPU lõimede arvust teistel arkiitektuuridel.
  • Printf: Veateated vale formaadi stringide kohta on paremaks loetavuseks ümber kirjutatud.
  • Profile: Uus funktsioon "Profile.take_heap_snapshot(file)", mis salvestab faili "heapsnapshot" formaadis, mis põhineb JSON-il, toetatud Chrome'is.
  • Random: randn ja randexp töötavad nüüd iga AbstractFloat tüübi jaoks, mis defineerib rand.
  • REPL
    • Klaviatuuri kombinatsioon «Alt-e» avab nüüd praeguse sisendi redigeerija. Sisu (kui see on muudetud) täidetakse redigeerijast väljudes.
    • Aktiveeritud REPL-i praegust konteksti (vaikimisi on see Main) saab muuta funktsiooni «REPL.activate(::Module)» abil või sisestades mooduli REPL-i ja vajutades klaviatuuri kombinatsiooni «Alt-m».
    • Numbritega sisendeid ja väljundeid kuva ja tulemusi Out'i salvestav «numbri näidik» režiimi saab aktiveerida funktsiooniga «REPL.numbered_prompt!()».
    • Kuna tabulatsiooniga saab valida, kuvatakse kõik võimalikud võtmeargumendid.
  • SuiteSparse: «SuiteSparse» lahendaja kood on nüüd «SparseArrays.jl»-s. Lahendajad eksporditakse nüüd uuesti «SuiteSparse.jl»-s.
  • SparseArrays
    • «SuiteSparse» lahendajad on nüüd saadaval «SparseArrays» alamoodulitena.
    • UMFPACK ja CHOLMOD voogude kaitse režiimid on paranenud, eemaldades globaalsetes muutujates ja kasutades lukke. UMFPACK objekti «ldiv!» mitme töötluse täitmine on nüüd ohutu.
    • Eksperimentaalne funktsioon „SparseArrays.allowscalar(::Bool)” võimaldab välja lülitada või sisse lülitada skalaarsest indekseerimist hajutatud massiivides. See funktsioon on mõeldud hajutatud objektide „SparseMatrixCSC” juhusliku skalaarsest indekseerimise avastamiseks, mis on levinud probleemide allikas jõudluses.
  • Uus tõrke- ja rikekindel režiim testikomplektidele, mis lõpetab testimise varakult, kui tekib rike või viga. Seda saab seadistada kas „@testset kwarg failfast=true” abil või „export JULIA_TEST_FAILFAST=true”. See on vajalik CI käivitustes vigade teatamiseks varakult.
  • Kuupäevad: Tühjad read ei analüüsita enam valesti kui kehtivad „DateTime”, „Dates” või „Times” väärtused ja selle asemel antakse konstruktorites ja süntaksianalüüsis viga „ArgumentError”, samas kui „tryparse” ei tagasta midagi.
  • Pakett Distributed
    • Paketi konfiguratsioon (aktiivne projekt, „LOAD_PATH”, „DEPOT_PATH”) levib nüüd kohalike tööprotsesside lisamisega (näiteks kasutades „addprocs(N::Int)” või käsurida „—procs=N” kaudu).
    • «addprocs» kohalike tööprotsesside jaoks aktsepteerib nüüd argumenti nimega «env» keskkonnamuutujate edastamiseks tööprotsessidele.
  • Unicode: «graphemes(s, m:n)» tagastab alampäringu m-ndast kuni n-nda grafeemini «s» sees.
  • Pakett DelimitedFiles on eemaldatud süsteemsetest raamistikutest ja seda levitatakse nüüd eraldi paketina, mis tuleb selgesõnaliselt installida kasutamiseks.
  • Välist sõltuvust
    • Linuxis määratakse süsteemi libstdc++ versioon automaatselt ja kui see on uuem, siis see laaditakse. Vana käitumise taastamiseks, kus integreeritud libstdc++ laaditakse sõltumatult süsteemi versioonist, tuleb seadistada keskkonnamuutuja «JULIA_PROBE_LIBSTDCXX=0».
    • Binaarfailist julia on eemaldatud «RPATH», mis võib Linuxis põhjustada raamatukogude rikutud olekuid, mis ei ole suutnud määrata muutuja «RUNPATH».
    • Tööriistade täiustused: «MethodError» ja meetodite väljund (näiteks «methods(my_func)») on nüüd vormistatud ja värviliselt esitatud vastavalt meetodite väljastamise põhimõtetele virnastamise jälgimisel.

    Allikas: opennet.ru

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster