Verëffentlechung vun der Julia 1.8 Programméiersprooch

D'Verëffentlechung vun der Julia 1.8 Programméierungssprooch ass verfügbar, kombinéiert sou Qualitéite wéi héich Leeschtung, Ënnerstëtzung fir dynamesch Tippen an agebaute Tools fir parallel Programméierung. Dem Julia seng Syntax ass no bei MATLAB, a léint e puer Elementer vu Ruby a Lisp. 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.8:

  • Nei Sprooch Fonctiounen
    • Felder vun engem mutablen Struktur kënnen elo als Konstanten annotéiert ginn fir ze verhënneren datt se geännert ginn an d'Optimiséierung erlaben.
    • Typ Annotatiounen kënnen op global Variablen bäigefüügt ginn.
    • Eidel n-zweedimensional Arrays kënnen erstallt ginn mat multiple Semikolonen bannent véiereckege Klammeren, zum Beispill "[;;;]" erstellt eng 0x0x0 Array.
    • Probéiert Blocks kënnen elo optional en anere Block hunn, deen direkt nom Haaptkierper ausgefouert gëtt wa keng Feeler geworf goufen.
    • @inline an @noinline kënnen an engem Funktiounskierper plazéiert ginn, wat Iech erlaabt eng anonym Funktioun ze annotéieren.
    • @inline an @noinline kënnen elo op eng Funktioun an engem Uruff Site applizéiert ginn oder blockéieren fir déi entspriechend Funktiounsuriff ze zwéngen (oder net abegraff).
    • ∀, ∃ an ∄ sinn als Identifizéierungszeechen erlaabt.
    • Zousätzlech Ënnerstëtzung fir d'Unicode 14.0.0 Spezifizéierung.
    • De Modul (: Numm, falsch, falsch) Method kann benotzt ginn fir e Modul ze kreéieren deen keng Nimm enthält, keng Base oder Core importéiert an keng Referenz op sech selwer enthält.
  • Sprooch Ännerungen
    • Nei erstallt Taskobjekter (@spawn, @async, etc.) hunn elo world_age fir Methoden vun der Elterentask wann se erstallt sinn, wat eng optimiséiert Ausféierung erlaabt. Déi fréier Aktivéierungsoptioun ass verfügbar mat der Base.invokelatest Method.
    • Unicode onbalancéiert bidirektional Formatéierungsdirektive sinn elo a Strings a Kommentaren verbueden fir Injektiounen ze vermeiden.
    • Base.ifelse ass elo als generesch Funktioun definéiert anstatt e Built, wat et erlaabt Pakete seng Definitioun ze verlängeren.
    • All Uerderung un eng global Variabel geet elo fir d'éischt duerch en Uruff fir ze konvertéieren (Any, x) oder ze konvertéieren (T, x) wann déi global Variabel als Typ T deklaréiert gouf. Ier Dir global Variablen benotzt, vergewëssert Iech datt den invariant Convert(Any) , x) === x ass ëmmer wouer, soss kann et zu onerwaart Verhalen féieren.
    • Built-in Funktiounen sinn elo ähnlech wéi generesch Funktiounen a kënne programmatesch mat Methoden opgezielt ginn.
  • Compiler / Runtime Verbesserungen
    • Boot Zäit reduzéiert ëm ongeféier 25%.
    • Den LLVM-baséierte Compiler gouf vun der Runtime-Bibliothéik an eng nei Bibliothéik getrennt, libjulia-codegen. Et gëtt als Standard gelueden, sou datt et während normaler Benotzung keng Ännerunge sollte sinn. An Deployementer déi kee Compiler brauchen (zum Beispill Systembiller, an deenen all déi néideg Code virkompiléiert ass), kann dës Bibliothéik (a seng LLVM Ofhängegkeet) einfach ewechgelooss ginn.
    • Bedingungstyp Inferenz ass elo méiglech andeems en Argument un eng Method weiderginn. Zum Beispill, fir Base.ifelse(isa(x, Int), x, 0) gëtt :: Int och wann d'Zort vun x onbekannt ass.
    • SROA (Scalar Ersatz vun Aggregates) gouf verbessert: eliminéiert getfield Uriff mat persistent global Felder, eliminéiert mutable Strukturen mat uninitialized Felder, verbessert Leeschtung an Ëmgank vun nested Getfield Uriff.
    • Typ Inferenz verfollegt verschidde Effekter - Nebenwirkungen an net drop. Konstant Ausbreedung gëtt berücksichtegt, wat d'Kompiléierungszäitleistung wesentlech verbessert. An e puer Fäll, zum Beispill, Uruff un Funktiounen, déi net inlined kënne ginn, awer net d'Resultat beaflossen, ginn an der Runtime verworf. Regele fir Effekter kënnen manuell iwwerschriwwe ginn mat dem Base.@assume_effects Makro.
    • Precompilation (mat explizit Precompilation Direktiven oder spezifizéierter Aarbechtslaascht) späichert elo méi typedefinéiert Code, wat zu enger méi séier Ausféierung fir d'éischt Kéier resultéiert. All nei Method-/Typkombinatiounen, déi vun Ärem Package gebraucht ginn, egal wou dës Methoden definéiert goufen, kënnen elo an der Prekompilatiounsdatei cache ginn, wa se vun enger Method genannt ginn, déi zu Ärem Package gehéiert.
  • Kommando Linn Parameter Ännerungen
    • De Standardverhalen fir d'Iwwerwaachung vun @inbounds Deklaratiounen ass elo d'Autooptioun an "--check-bounds=yes|nee|auto".
    • Nei "--strip-metadata" Optioun fir Dokstringen, Quellortinformatioun a lokal Variabelennimm ze läschen wann Dir e Systembild erstellt.
    • Nei Optioun "--strip-ir" fir datt de Compiler d'Zwëschenquellcode Representatioun ewechhuelt beim Bau vum Systembild. Dat resultéierend Bild funktionnéiert nëmme wann "--compile=all" benotzt gëtt oder wann all erfuerderlech Code virkompiléiert ass.
    • Wann de Charakter "-" spezifizéiert ass amplaz vum Dateinumm, da gëtt den ausführbare Code vum Standard Input Stream gelies.
  • Multithreading Ënnerstëtzung Ännerungen
    • Threads.@threads benotzt par défaut déi nei Zäitplangoptioun :dynamesch, déi sech vum fréiere Modus ënnerscheet, datt Iteratiounen dynamesch iwwer verfügbaren Aarbechter thread geplangt ginn anstatt un all Thread zougewisen ze ginn. Dëse Modus erlaabt eng besser Verdeelung vun nestet Loops mat @spawn an @threads.
  • Nei Bibliothéik Funktiounen
    • eachsplit (str) fir Split (str) e puer Mol auszeféieren.
    • allequal (itr) fir ze testen ob all Elementer an engem Iterator gläich sinn.
    • hardlink (src, dst) ka benotzt ginn fir schwéier Linken ze kreéieren.
    • setcpuaffinity (cmd, cpus) fir d'Affinitéit vum Prozessorkär op déi lancéiert Prozesser ze setzen.
    • diskstat(path=pwd()) fir Diskstatistiken ze kréien.
    • Neie @showtime Makro fir souwuel d'Linn ze weisen déi evaluéiert gëtt an den @time Bericht.
    • LazyString a lazy "str" ​​Makro goufen derbäigesat fir faul Konstruktioun vu Feelermeldungen a Feelerweeër z'ënnerstëtzen.
    • Fixéiert e Concurrency Thema am Dict an aner ofgeleet Objekter wéi Schlësselen (:: Dict), Wäerter (:: Dict) a Set. Iteratiounsmethoden kënnen elo op engem Wierderbuch oder Satz genannt ginn, soulaang et keng Uriff ginn, déi den Dictionnaire oder Satz änneren.
    • @Time an @timev hunn elo eng fakultativ Beschreiwung, wat Iech erlaabt Iech zum Beispill d'Quell vun Zäitberichter ze annotéieren. @Zäit "Evaluéieren foo" foo().
    • Gamme hëlt entweder Stop oder Längt als seng eenzeg Schlësselwuert Argument.
    • Präzisioun a Setprecision akzeptéieren elo Basis als Schlësselwuert
    • TCP Socket Objete bidden elo eng Closewrite Method an ënnerstëtzen d'Benotzung vum hallefoppene Modus.
    • extrema akzeptéiert elo en Init Argument.
    • Iterators.countfrom elo akzeptéiert all Typ déi eng + Method definéiert.
    • @Time allocéiert elo den % vun der Zäit déi verbraucht gëtt fir Methoden mat geännerten Typen ze kompiléieren.
  • Standard Bibliothéik Ännerungen
    • Schlësselen mat Wäert Näischt ginn elo aus der Ëmwelt an addenv geläscht.
    • Iterators.reverse (an dofir lescht) ënnerstëtzt all Linn.
    • D'Längtfunktioun fir Beräicher vu verschiddenen Typen kontrolléiert net méi fir ganz Zuelen Iwwerfloss. Eng nei Funktioun, checked_length, ass verfügbar; et enthält Bit Transfer Kontroll Logik. Wann néideg, benotzt SaferIntegers.jl fir de Range Typ ze konstruéieren.
    • The Iterators.Reverse Iterator implementéiert all Index ëmgedréint wa méiglech.
  • Package Manager
    • Nei ⌃ an ⌅ Indikatoren nieft Packagen am "pkg>" Status fir déi nei Versioune verfügbar sinn. ⌅ weist datt nei Versiounen net installéiert kënne ginn.
    • Neit veroudert :: Bool Argument zu Pkg.status (--ausgefall oder -o am REPL Modus) fir eng weisen Informatiounen iwwert Pak aus virdrun Versiounen.
    • New compat :: Bool Argument zu Pkg.status (--compat oder -c am REPL Modus) fir e weisen all [compat] Entréen am Project.toml.
    • Neie "pkg> compat" (a Pkg.compat) Modus fir Projet Kompatibilitéit Entréen astellen. Bitt en interaktiven Editeur iwwer "pkg> compat" oder direkt Rekord Kontroll iwwer "pkg> Foo 0.4,0.5", déi aktuell records via Tab fäerdeg lueden kann. Dat ass, "pkg> compat Fo" gëtt automatesch op "pkg> Foo 0.4,0.5" aktualiséiert sou datt eng existent Entrée ka geännert ginn.
    • Pkg probéiert elo nëmmen Pakete vun engem Package Server erofzelueden wann de Server d'Registry iwwerwaacht déi de Package enthält.
    • Pkg.instantiate wäert elo eng Warnung erausginn wann Project.toml aus Synchronisatioun mat Manifest.toml ass. Et mécht dat op Basis vun engem Hash vun den Deps- a Compat-Records vum Projet (aner Felder ginn ignoréiert) am Manifest beim Opléisen, sou datt all Ännerung vum Project.toml-Deps oder Compat-Records erkannt ka ginn ouni nei ze léisen.
    • Wann "pkg>add" e Paket mam Numm net fënnt, wäert et elo Pakete mat ähnlechen Nimm proposéieren, déi derbäi kënne ginn.
    • D'Versioun vu Julia, déi am Manifest gespäichert ass, enthält net méi d'Buildnummer, dat heescht datt de Master elo als 1.9.0-DEV geschriwwe gëtt.
    • Test ofbriechen "pkg>" gëtt elo méi konsequent erkannt, a gëtt richteg an d'REPL zréckginn.
  • InteractiveUtils
    • Neien @time_imports Makro fir d'Zäit ze berichten déi verbraucht ass fir Packagen z'importéieren an hir Ofhängegkeeten, Highlight d'Zesummesetzung an d'Recompilatiounszäit als Prozentsaz vun den Importer.
  • Linear Algebra
    • De BLAS Submodul ënnerstëtzt elo Niveau-2 BLAS spr! Funktiounen.
    • D'LinearAlgebra.jl Standardbibliothéik ass elo komplett onofhängeg vu SparseArrays.jl, souwuel aus enger Quellcode an Eenheetstestperspektiv. Als Konsequenz ginn sparse Arrays net méi zréck (implizit) vu Methoden aus LinearAlgebra, déi op Base oder LinearAlgebra Objeten applizéiert ginn. Besonnesch féiert dëst zu de folgende briechen Ännerungen:
      • Konkatenatioune mat spezielle "spare" Matrizen (zB diagonal) ginn elo dichte Matrizen zréck; Als Konsequenz sinn d'D1 an D2 Felder vun SVD Objekter erstallt duerch getproperty Uruff elo dichte Matrixen.
      • Déi ähnlech (::SpecialSparseMatrix, ::Type, ::Dims) Method gëtt eng dichte Null Matrix zréck. Als Konsequenz féieren d'Produkter vun zwee-, dräi- a symmetrescher tridiagonaler Matrix mateneen zur Generatioun vun enger dichter Matrix. Zousätzlech klappt d'Konstruktioun vun ähnlechen Matrizen mat dräi Argumenter aus speziellen "sparen" Matrizen aus (net-statesche) Matrizen elo wéinst "Null(::Typ{Matrix{T}})".
  • Printf
    • %s an %c benotzen elo den Textwidth Argument fir d'Breet ze formatéieren.
  • Profil
    • CPU Lastprofiléierung registréiert elo Metadaten abegraff Threads an Aufgaben. Profile.print() huet en neit groupby Argument dat Iech erlaabt Threads, Aufgaben oder Subthreads / Aufgaben, Aufgaben / Threads an Threads an Aufgaben Argumenter ze gruppéieren fir Filteren ze bidden. Zousätzlech gëtt d'Benotzungsprozent elo entweder als Gesamt oder pro Fuedem gemellt, ofhängeg ob de Fuedem idle ass oder net an all Probe. Profile.fetch () enthält déi nei Metadaten als Standard. Fir Réckkompatibilitéit mat externe Konsumenten vu Profildaten, kann et ausgeschloss ginn andeems Dir include_meta=false passéiert.
    • Den neie Profile.Allocs Modul erlaabt Iech Erënnerungsallokatiounen ze profiléieren. E Stack Spuer vun der Aart an der Gréisst vun all Erënnerung Bewëllegung gëtt opgeholl, an der sample_rate Argument erlaabt eng konfiguréierbar Unzuel vun Allocatiounen ze iwwersprangen, reduzéieren Leeschtung Overhead.
    • Fixed Dauer CPU Profiling kann elo vum Benotzer ausgeführt ginn, während Aufgaben lafen ouni éischt de Profil ze lueden, an de Bericht gëtt ugewisen beim Laafen. Op MacOS a FreeBSD, dréckt ctrl-t oder rufft SIGINFO un. Fir aner Plattformen, aktivéieren SIGUSR1, i.e. % ëmbréngen -USR1 $julia_pid. Dëst ass net op Windows verfügbar.
  • REPL
    • RadioMenu ënnerstëtzt elo zousätzlech Tastatur Ofkiirzungen fir direkt Auswiel vun Optiounen.
    • D'Sequenz "?(x, y" gefollegt vun der TAB dréckt weist all d'Methoden, déi mat Argumenter x, y, .... opgeruff kënne ginn. (Eng Spëtztraum verhënnert datt Dir an d'Hëllefmodus erakënnt.) "MyModule.?(x, y " beschränkt d'Sich op "MyModule". TAB drécken erfuerdert datt op d'mannst een Argument vun engem Typ méi spezifesch ass wéi Any. Oder benotzt SHIFT-TAB amplaz TAB fir all kompatibel Methoden z'erméiglechen.
    • Déi nei global Variabel Err erlaabt Iech déi lescht Ausnam ze kréien, ähnlech wéi d'Behuele vun ans mat der leschter Äntwert. Err aginn dréckt d'Ausnaminformatioun nei.
  • SparseArrays
    • Geplënnert de SparseArrays Code vum Julia Repository an den externen SparseArrays.jl Repository.
    • Déi nei Koncatenatiounsfunktiounen sparse_hcat, sparse_vcat, an sparse_hvcat ginn e SparseMatrixCSC Typ zréck onofhängeg vun den Aarte vun den Inputargumenter. Dëst gouf néideg fir de Mechanismus ze vereenegen fir d'Matrizen ze leeën nodeems de Code LinearAlgebra.jl an SparseArrays.jl trennt.
  • Logged
    • D'Standard Logniveaue BelowMinLevel, Debug, Info, Warn, Error an AboveMaxLevel ginn elo aus der Standard Logging Bibliothéik exportéiert.
  • Unicode
    • Isequal_normalized Funktioun bäigefüügt fir no Unicode Äquivalenz ze kontrolléieren ouni explizit normaliséiert Strings ze konstruéieren.
    • D'Unicode.normalize Funktioun akzeptéiert elo d'Charttransform Schlësselwuert, dat ka benotzt ginn fir personaliséiert Charakter Mappings ze bidden, an d'Unicode.julia_chartransform Funktioun gëtt och zur Verfügung gestallt fir d'Mapping ze reproduzéieren déi benotzt gëtt wann de Julia Parser d'Identifikatoren normaliséiert.
  • Test
    • '@test_throws "e puer Message" triggers_error ()' kann elo benotzt ginn fir ze testen ob de ugewisene Feelertext e "e puer Message" Feeler enthält, onofhängeg vun der spezifescher Ausnahmstyp. Regelméisseg Ausdréck, Stringlëschten a passende Funktiounen ginn och ënnerstëtzt.
    • @testset foo () kann elo benotzt ginn fir en Testset aus enger bestëmmter Funktioun ze kreéieren. Den Numm vum Testfall ass den Numm vun der Funktioun déi genannt gëtt. Déi genannte Funktioun kann @test an aner @testset Definitiounen enthalen, och fir Uruff un aner Funktiounen, wärend all Zwëschentestresultater opgeholl ginn.
    • TestLogger a LogRecord ginn elo aus der Standard Testbibliothéik exportéiert.
  • Verdeelt
    • SSHManager ënnerstëtzt elo Aarbechter thread mat engem csh / tcsh wrapper iwwer d'addprocs () Method an de Shell =: csh Parameter.
  • Aner Ännerungen
    • GC.enable_logging (richteg) kann benotzt ginn all Gerempels Sammelt Operatioun mat der Zäit an Quantitéit vun Erënnerung gesammelt ze aloggen.

Source: opennet.ru

Setzt e Commentaire