Programmeertaal Julia 1.9 beskikbaar

Die vrystelling van die programmeertaal Julia 1.9 is gepubliseer, wat eienskappe soos hoë werkverrigting, ondersteuning vir dinamiese tik en ingeboude gereedskap vir parallelle programmering kombineer. Die sintaksis van Julia is naby MATLAB, met 'n paar elemente geleen van Ruby en Lisp. Die string manipulasie metode herinner aan Perl. Die projekkode word onder die MIT-lisensie versprei.

Belangrike kenmerke van die taal:

  • Hoë prestasie: een van die sleuteldoelwitte van die projek is om prestasie naby aan C-programme te behaal. Die Julia-samesteller is gebaseer op die LLVM-projek en genereer doeltreffende inheemse masjienkode vir baie teikenplatforms;
  • Ondersteuning vir verskeie programmeringsparadigmas, insluitend elemente van objekgeoriënteerde en funksionele programmering. Die standaardbiblioteek verskaf funksies vir onder meer asinchroniese I/O, prosesbestuur, logboekhouding, profilering en pakketbestuur;
  • Dinamiese tik: Die taal vereis nie 'n eksplisiete definisie van tipes vir veranderlikes nie, in analogie met skrifprogrammeertale. Ondersteun interaktiewe modus;
  • Opsionele vermoë om tipes eksplisiet te spesifiseer;
  • Sintaksis wat uitstekend is vir numeriese berekeninge, wetenskaplike berekeninge, masjienleerstelsels en datavisualisering. Ondersteuning vir baie numeriese datatipes en gereedskap vir parallellisering van berekeninge.
  • Vermoë om funksies direk vanaf C-biblioteke op te roep sonder bykomende lae.

