Programméiersprooch Julia 1.9 verfügbar

D'Verëffentlechung vun der Programméierungssprooch Julia 1.9 gouf publizéiert, kombinéiert sou Qualitéite wéi héich Leeschtung, Ënnerstëtzung fir dynamesch Tippen an agebaute Tools fir parallel Programméierung. D'Syntax vu Julia ass no bei MATLAB, mat e puer Elementer aus Ruby a Lisp geléint. D'Stringmanipulatiounsmethod erënnert un Perl. De Projet Code gëtt ënner der MIT Lizenz verdeelt.

Schlëssel Features vun der Sprooch:

  • Héich Leeschtung: Ee vun de Schlësselziler vum Projet ass d'Leeschtung no bei C Programmer z'erreechen. De Julia Compiler baséiert op dem LLVM Projet a generéiert effizienten gebiertege Maschinncode fir vill Zilplattformen;
  • Ënnerstëtzung fir verschidde Programméierungsparadigmen, dorënner Elementer vun objektorientéierter a funktioneller Programméierung. D'Standardbibliothéik bitt Funktiounen fir asynchronen I / O, Prozessmanagement, Logbicher, Profiléierung a Packagemanagement, ënner anerem;
  • Dynamesch Tippen: D'Sprooch erfuerdert keng explizit Definitioun vun Typen fir Variablen, duerch Analogie mat Skriptprogramméierungssproochen. Ënnerstëtzt interaktiv Modus;
  • Optional Fäegkeet fir explizit Typen ze spezifizéieren;
  • Syntax déi exzellent ass fir numeresch Berechnungen, wëssenschaftlech Berechnungen, Maschinnléieresystemer an Datenvisualiséierung. Ënnerstëtzung fir vill numeresch Datentypen an Tools fir paralleliséiere Berechnungen.
  • D'Kapazitéit fir Funktiounen aus C Bibliothéiken direkt ze ruffen ouni zousätzlech Schichten.

