Release fan de Julia 1.8 programmeartaal

De frijlitting fan 'e programmeartaal Julia 1.8 is beskikber, kombinearret sokke kwaliteiten 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.8:

  • Nije taalfunksjes
    • Fjilden fan in mutabele struktuer kinne no wurde annotearre as konstanten om te foarkommen dat se feroare wurde en optimisaasje mooglik meitsje.
    • Type annotaasjes kinne wurde tafoege oan globale fariabelen.
    • Lege n-diminsjonale arrays kinne makke wurde mei meardere puntkomma's binnen fjouwerkante heakjes, bygelyks "[;;;]" makket in 0x0x0-array.
    • Besykje blokken kinne no opsjoneel hawwe in oar blok, dat wurdt útfierd fuortendaliks nei de wichtichste lichem as gjin flaters waarden smiten.
    • @inline en @noinline kinne wurde pleatst yn in funksje lichem, wêrtroch jo in anonime funksje kinne annotearje.
    • @inline en @noinline kinne no tapast wurde op in funksje yn in opropside of blokje om de korrespondearjende funksjeoproppen te twingen om opnommen te wurden (of net opnommen).
    • ∀, ∃ en ∄ binne tastien as identifierkarakters.
    • Stipe tafoege foar Unicode 14.0.0-spesifikaasje.
    • De metoade Module (: namme, falsk, falsk) kin brûkt wurde om in module te meitsjen dy't gjin nammen befettet, gjin Base of Core ymportearret en gjin ferwizing nei himsels befettet.
  • Feroarings yn taal
    • Nij oanmakke Task-objekten (@spawn, @async, ensfh.) hawwe no world_age foar metoaden fan 'e âlder Task by oanmakke, wêrtroch optimalisearre útfiering mooglik is. De foarige aktivearring opsje is beskikber mei help fan de Base.invokelatest metoade.
    • Unicode-oanwizings foar unbalansearre bidirectionele opmaak binne no ferbean yn snaren en opmerkingen om ynjeksjes te foarkommen.
    • Base.ifelse is no definiearre as in generike funksje ynstee fan in ynboude, wêrtroch pakketten syn definysje útwreidzje kinne.
    • Elke tawizing oan in globale fariabele giet no earst troch in oprop om te konvertearjen (Elke, x) of te konvertearjen (T, x) as de globale fariabele ferklearre waard fan type T. Foardat jo globale fariabelen brûke, soargje derfoar dat de ûnferoarlike konvertearje(Elke , x) === x is altyd wier, oars kin it liede ta ûnferwacht gedrach.
    • Ynboude funksjes binne no gelyk oan generike funksjes en kinne programmatysk opnomd wurde mei metoaden.
  • Ferbetterings fan kompilator / runtime
    • Boot tiid fermindere mei likernôch 25%.
    • De LLVM-basearre kompilator is skieden fan 'e runtime-bibleteek yn in nije bibleteek, libjulia-codegen. It wurdt standert laden, dus d'r moatte gjin feroaringen wêze by normaal gebrûk. Yn ynset dy't gjin kompilator nedich is (bygelyks systeemôfbyldings wêryn alle nedige koade foar kompilearre is), kin dizze bibleteek (en har LLVM-ôfhinklikens) gewoanwei wurde weilitten.
    • Conditional type inference is no mooglik troch it trochjaan fan in argumint nei in metoade. Bygelyks, foar Base.ifelse(isa(x, Int), x, 0) jout ::Int sels as it type x ûnbekend is.
    • SROA (Scalar Replacement of Aggregates) is ferbettere: elimineert getfield-oproppen mei oanhâldende globale fjilden, elimineert mutabele struktueren mei net-initialisearre fjilden, ferbetteret prestaasjes en ôfhanneljen fan geneste getfield-oproppen.
    • Type konklúzje folget ferskate effekten-side-effekten en net-fallen. Konstante propagaasje wurdt rekken holden, wat de prestaasjes fan kompilaasje-tiid signifikant ferbettert. Yn guon gefallen, bygelyks, oproppen nei funksjes dy't net kinne wurde ynline, mar net beynfloedzje it resultaat, sille wurde ferwidere by runtime. Regels foar effekten kinne mei de hân oerskreaun wurde mei de makro Base.@assume_effects.
    • Prekompilaasje (mei eksplisite foarkompilaasje-rjochtlinen of spesifisearre wurklasten) bewarret no mear type-definieare koade, wat resulteart yn flugger útfiering foar it earst. Elke nije metoade/type-kombinaasjes dy't nedich binne troch jo pakket, nettsjinsteande wêr't dy metoaden definieare binne, kinne no yn it foarkompilaasjebestân yn 'e cache wurde as se wurde oanroppen troch in metoade dy't by jo pakket heart.
  • Feroarings oan kommandorigelopsjes
    • It standertgedrach foar it kontrolearjen fan @inbounds-deklaraasjes is no de auto-opsje yn "--check-bounds=yes|no|auto".
    • Nije "--strip-metadata" opsje om docstrings, boarne lokaasjeynformaasje en lokale fariabelenammen te ferwiderjen by it meitsjen fan in systeemôfbylding.
    • Nije opsje "--strip-ir" om de kompilator de tuskenlizzende boarnekoadefertsjintwurdiging te ferwiderjen by it bouwen fan it systeemôfbylding. De resultearjende ôfbylding sil allinich wurkje as "--compile=all" wurdt brûkt of as alle fereaske koade foarôf kompilearre is.
    • As it karakter "-" is oantsjutte ynstee fan de triemnamme, dan wurdt de útfierbere koade lêzen út de standert ynfierstream.
  • Multithreading stipe feroarings
    • Threads.@threads brûkt standert de nije scheduling-opsje :dynamysk, dy't ferskilt fan 'e foarige modus trochdat iteraasjes dynamysk pland wurde oer beskikbere wurktrieden ynstee fan wurde tawiisd oan elke thread. Dizze modus soarget foar bettere ferdieling fan nestele loops mei @spawn en @threads.
  • Nije bibleteek funksjes
    • eachsplit(str) om split(str) meardere kearen út te fieren.
    • allequal(itr) om te testen oft alle eleminten yn in iterator lyk binne.
    • hardlink (src, dst) kin brûkt wurde om hurde keppelings te meitsjen.
    • setcpuaffinity(cmd, cpus) om de affiniteit fan 'e prosessorkearn yn te stellen foar de lansearre prosessen.
    • diskstat(path=pwd()) om skiifstatistiken te krijen.
    • Nije @showtime-makro om sawol de line dy't wurdt evaluearre as it @time-rapport wer te jaan.
    • LazyString en lazy "str" ​​makro binne tafoege om lazy konstruksje fan flaterberjochten yn flaterpaden te stypjen.
    • Fixed in concurrency probleem yn Dict en oare ôflaat objekten lykas kaaien (:: Dict), wearden (:: Dict) en Set. Iteraasjemetoaden kinne no oproppen wurde op in wurdboek of set, salang't der gjin oproppen binne dy't it wurdboek of set wizigje.
    • @time en @timev hawwe no in opsjonele beskriuwing, wêrtroch jo bygelyks de boarne fan tiidrapporten kinne annotearje. @time "Evaluearje foo" foo().
    • berik nimt of stop of lingte as syn ienige kaaiwurd argumint.
    • precision en setprecision akseptearje no basis as kaaiwurd
    • TCP-socket-objekten jouwe no in closewrite-metoade en stypje it gebrûk fan heal-iepen modus.
    • extrema akseptearret no in init argumint.
    • Iterators.countfrom no akseptearret elk type dat definiearret in + metoade.
    • @time allocates no de % fan de tiid bestege oan it opnij kompilearjen fan metoaden mei feroare typen.
  • Standert Library Changes
    • Kaaien mei wearde Neat is no fuorthelle út de omjouwing yn addenv.
    • Iterators.reverse (en dus lêste) stipet eachline.
    • De lingtefunksje foar berikken fan bepaalde typen kontrolearret net mear foar oerstreaming fan heule getal. In nije funksje, checked_length, is beskikber; it befettet logika foar bittransferkontrôle. As it nedich is, brûk SaferIntegers.jl om it beriktype te konstruearjen.
    • De Iterators.Reverse iterator ymplementearret elke omkearing fan elke yndeks as it mooglik is.
  • Pakket manager
    • Nije ⌃ en ⌅ yndikatoaren neist pakketten yn 'e "pkg>" status wêrfoar nije ferzjes beskikber binne. ⌅ jout oan dat nije ferzjes net kinne wurde ynstalleare.
    • Nije ferâldere :: Bool argumint oan Pkg.status (--ferâldere of -o yn REPL modus) foar in show ynformaasje oer pakketten út eardere ferzjes.
    • Nije compat :: Bool argumint oan Pkg.status (--compat of -c yn REPL modus) foar in show alle [compat] yngongen yn Project.toml.
    • Nije "pkg> compat" (en Pkg.compat) modus foar it ynstellen fan projektkompatibiliteit-yngongen. Biedt in ynteraktive bewurker fia "pkg> compat" of direkte record kontrôle fia "pkg> Foo 0.4,0.5", dat kin laden hjoeddeistige records fia ljepper foltôging. Dat is, "pkg> compat Fo" wurdt automatysk bywurke nei "pkg> Foo 0.4,0.5" sadat in besteande yngong kin wurde bewurke.
    • Pkg besiket no allinich pakketten te downloaden fan in pakkettsjinner as de tsjinner it register kontrolearret dat it pakket befettet.
    • Pkg.instantiate sil no in warskôging útjaan as Project.toml net syngronisearre is mei Manifest.toml. It docht dit basearre op in hash fan it projekt syn deps en compat records (oare fjilden wurde negearre) yn it manifest doe't oplosse it, sadat eltse feroaring oan de Project.toml deps of compat records kin ûntdutsen sûnder opnij oplosse.
    • As "pkg>add" gjin pakket mei de opjûne namme kin fine, sil it no pakketten foarstelle mei ferlykbere nammen dy't tafoege wurde kinne.
    • De ferzje fan julia opslein yn it manifest befettet net mear it buildnûmer, wat betsjut dat master no skreaun wurdt as 1.9.0-DEV.
    • Test ôfbrekke "pkg>" sil no mear konsekwint ûntdutsen wurde, en sil korrekt weromjûn wurde nei de REPL.
  • InteractiveUtils
    • Nije @time_imports-makro om tiid te rapportearjen dy't bestege oan it ymportearjen fan pakketten en har ôfhinklikens, markearje de kompilaasje en opnij kompilearje tiid as in persintaazje fan ymport.
  • Lineêre algebra
    • De BLAS-submodule stipet no nivo-2 BLAS spr!-funksjes.
    • De LinearAlgebra.jl standert bibleteek is no folslein ûnôfhinklik fan SparseArrays.jl, sawol út in boarne koade as ienheid testen perspektyf. As gefolch wurde sparse arrays net mear (ymplisyt) weromjûn troch metoaden fan LinearAlgebra tapast op Base- of LinearAlgebra-objekten. Benammen liedt dit ta de folgjende brekwizigingen:
      • Konkatenaasjes mei spesjale "spare" matriksen (bygelyks diagonaal) jouwe no tichte matriksen; As gefolch binne de D1- en D2-fjilden fan SVD-objekten makke troch getproperty-oanroppen no dichte matriksen.
      • De ferlykbere (::SpecialSparseMatrix, ::Type, ::Dims) metoade jout in dichte nulmatrix werom. As gefolch, produkten fan twa-, trije- en symmetryske tridiagonale matriks mei elkoar liede ta de generaasje fan in dichte matrix. Dêrnjonken mislearret it bouwen fan ferlykbere matriksen mei trije arguminten út spesjale "sparse" matriksen út (net-statyske) matriksen no troch "nul(::Type{Matrix{T}})".
  • Printf
    • %s en %c brûke no it textwidth-argumint om de breedte op te meitsjen.
  • Profyl
    • Profilearring fan CPU-load registrearret no metadata ynklusyf diskusjes en taken. Profile.print() hat in nij groupby-argumint wêrmei jo diskusjes, taken of subthreads/taken, taken/threads, en diskusjes en taakarguminten kinne groepearje om filtering te leverjen. Derneist wurdt it gebrûkpersintaazje no rapportearre as in algemien as per thread, ôfhinklik fan oft de thread idle is of net yn elke stekproef. Profile.fetch() befettet standert de nije metadata. Foar efterútkompatibiliteit mei eksterne konsuminten fan profilearringsgegevens, kin it útsletten wurde troch include_meta=false troch te jaan.
    • De nije Profile.Allocs module kinne jo in profyl ûnthâld allocations. In stack trace fan it type en de grutte fan elk ûnthâld tawizing wurdt opnomd, en it argumint sample_rate kinne in ynstelbere oantal allocations wurde oerslein, ferminderjen prestaasjes overhead.
    • Fêste doer CPU-profilearring kin no wurde útfierd troch de brûker wylst taken rinne sûnder earst it profyl te laden, en it rapport sil werjûn wurde by it útfieren. Op MacOS en FreeBSD, druk op ctrl-t of skilje SIGINFO. Foar oare platfoarms, aktivearje SIGUSR1, d.w.s. % kill -USR1 $julia_pid. Dit is net beskikber op Windows.
  • REPL
    • RadioMenu stipet no ekstra toetseboerd fluchtoetsen foar direkte seleksje fan opsjes.
    • De folchoarder "?(x, y" folge troch op TAB te drukken lit alle metoaden sjen dy't kinne wurde oanroppen mei arguminten x, y, .... (In foaroansteande romte foarkomt dat jo de helpmodus yngeane.) "MyModule.?(x, y " beheint it sykjen ta "MyModule". Druk op TAB fereasket dat op syn minst ien argumint fan in type is dat mear spesifyk is as Any. Of brûk SHIFT-TAB ynstee fan TAB om kompatibele metoaden ta te stean.
    • De nije globale fariabele err lit jo de lêste útsûndering krije, fergelykber mei it gedrach fan ans mei it lêste antwurd. It ynfieren fan err drukt de útsûnderingsynformaasje opnij.
  • SparseArrays
    • De SparseArrays-koade ferpleatst fan de Julia-repository nei de eksterne SparseArrays.jl-repository.
    • De nije gearhingfunksjes sparse_hcat, sparse_vcat en sparse_hvcat jouwe in SparseMatrixCSC-type werom, nettsjinsteande de typen fan 'e ynfier-arguminten. Dit waard nedich om te ferienigjen it meganisme foar gluing matrices neidat skieden de LinearAlgebra.jl en SparseArrays.jl koade.
  • Logging
    • De standert lognivo's BelowMinLevel, Debug, Info, Warn, Error en AboveMaxLevel wurde no eksportearre fan 'e standert Logging-bibleteek.
  • Unicode
    • Isequal_normalized funksje tafoege om te kontrolearjen op Unicode-lykweardigens sûnder eksplisyt normalisearre stringen te konstruearjen.
    • De Unicode.normalize-funksje akseptearret no it charttransform-kaaiwurd, dat kin wurde brûkt om oanpaste karaktermappings te leverjen, en de Unicode.julia_chartransform-funksje wurdt ek levere om de mapping te reprodusearjen dy't brûkt wurdt as de Julia-parser identifiers normalisearret.
  • test
    • '@test_throws "wat berjocht" triggers_error()' kin no brûkt wurde om te testen oft de werjûn flatertekst in "wat berjocht"-flater befettet, nettsjinsteande it spesifike útsûnderingstype. Reguliere útdrukkingen, stringlisten en oerienkommende funksjes wurde ek stipe.
    • @testset foo() kin no brûkt wurde om in testset fan in opjûne funksje te meitsjen. De namme fan de testgefal is de namme fan de funksje dy't oanroppen wurdt. De oproppen funksje kin @test en oare @testset definysjes befetsje, ynklusyf foar oproppen nei oare funksjes, wylst alle tuskentiidse testresultaten opnimt.
    • TestLogger en LogRecord wurde no eksportearre fan 'e standert Testbibleteek.
  • Distribearre
    • SSHManager stipet no wurktrieden mei in csh/tcsh wrapper fia de addprocs() metoade en de shell=:csh parameter.
  • Oare feroarings
    • GC.enable_logging (true) kin brûkt wurde om te loggen eltse garbage sammelje operaasje mei de tiid en it bedrach fan ûnthâld sammele.

Boarne: opennet.ru

Add a comment