Groot veranderinge in Julia 1.9:

  • Nuwe taalkenmerke
    • Laat toe dat opdragte in 'n ander module gemaak word deur "setproperty!(::Module, ::Symbol, x)" te gebruik.
    • Meervoudige opdragte wat nie in die finale posisie is nie, word toegelaat. Byvoorbeeld, die string "a, b..., c = 1, 2, 3, 4" sal verwerk word as "a = 1; b..., = 2, 3; c = 4". Dit word hanteer via Base.split_rest.
    • Enkelkarakterletters ondersteun nou dieselfde sintaksis as stringletters; dié. die sintaksis kan ongeldige UTF-8-reekse verteenwoordig, soos toegelaat deur die Char-tipe.
    • Bygevoeg ondersteuning vir die Unicode 15 spesifikasie.
    • Geneste kombinasies van tupels en benoemde tupels van karakters kan nou as tipe parameters gebruik word.
    • Nuwe ingeboude funksies "getglobal(::Module, ::Simbol[, orde])" en "setglobal!(::Module, ::Symbol, x[, orde])" vir lees en skryf uitsluitlik na globale veranderlikes. Die getglobal-metode moet nou verkies word bo die getfield-metode vir toegang tot globale veranderlikes.
  • Taal verander
    • Die "@invoke"-makro wat in weergawe 1.7 bekendgestel is, is nou uitgevoer en beskikbaar vir gebruik. Dit gebruik ook nou die "Core.Typeof(x)" metode eerder as "Enige" wanneer die tipe annotasie weggelaat word vir die "x" argument. Dit is nodig sodat tipes wat as argumente deurgegee word, korrek verwerk word.
    • Geaktiveerde uitvoer van die "invokelatest" funksie en die "@invokelatest" makro bekendgestel in weergawe 1.7.
  • Samesteller/looptydverbeterings
    • Aansienlik verminderde tyd tot eerste uitvoering (TTFX - Tyd tot eerste uitvoering). Pakketvoorsamestelling stoor nou die oorspronklike kode in "pkgimage", wat beteken dat kode wat tydens voorafsamestelling gegenereer word, nie hersaamgestel hoef te word nadat die pakket gelaai is nie. Die gebruik van pkgimages-modus kan gedeaktiveer word met die "--pkgimages=no" opsie.
    • Die bekende probleem van kwadratiese kompleksiteit van tipe inferensie is vasgestel, en oor die algemeen gebruik die afleiding minder geheue. Sommige randgevalle met outo-gegenereerde lang funksies (soos ModelingToolkit.jl met parsiële differensiaalvergelykings en groot oorsaaklike modelle) kom baie vinniger saam.
    • Oproepe met nie-tipe-spesifieke argumente kan nou Unie-verdeling geoptimaliseer word vir inspuiting of statiese resolusie, selfs al is daar verskeie verskillende tipes versendingskandidate. Dit kan werkverrigting verbeter in sekere situasies waar objektipes nie ten volle staties opgelos word nie, deur "@nospecialize-d" oproepwerwe staties op te los en hersamestelling te vermy.
    • Alle gebruike van die @pure makro in die Basismodule is vervang met Base.@assume_effects.
    • Oproepe om op te roep(f, invokesig, args...) met tipes wat minder spesifiek is as dié wat normaalweg vir f(args...) gebruik word, veroorsaak nie meer dat die pakket hersaamgestel word nie.
  • Command line parameter veranderinge
    • Op Linux en Windows probeer die "--threads=auto"-opsie nou om die beskikbare aantal verwerkers te bepaal gebaseer op SVE-affiniteit, wat 'n masker is wat tipies in HPC- en wolkomgewings gestel word.
    • Die "--math-mode=fast" opsie is gedeaktiveer, in plaas daarvan word dit aanbeveel om die "@fastmath" makro te gebruik, wat goed gedefinieerde semantiek het.
    • Die "--threads" parameter het nou die formaat "auto | N[,outo|M]", waar M die aantal interaktiewe drade spesifiseer om te skep (tans beteken outo 1).
    • Bygevoeg opsie "--hoop-grootte-wenk= ”, wat die drempel stel waarna aktiewe vullisversameling begin. Die grootte kan gespesifiseer word in grepe, kilogrepe (1000 KB), megagrepe (300 MB) of gigagrepe (1,5 GB).
  • Multithreading veranderinge
    • "Threads.@spawn" het nou 'n opsionele eerste argument met die waarde ":default" of ":interactive". 'n Interaktiewe taak vereis lae reaksievertraging en is ontwerp om kort te wees of gereeld uitgevoer te word. Interaktiewe take sal op interaktiewe drade loop as hulle gespesifiseer word wanneer Julia begin word.
    • Threads wat buite die Julia-looptyd (byvoorbeeld vanaf C of Java) bekendgestel is, kan nou Julia-kode oproep deur "jl_adopt_thread" te gebruik. Dit gebeur outomaties wanneer jy Julia-kode invoer deur "cfunction" of die "@ccallable" toegangspunt. Gevolglik kan die aantal drade nou tydens looptyd verander.
  • Nuwe biblioteekfunksies
    • Nuwe "Iterators.flatmap" funksie.
    • Nuwe "pkgversion(m::Module)"-funksie om die weergawe van die pakket te kry wat 'n gegewe module gelaai het, soortgelyk aan "pkgdir(m::Module)".
    • Nuwe "stack(x)"-funksie wat "reduce(hcat, x::Vector{<:Vector})" na enige dimensie veralgemeen en enige iterator van iterators toelaat. Die "stack(f, x)" metode veralgemeen "mapreduce(f, hcat, x)" en is meer doeltreffend.
    • Nuwe makro vir die ontleding van toegekende geheue "@allocations", soortgelyk aan "@allocated", behalwe dat dit die aantal geheue-toekennings terugstuur, nie die totale grootte van die toegekende geheue nie.
  • Nuwe kenmerke van die biblioteek
    • "RoundFromZero" werk nou vir ander tipes as "BigFloat".
    • "Dict" kan nou met die hand afgeskaal word met "sizehint!".
    • "@time" dui nou afsonderlik die persentasie tyd aan wat spandeer word om ongeldige metodes te hersaamstel.
  • Veranderinge in die standaard biblioteek
    • Het 'n gelyktydige probleem in iterasiemetodes vir Dict en ander afgeleide voorwerpe soos sleutels(::Dict), waardes(::Dict) en Set opgelos. Hierdie iterasiemetodes kan nou op 'n Dict of Stel in parallel op 'n onbeperkte aantal drade geroep word, solank daar geen aksies is wat die woordeboek of stel wysig nie.
    • Om die predikaatfunksie "!f" te ontken, gee nou 'n saamgestelde funksie "(!) ∘ f" in plaas van 'n anonieme funksie.
    • Dimensie-snyfunksies werk nou oor verskeie dimensies: "eachslice", "eachrow" en "eachcol" gee 'n "Slices"-voorwerp terug wat versending moontlik maak om doeltreffender metodes te verskaf.
    • Bygevoeg "@kwdef" makro by die publieke API.
    • Het 'n probleem opgelos met die volgorde van bewerkings in "fld1".
    • Sortering is nou altyd tydstabiel (herontwerp QuickSort).
    • "Base.splat" word nou uitgevoer. Die terugkeerwaarde is van die tipe "Base.Splat" eerder as 'n anonieme funksie, wat dit toelaat om mooi afgelei te word.
  • Pakketbestuurder
    • "Pakketuitbreidings": ondersteuning vir die laai van 'n kodebrokkie van ander pakkette wat in 'n Julia-sessie gelaai is. Die toepassing is soortgelyk aan die "Requires.jl"-pakket, maar voorafsamestelling en konfigurasieversoenbaarheid word ondersteun.
  • Lineêre Algebra-biblioteek
    • As gevolg van die risiko van verwarring met elementsgewyse verdeling, is die "a / b" en "b \ a" metodes met skalêre "a" en vektor "b" verwyder, wat gelykstaande was aan "a * pinv(b)".
    • BLAS- en LAPACK-oproepe gebruik nou "libblastrampoline (LBT)". OpenBLAS word by verstek verskaf, maar die bou van 'n stelselbeeld met ander BLAS/LAPACK-biblioteke word nie ondersteun nie. In plaas daarvan word dit aanbeveel om die LBT-meganisme te gebruik om BLAS/LAPACK te vervang met 'n ander beskikbare stel biblioteke.
    • "lu" ondersteun die nuwe "RowNonZero()"-matriksrotasiestrategie, wat die eerste nie-nul-rotasie-element kies vir gebruik met die nuwe rekenkundige tipes en vir opvoedkundige doeleindes.
    • "normaliseer(x, p=2)" ondersteun nou enige genormaliseerde vektorruimte "x", insluitend skalare.
    • Die verstek aantal BLAS-drade is nou gelyk aan die aantal SVE-drade op ARM-argitektuur en die helfte van die aantal SVE-drade op ander argitekture.
  • Printf: Herwerkte foutboodskappe vir misvormde stringe vir beter leesbaarheid.
  • Profiel: Nuwe "Profile.take_heap_snapshot(file)"-funksie wat 'n lêer vasvang in die JSON-gebaseerde ".heapsnapshot"-formaat wat deur Chrome ondersteun word.
  • Random: randn en randexp werk nou vir enige AbstractFloat-tipe wat rand definieer.
  • REPUBLIEK
    • Deur die "Alt-e" sleutelkombinasie te druk, maak nou die huidige invoer in die redigeerder oop. Die inhoud (indien verander) sal uitgevoer word wanneer die redigeerder verlaat.
    • Die huidige modulekonteks wat aktief is in die REPL kan verander word (by verstek is dit Hoof) deur die "REPL.activate(::Module)" funksie of deur die module in die REPL in te voer en die "Alt-m" sleutel te druk kombinasie.
    • Die "genommerde prompt"-modus, wat nommers vir elke invoer en uitvoer druk en die geëvalueerde resultate in Out stoor, kan geaktiveer word met "REPL.numbered_prompt!()".
    • Tabvoltooiing vertoon die beskikbare sleutelwoordargumente.
  • SuiteSparse: Geskuif kode vir "SuiteSparse" oplosser na "SparseArrays.jl". Oplossers word nou weer uitgevoer deur "SuiteSparse.jl".
  • SparseArrays
    • SuiteSparse-oplossers is nou beskikbaar as submodules van SparseArrays.
    • Die UMFPACK- en CHOLMOD-stroombeskermingsmodusse is verbeter deur globale veranderlikes uit te skakel en slotte te gebruik. Multithreaded "ldiv!" UMFPACK-voorwerpe kan nou veilig uitgevoer word.
    • Die eksperimentele funksie "SparseArrays.allowscalar(::Bool)" laat jou toe om skalêre indeksering van yl skikkings te deaktiveer of te aktiveer. Hierdie funksie is ontwerp om ewekansige skalêre indeksering van "SparseMatrixCSC" voorwerpe op te spoor, wat 'n algemene bron van prestasieprobleme is.
  • Nuwe failover-modus vir toetssuites wat 'n toetslopie vroeg beëindig in die geval van 'n mislukking of fout. Stel óf via "@testset kwarg failfast=true" of "export JULIA_TEST_FAILFAST=true". Dit kan nodig wees in CI-bekendstellings om vroeë foutboodskappe te ontvang.
  • Datums: Leë stringe word nie meer verkeerd ontleed as geldige "DatumTime", "Dates" of "Times" waardes en gooi eerder 'n "ArgumentError" fout in konstruktors en ontleding, terwyl "tryparse" niks teruggee nie.
  • Verspreide pakkie
    • Die pakketkonfigurasie (aktiewe projek, "LOAD_PATH", "DEPOT_PATH") word nou gepropageer wanneer plaaslike werkerprosesse bygevoeg word (bv. met "addprocs(N::Int)" of met die opdragreëlvlag "-procs=N").
    • "addprocs" vir plaaslike werkerprosesse neem nou 'n argument genaamd "env" om omgewingsveranderlikes na werkerprosesse oor te dra.
  • Unicode: "grafeme(s, m:n)" gee die substring van mde tot nde grafieke in "s" terug.
  • Die DelimitedFiles-pakket is uit die stelselbiblioteke verwyder en word nou as 'n aparte pakket versprei wat eksplisiet geïnstalleer moet word om gebruik te kan word.
  • Eksterne afhanklikhede
    • Linux bespeur outomaties die weergawe van die stelselbiblioteek libstdc++ en laai dit as dit nuwer is. Die ou gedrag om die ingeboude libstdc++ te laai, ongeag die stelselweergawe, kan herstel word deur die "JULIA_PROBE_LIBSTDCXX=0" omgewingsveranderlike te stel.
    • Verwyder "RPATH" van die julia binary, wat biblioteke op Linux kan breek wat nie die "RUNPATH" veranderlike definieer nie.
    • Gereedskapverbeterings: Die uitvoer van "MethodError" en metodes (byvoorbeeld van "metodes(my_func)") word nou geformateer en gekleur volgens hoe metodes in stapelspore uitgevoer word.

    Bron: opennet.ru

Voeg 'n opmerking