Grouss Ännerungen am Julia 1.9:

  • Nei Sprooch Fonctiounen
    • Erlaabt Uerderen an engem anere Modul ze maachen mat "setproperty!(::Module, ::Symbol, x)".
    • Multiple Uerderen net an der definitiver Positioun sinn erlaabt. Zum Beispill gëtt d'String "a, b ..., c = 1, 2, 3, 4" als "a = 1; b..., = 2, 3; c = 4". Dëst gëtt iwwer Base.split_rest gehandhabt.
    • Single Charakter literals ënnerstëtzen elo déi selwecht Syntax wéi String literals; déi. D'Syntax kann ongëlteg UTF-8 Sequenzen representéieren, sou wéi vum Char Typ erlaabt.
    • Zousätzlech Ënnerstëtzung fir d'Unicode 15 Spezifizéierung.
    • Nested Kombinatioune vun tuples an genannt Charakter tuples kann elo als Typ Parameteren benotzt ginn.
    • Nei gebaut-an Funktiounen "getglobal (:: Modul, :: Symbol [, Uerdnung])" an "setglobal! (:: Modul, :: Symbol, x [, Uerdnung])" fir liesen a schreiwen exklusiv op global Verännerlechen. D'getglobal Method soll elo iwwer d'Getfield Method bevorzugt ginn fir Zougang zu globalen Variablen.
  • Sprooch Ännerungen
    • Den "@invoke" Makro agefouert an der Versioun 1.7 ass elo exportéiert a verfügbar fir ze benotzen. Zousätzlech benotzt se elo d'Method "Core.Typeof(x)" anstatt "Any" am Fall wou d'Typannotatioun fir d'"x" Argument ausgelooss gëtt. Dëst ass noutwendeg fir sécherzestellen datt d'Typen déi als Argumenter passéiert sinn korrekt veraarbecht ginn.
    • Aktivéiert Export vun der "invokelatest" Funktioun an dem "@invokelatest" Makro, agefouert an der Versioun 1.7.
  • Compiler / Runtime Verbesserungen
    • Däitlech reduzéiert Zäit bis éischt Ausféierung (TTFX - Zäit bis éischt Ausféierung). Precompiling e Package späichert elo gebierteg Code am "pkgimage", dat heescht datt de Code generéiert vum Precompilatiounsprozess net muss nei kompiléiert ginn nodeems de Package gelueden ass. D'Benotzung vum pkgimages Modus kann mat der "--pkgimages=no" Optioun ausgeschalt ginn.
    • De bekannte quadrateschen Komplexitéitsprobleem vun der Typinferenz gouf fixéiert, an d'Inferenz benotzt manner Erënnerung allgemeng. Puer Rand Fäll mat automatesch generéiert laang Funktiounen (wéi ModelingToolkit.jl mat partiell Differential Equatioune a grouss kausal Modeller) kompiléieren vill méi séier.
    • Uriff mat Argumenter ouni konkret Zorte kënnen elo Unioun-Spaltung fir Injektioun oder statesch Resolutioun optimiséiert ginn, och wann et e puer verschidden Zorte Kandidate fir Versand sinn. Dëst kann d'Performance a bestëmmte Situatiounen verbesseren, wou Objekttypen net ganz statesch opgeléist sinn, andeems se "@nospecialize-d" Uruffplazen statesch opléisen an d'Rekompilatioun vermeiden.
    • All Benotzunge vum @pure Makro am Basismodul goufen duerch Base.@assume_effects ersat.
    • Uriff fir opruffen (f, invokesig, args ...) mat manner spezifeschen Typen wéi typesch fir f (args ...) benotzt ginn net méi datt de Package nei kompiléiert gëtt.
  • Kommando Linn Parameter Ännerungen
    • Op Linux a Windows probéiert d'Optioun "--threads=auto" elo d'verfügbar Unzuel u Prozessoren ze bestëmmen op Basis vun der CPU Affinitéit, eng Mask déi typesch an HPC a Cloud Ëmfeld gesat gëtt.
    • De Parameter "--math-mode=fast" ass ausgeschalt, anstatt deem et recommandéiert ass den "@fastmath" Makro ze benotzen, dee kloer definéiert Semantik huet.
    • D'Optioun "--Threads" ass elo am Format "auto | N[,auto|M]", wou M d'Zuel vun den interaktiven Threads ugeet fir ze kreéieren (aktuell heescht Auto 1).
    • Zousätzlech Optioun "—heap-size-hint =" ", wat d'Schwell setzt, no deem d'aktiv Drecksammlung ufänkt. D'Gréisst kann a Bytes, Kilobytes (1000 KB), Megabytes (300 MB) oder Gigabytes (1,5 GB) spezifizéiert ginn.
  • Ännerungen am Multithreading
    • "Threads.@spawn" huet elo en optionalen éischten Argument mam Wäert ":default" oder ":interaktiv". Eng interaktiv Aufgab erfuerdert geréng Äntwertlatenz an ass entwéckelt fir kuerz ze sinn oder dacks ausgefouert ze ginn. Interaktiv Aufgaben lafen op interaktiven Threads wa se spezifizéiert ginn wann Dir Julia start.
    • Threads, déi ausserhalb der Julia Runtime lafen (wéi vu C oder Java) kënnen elo de Julia Code nennen mat "jl_adopt_thread". Dëst geschitt automatesch wann Dir de Julia Code iwwer "cfunction" oder den "@ccallable" Entréespunkt agitt. Als Konsequenz kann d'Zuel vun den Threads elo während der Ausféierung änneren.
  • Nei Bibliothéik Funktiounen
    • Nei Funktioun "Iterators.flatmap".
    • Nei Funktioun "pkgversion(m::Module)" fir d'Versioun vum Package ze kréien, deen e bestëmmte Modul gelueden huet, ähnlech wéi "pkgdir(m::Module)".
    • Nei Funktioun "Stack (x)" déi generaliséiert "reduce (hcat, x::Vector {<:Vector})" zu all Dimensioun an erlaabt all Iterator vun Iteratoren. D'"Stack (f, x)" Method generaliséiert "mapreduce (f, hcat, x)" an ass méi effizient.
    • Neie Makro fir d'Analyséiere vun zougewisen Erënnerung "@allocations", ähnlech wéi "@allocated", ausser datt et d'Zuel vun den Erënnerungsallokatiounen zréckkënnt, anstatt d'Gesamtgréisst vun der zougewisener Erënnerung.
  • Nei Fonctiounen vun der Bibliothéik
    • "RoundFromZero" funktionnéiert elo fir aner Aarte wéi "BigFloat".
    • "Dict" kann elo manuell reduzéiert ginn mat "Sizehint!"
    • "@Zäit" spezifizéiert elo separat de Prozentsaz vun der Zäit fir ongülteg Methoden ze kompiléieren.
  • Ännerungen un der Standardbibliothéik
    • Fixéiert e Concurrency Thema an Iteratiounsmethoden fir Dict an aner ofgeleet Objekter wéi Schlësselen (:: Dict), Wäerter (:: Dict) a Set. Dës Iteratiounsmethoden kënnen elo op engem Dict oder Set parallel fir eng onlimitéiert Unzuel u Threads genannt ginn, soulaang et keng Aktiounen sinn déi d'Wörterbuch oder Set änneren.
    • Negatioun vun enger Prädikatfunktioun "!f" gëtt elo eng Kompositfunktioun "(!) ∘ f" zréck anstatt eng anonym Funktioun.
    • Dimensioun Slice Funktiounen funktionnéieren elo iwwer verschidde Dimensiounen: "Eachslice", "Eachrow" an "Eachcol" ginn en "Slices" Objet zréck deen d'Versendung erlaabt fir méi effizient Methoden ze bidden.
    • Den "@kwdef" Makro op d'ëffentlech API bäigefüügt.
    • E Problem mat der Uerdnung vun den Operatiounen an "fld1" fixéiert.
    • Sortéieren ass elo ëmmer Zäitstabil (QuickSort gouf nei designt).
    • "Base.splat" gëtt elo exportéiert. De Retourwäert ass e "Base.Splat" Typ anstatt eng anonym Funktioun, et erlaabt et gutt erauszekréien.
  • Package Manager
    • "Package Extensions": Ënnerstëtzung fir e Code Snippet vun anere Packagen ze lueden, déi an enger Julia Sessioun gelueden sinn. D'Applikatioun ass ähnlech wéi de "Requires.jl" Package, awer Pre-Kompilatioun an Astellungskompatibilitéit ginn ënnerstëtzt.
  • Linear Algebra Bibliothéik
    • Wéinst dem Risiko vun Duercherneen mat Element-schlau Divisioun, ewechzehuelen der "a / b" an "b \ a" Methode mat scalar "a" a vektor "b", déi gläichwäerteg zu "a * pinv (b)" waren.
    • Opruff BLAS a LAPACK benotzt elo "libblastrampoline (LBT)". OpenBLAS gëtt als Standard zur Verfügung gestallt, awer de Systembild mat anere BLAS / LAPACK Bibliothéiken ze bauen gëtt net ënnerstëtzt. Amplaz ass et recommandéiert de LBT Mechanismus ze benotzen fir BLAS / LAPACK mat engem aneren existente Set vu Bibliothéiken ze ersetzen.
    • "lu" ënnerstëtzt eng nei Matrixentgasung Strategie, "RowNonZero ()", déi wielt déi éischt Net-Null Rotatioun Element fir benotzen mat neie arithmetesch Zorte a fir Training Zwecker.
    • "normalize (x, p = 2)" ënnerstëtzt elo all normaliséiert Vecteure Raum "x", dorënner scalars.
    • D'Standardzuel vun de BLAS Threads ass elo gläich wéi d'Zuel vun den CPU Threads op ARM Architekturen an d'Halschent vun der CPU Threads op aner Architekturen.
  • Printf: Reworked Fehlermeldungen fir falsch formatéiert Strings fir besser Liesbarkeet.
  • Profil: Nei Funktioun "Profile.take_heap_snapshot(Fichier)", déi e Fichier am JSON-baséierten ".heapsnapshot" Format schreift deen am Chrome ënnerstëtzt gëtt.
  • Zoufälleg: randn an randexp funktionnéieren elo fir all AbstractFloat Typ deen Rand definéiert.
  • REPL
    • Dréckt op d'Tastekombinatioun "Alt-e" mécht elo den aktuellen Input am Editor op. Den Inhalt (wann geännert) gëtt ausgefouert wann Dir den Editor verléisst.
    • Den aktuellen Modulkontext, deen am REPL aktiv ass, kann geännert ginn (Standard Main) mat der Funktioun "REPL.activate(::Module)" oder andeems Dir de Modul an der REPL agitt an d'Tastekombinatioun "Alt-m" dréckt.
    • De "nummeréierte Prompt" Modus, deen d'Zuelen fir all Input an Output dréckt an déi geschoss Resultater am Out späichert, kann mat "REPL.numbered_prompt!()" aktivéiert ginn.
    • Tab fäerdeg weist verfügbar Schlësselwuert Argumenter.
  • SuiteSparse: Code fir de "SuiteSparse" Solver op "SparseArrays.jl" geplënnert. Solvers ginn elo vun "SuiteSparse.jl" nei exportéiert.
  • SparseArrays
    • "SuiteSparse" Solvers sinn elo als "SparseArrays" Ënnermoduler verfügbar.
    • UMFPACK an CHOLMOD Fuedemschutzmodi goufen verbessert andeems d'global Variablen eliminéiert ginn an d'Spären benotzen. Multi-threaded "ldiv!" UMFPACK Objekter kënnen elo sécher ausgefouert ginn.
    • D'experimentell Funktioun "SparseArrays.allowscalar(::Bool)" erlaabt Iech scalar Indexéierung vun spatzen Arrays auszeschalten oder aktivéieren. Dës Funktioun ass entwéckelt fir zoufälleg scalar Indexéierung vun "SparseMatrixCSC" Objeten z'entdecken, wat eng gemeinsam Quell vu Leeschtungsproblemer ass.
  • Neie Failsafe Modus fir Testsuiten déi en Testlaf fréi am Fall vun engem Feeler oder Feeler ofschléissen. Setzt entweder iwwer "@testset kwarg failfast=true" oder "export JULIA_TEST_FAILFAST=true". Dëst ass heiansdo néideg an CI leeft fir Fehlermeldungen fréi ze kréien.
  • Datumer: Eidel Strings ginn net méi falsch parséiert als gëlteg "DateTime", "Dates" oder "Times" Wäerter a werfen amplaz en "ArgumentError" a Konstruktoren a Parsing, wärend "tryparse" näischt zréckginn.
  • Package verdeelt
    • D'Packagekonfiguratioun (aktive Projet, "LOAD_PATH", "DEPOT_PATH") gëtt elo propagéiert wann Dir lokal Aarbechterprozesser bäidréit (zB benotzt "addprocs(N::Int)" oder benotzt de Kommandozeilflag "--procs=N").
    • "addprocs" fir lokal Aarbechterprozesser akzeptéiert elo en Argument mam Numm "env" fir Ëmfeldvariablen un d'Aarbechterprozesser ze passéieren.
  • Unicode: "Graphemes(s, m:n)" bréngt d'Substring vun der mth bis nth graphemes an "s" zréck.
  • De DelimitedFiles Package gouf aus de Systembibliothéiken geläscht a gëtt elo als separat Package verdeelt, deen explizit installéiert muss ginn fir ze benotzen.
  • Extern Ofhängegkeeten
    • Am Linux gëtt d'Versioun vun der libstdc++ Systembibliothéik automatesch erkannt a wann se méi nei ass, gëtt se gelueden. Dat al libstdc++ agebaute Luedeverhalen, onofhängeg vun der Systemversioun, kann restauréiert ginn andeems d'Ëmfeldvariabel "JULIA_PROBE_LIBSTDCXX=0" setzt.
    • "RPATH" aus der Julia Binär geläscht, wat d'Bibliothéiken op Linux briechen kann, déi d'Variabel "RUNPATH" net definéieren.
    • Tool Verbesserungen: Den Output vun "MethodError" a Methoden (zum Beispill vu "Methods(my_func)") ass elo formatéiert a faarweg am Aklang mam Prinzip vum Output vu Methoden an enger Stackspur.

    Source: opennet.ru

Setzt e Commentaire