Programmataal Julia 1.9 beskikber

De frijlitting fan 'e programmeartaal Julia 1.9 is publisearre, dy't sokke kwaliteiten kombinearret as hege prestaasjes, stipe foar dynamysk typen en ynboude ark foar parallelle programmearring. De syntaksis fan Julia is tichtby MATLAB, en lient guon eleminten fan Ruby en Lisp. De metoade foar snaarmanipulaasje docht tinken oan Perl. De projektkoade wurdt ferspraat ûnder de MIT-lisinsje.

Wichtige funksjes fan 'e taal:

  • Hege prestaasjes: ien fan 'e haaddoelen fan it projekt is prestaasje te berikken tichtby C-programma's. De Julia-kompiler is basearre op it wurk fan it LLVM-projekt en genereart effisjinte native masinekoade foar in protte doelplatfoarms;
  • Unterstützt ferskate programmearring paradigma, ynklusyf eleminten fan objekt-rjochte en funksjonele programmearring. De standert bibleteek jout ûnder oare funksjes foar asynchronous I/O, proses kontrôle, logging, profilearring, en pakket behear;
  • Dynamysk typen: de taal fereasket gjin eksplisite definysje fan typen foar fariabelen, fergelykber mei skriptprogrammearrings. Ynteraktive modus stipe;
  • Opsjonele mooglikheid om eksplisyt soarten oantsjutte;
  • In syntaksis ideaal foar numerike berekkenjen, wittenskiplike berekkenjen, masine learen, en gegevensfisualisaasje. Stipe foar in protte numerike gegevenstypen en ark foar parallelisaasje fan berekkeningen.
  • De mooglikheid om funksjes direkt op te roppen fan C-biblioteken sûnder ekstra lagen.

Grutte feroaringen yn Julia 1.9:

  • Nije taalfunksjes
    • Tastean dat opdrachten makke wurde yn in oare module mei "setproperty!(::Module, ::Symbol, x)".
    • Meardere opdrachten net yn 'e definitive posysje binne tastien. Bygelyks, de tekenrige "a, b ..., c = 1, 2, 3, 4" wurdt ferwurke as "a = 1; b..., = 2, 3; c = 4". Dit wurdt ôfhannele fia Base.split_rest.
    • Literalen fan ien karakter stypje no deselde syntaksis as letterlike tekenrige; dy. De syntaksis kin ûnjildige UTF-8-sekwinsjes fertsjintwurdigje, lykas tastien troch it Char-type.
    • Stipe tafoege foar Unicode 15-spesifikaasje.
    • Neste kombinaasjes fan tuples en neamd karakter tuples kinne no brûkt wurde as type parameters.
    • Nije ynboude funksjes "getglobal(::Module, ::Symbol[, folchoarder])" en "setglobal!(::Module, ::Symbol, x[, folchoarder])" foar lêzen en skriuwen eksklusyf nei globale fariabelen. De getglobale metoade moat no de foarkar krije oer de getfield-metoade foar tagong ta globale fariabelen.
  • Feroarings yn taal
    • De "@invoke" makro yntrodusearre yn ferzje 1.7 is no eksportearre en beskikber foar gebrûk. Dêrneist brûkt it no de "Core.Typeof(x)" metoade ynstee fan "Elk" yn it gefal dêr't de type annotaasje is weilitten foar it "x" argumint. Dit is nedich om te soargjen dat typen trochjûn as arguminten korrekt wurde ferwurke.
    • Ynskeakele eksport fan 'e "invokelatest" funksje en de "@invokelatest" makro, yntrodusearre yn ferzje 1.7.
  • Ferbetterings fan kompilator / runtime
    • Fermindere tiid foar earste útfiering signifikant (TTFX - Tiid foar earste útfiering). It foarkompilearjen fan in pakket slaat no native koade op yn "pkgimage", wat betsjut dat koade generearre troch it foarkompilaasjeproses net opnij hoege te kompilearjen neidat it pakket is laden. It brûken fan pkgimages modus kin útskeakele wurde mei de "--pkgimages=no" opsje.
    • It bekende kwadratyske kompleksiteitkwestje fan typekonferinsje is fêst, en konklúzje brûkt minder ûnthâld yn 't algemien. Guon rânegefallen mei automatysk oanmakke lange funksjes (lykas ModelingToolkit.jl mei parsjele differinsjaalfergelikingen en grutte kausale modellen) kompilearje folle flugger.
    • Oproppen mei arguminten sûnder konkrete soarten kinne no Uny-splitsing wurde optimalisearre foar ynjeksje as statyske resolúsje, sels as d'r meardere kandidaten fan ferskillende soarten binne foar ferstjoeren. Dit kin de prestaasjes ferbetterje yn bepaalde situaasjes wêr't objekttypen net folslein statysk oplost binne, troch statysk op te lossen "@nospecialize-d" opropsites en it foarkommen fan rekompilaasje.
    • Alle gebrûk fan 'e @pure makro yn 'e Basismodule is ferfongen troch Base.@assume_effects.
    • Oproppen om op te roppen (f, invokesig, args...) mei minder spesifike typen dan gewoanlik brûkt foar f(args...) feroarsaakje net mear dat it pakket opnij kompilearre wurdt.
  • Feroarings oan kommandorigelopsjes
    • Op Linux en Windows besiket de opsje "--threads=auto" no it beskikbere oantal processors te bepalen op basis fan CPU-affiniteit, in masker dat typysk ynsteld is yn HPC- en wolkomjouwings.
    • De parameter "--math-mode=fast" is útskeakele, ynstee dêrfan wurdt it oanrikkemandearre om de "@fastmath" makro te brûken, dy't dúdlik definieare semantyk hat.
    • De opsje "--threads" is no yn it formaat "auto | N[,auto|M]", wêrby't M it oantal ynteraktive diskusjes oanjout om te meitsjen (op it stuit betsjut auto 1).
    • Opsje tafoege "—heap-size-hint =" ", dy't de drompel ynstelt wêrnei't aktive garbage collection begjint. De grutte kin oantsjutte wurde yn bytes, kilobytes (1000 KB), megabytes (300 MB), of gigabytes (1,5 GB).
  • Feroarings yn multithreading
    • "Threads.@spawn" hat no in opsjoneel earste argumint mei de wearde ":standert" of ": ynteraktyf". In ynteraktive taak fereasket lege responslatens en is ûntworpen om koart te wêzen as faak útfierd. Ynteraktive taken sille rinne op ynteraktive diskusjes as se wurde oantsjutte by it starten fan Julia.
    • Diskusjes dy't bûten de Julia-runtime rinne (lykas fan C of Java) kinne no Julia-koade neame mei "jl_adopt_thread". Dit bart automatysk by it ynfieren fan Julia-koade fia "cfunction" of it yngongspunt "@ccallable". As konsekwinsje kin it oantal threads no wizigje tidens de útfiering.
  • Nije bibleteek funksjes
    • Nije funksje "Iterators.flatmap".
    • Nije funksje "pkgversion(m::Module)" om de ferzje fan it pakket te krijen dat in opjûne module laden hat, fergelykber mei "pkgdir(m::Module)".
    • Nije funksje "stack(x)" dy't "reduce(hcat, x::Vector{<:Vector})" generalisearret nei elke dimensje en elke iterator fan iterators lit. De metoade "stapel(f, x)" generalisearret "mapreduce(f, hcat, x)" en is effisjinter.
    • Nije makro foar analysearjen tawiisd ûnthâld "@allocations", fergelykber mei "@allocated", útsein dat it jout it oantal ûnthâld allocations, ynstee fan de totale grutte fan it tawiisd ûnthâld.
  • Nije bibleteek funksjes
    • "RoundFromZero" wurket no foar oare typen dan "BigFloat".
    • "Dict" kin no manuell fermindere wurde mei "sizehint!"
    • "@time" spesifisearret no apart it persintaazje tiid bestege oan it opnij kompilearjen fan ûnjildige metoaden.
  • Feroarings oan de standert bibleteek
    • Fixed in concurrency probleem yn iteraasje metoaden foar Dict en oare ôflaat objekten lykas kaaien (:: Dict), wearden (:: Dict) en Set. Dizze iteraasjemetoaden kinne no parallel oanroppen wurde op in Dict of Set foar in ûnbeheind oantal triedden, salang't d'r gjin aksjes binne dy't it wurdboek of set wizigje.
    • It negearjen fan in predikaatfunksje "!f" jout no in gearstalde funksje "(!) ∘ f" werom yn stee fan in anonime funksje.
    • Diminsje slice-funksjes wurkje no oer meardere dimensjes: "eachslice", "eachrow" en "eachcol" jouwe in "Slices"-objekt werom dat ferstjoering mooglik makket om effisjintere metoaden te leverjen.
    • De makro "@kwdef" tafoege oan de iepenbiere API.
    • In probleem reparearre mei de folchoarder fan operaasjes yn "fld1".
    • Sortearjen is no altyd tiidstabyl (QuickSort is opnij ûntwurpen).
    • "Base.splat" wurdt no eksportearre. De weromwearde is in type "Base.Splat" yn stee fan in anonime funksje, wêrtroch it moai útjûn wurde kin.
  • Pakket manager
    • "Package Extensions": Stipe foar it laden fan in koadefragment fan oare pakketten laden yn in Julia-sesje. De applikaasje is fergelykber mei it pakket "Requires.jl", mar kompilaasje foar pre-kompilaasje en ynstellings wurde stipe.
  • Linear Algebra Library
    • Fanwege it risiko fan betizing mei elemint-wize ferdieling, fuortsmiten de "a/b" en "b\a" metoaden mei scalar "a" en vector "b", dy't lykweardich oan "a * pinv (b)".
    • Oprop BLAS en LAPACK brûkt no "libblastrampoline (LBT)". OpenBLAS wurdt standert levere, mar it bouwen fan it systeemôfbylding mei oare BLAS / LAPACK-biblioteken wurdt net stipe. Ynstee, it is oan te rieden om te brûken de LBT meganisme te ferfangen BLAS / LAPACK mei in oare besteande set fan biblioteken.
    • "lu" stipet in nije matrix rotaasje strategy, "RowNonZero ()", dy't selektearret de earste net-nul rotaasje elemint foar gebrûk mei nije rekenkundige typen en foar training doelen.
    • "normalize(x, p=2)" stipet no elke normalisearre fektorromte "x", ynklusyf skalaren.
    • It standert oantal BLAS-threads is no gelyk oan it oantal CPU-threads op ARM-arsjitektuer en de helte fan it oantal CPU-threads op oare arsjitektuer.
  • Printf: Ferwurke flaterberjochten foar ferkeard opmakke strings foar bettere lêsberens.
  • Profyl: Nije funksje "Profile.take_heap_snapshot(file)", dy't in bestân skriuwt yn it JSON-basearre ".heapsnapshot"-formaat stipe yn Chrome.
  • Random: randn en randexp wurkje no foar elk AbstractFloat-type dat rand definiearret.
  • REPL
    • Troch op de toetskombinaasje "Alt-e" te drukken iepenet no de aktuele ynfier yn de bewurker. De ynhâld (as wizige) sil útfierd wurde as jo de bewurker ferlitte.
    • De hjoeddeiske module kontekst aktyf yn de REPL kin feroare wurde (Main standert) mei help fan de funksje "REPL.activate(::Module)" of troch it ynfieren fan de module yn de REPL en drukke op de kaai kombinaasje "Alt-m".
    • De "nûmere prompt"-modus, dy't nûmers foar elke ynfier en útfier printet en de skoare resultaten opslacht yn Out, kin aktivearre wurde mei "REPL.numbered_prompt!()".
    • Labelfoltôging toant beskikbere kaaiwurdarguminten.
  • SuiteSparse: Koade foar de "SuiteSparse"-oplosser ferpleatst nei "SparseArrays.jl". Oplossers wurde no opnij eksportearre troch "SuiteSparse.jl".
  • SparseArrays
    • "SuiteSparse" solvers binne no beskikber as "SparseArrays" submodules.
    • UMFPACK en CHOLMOD thread beskerming modi binne ferbettere troch it eliminearjen fan globale fariabelen en it brûken fan slûzen. Multi-threaded "ldiv!" UMFPACK-objekten kinne no feilich útfierd wurde.
    • De eksperimintele funksje "SparseArrays.allowscalar(::Bool)" lit jo skalêre yndeksearring fan sparse arrays útskeakelje of ynskeakelje. Dizze funksje is ûntworpen om willekeurige skalêre yndeksearring fan "SparseMatrixCSC"-objekten te detektearjen, dat is in mienskiplike boarne fan prestaasjesproblemen.
  • Nije failsafe modus foar test suites dy't beëiniget in test run betiid yn it gefal fan in flater of flater. Stel of fia "@testset kwarg failfast=true" of "export JULIA_TEST_FAILFAST=true". Dit is soms nedich yn CI-runs om flaterberjochten betiid te ûntfangen.
  • Datums: Lege stringen wurde net mear ferkeard parseard as jildige "DateTime", "Dates" of "Times" wearden en smyt ynstee in "ArgumentError" yn constructors en parsing, wylst "tryparse" neat werom jout.
  • Pakket ferdield
    • De pakketkonfiguraasje (aktyf projekt, "LOAD_PATH", "DEPOT_PATH") wurdt no propagearre by it tafoegjen fan lokale arbeiderprosessen (bygelyks mei "addprocs(N::Int)" of it brûken fan de kommandorigelflagge "--procs=N").
    • "addprocs" foar lokale arbeidersprosessen akseptearret no in argumint mei de namme "env" om omjouwingsfariabelen troch te jaan oan arbeidersprosessen.
  • Unicode: "graphemes(s, m:n)" jout de substring werom fan 'e mth nei nth graphemes yn "s".
  • It DelimitedFiles-pakket is fuorthelle út de systeembiblioteken en wurdt no ferspraat as in apart pakket dat eksplisyt ynstalleare moat om te brûken.
  • Eksterne ôfhinklikens
    • Yn Linux wurdt de ferzje fan 'e libstdc ++ systeembibleteek automatysk ûntdutsen en, as it nijer is, wurdt it laden. It âlde libstdc++ ynboude laadgedrach, nettsjinsteande systeemferzje, kin wersteld wurde troch de omjouwingsfariabele "JULIA_PROBE_LIBSTDCXX=0" yn te stellen.
    • "RPATH" fuortsmiten fan 'e julia binary, dy't bibleteken op Linux kin brekke dy't de "RUNPATH" fariabele net kinne definiearje.
    • Toolferbetterings: De útfier fan "MethodError" en metoaden (bygelyks fan "methods(my_func)") is no opmakke en kleure yn oerienstimming mei it prinsipe fan útfier fan metoaden yn in stack trace.

    Boarne: opennet.ru

Add a comment