Julia Programmeertaal 1.8 Vrystelling

Die vrystelling van die Julia 1.8-programmeertaal is beskikbaar, wat eienskappe soos hoë werkverrigting, ondersteuning vir dinamiese tik en ingeboude gereedskap vir parallelle programmering kombineer. Julia se sintaksis is naby MATLAB, en leen 'n paar elemente 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.8:

  • Nuwe taalkenmerke
    • Velde van 'n veranderlike struktuur kan nou as konstantes geannoteer word om te verhoed dat dit verander word en optimalisering moontlik maak.
    • Tipe-aantekeninge kan by globale veranderlikes gevoeg word.
    • Leë n-dimensionele skikkings kan geskep word deur veelvuldige kommapunte binne vierkantige hakies te gebruik, byvoorbeeld "[;;;]" skep 'n 0x0x0 skikking.
    • Probeer-blokke kan nou opsioneel 'n ander blok hê, wat onmiddellik na die hoofliggaam uitgevoer word indien geen foute gegooi is nie.
    • @inline en @noinline kan binne 'n funksie liggaam geplaas word, sodat jy 'n anonieme funksie kan annoteer.
    • @inline en @noinline kan nou toegepas word op 'n funksie in 'n oproepwebwerf of blok om die ooreenstemmende funksie-oproepe te dwing om ingesluit te word (of nie ingesluit nie).
    • ∀, ∃ en ∄ word as identifiseerderkarakters toegelaat.
    • Bygevoeg ondersteuning vir die Unicode 14.0.0 spesifikasie.
    • Die Module(:name, false, false) metode kan gebruik word om 'n module te skep wat nie name bevat nie, nie Base of Core invoer nie, en nie 'n verwysing na homself bevat nie.
  • Taal verander
    • Nuutgeskepte Taak-objekte (@spawn, @async, ens.) het nou world_age vir metodes van die ouertaak wanneer dit geskep is, wat geoptimaliseerde uitvoering moontlik maak. Die vorige aktiveringsopsie is beskikbaar deur die Base.invokelatest-metode te gebruik.
    • Unicode ongebalanseerde tweerigting-formatering-aanwysings word nou in stringe en opmerkings verbied om inspuitings te vermy.
    • Base.ifelse word nou gedefinieer as 'n generiese funksie eerder as 'n ingeboude, wat pakkette toelaat om sy definisie uit te brei.
    • Elke toewysing aan 'n globale veranderlike gaan nou eers deur 'n oproep om om te skakel(Enige, x) of om te skakel(T, x) as die globale veranderlike verklaar is as van tipe T. Voordat globale veranderlikes gebruik word, maak seker dat die onveranderlike omskakel(Enige) , x) === x is altyd waar, anders kan dit tot onverwagte gedrag lei.
    • Ingeboude funksies is nou soortgelyk aan generiese funksies en kan programmaties opgesom word deur metodes te gebruik.
  • Samesteller/looptydverbeterings
    • Opstarttyd verminder met ongeveer 25%.
    • Die LLVM-gebaseerde samesteller is geskei van die runtime-biblioteek in 'n nuwe biblioteek, libjulia-codegen. Dit is by verstek gelaai, so daar behoort geen veranderinge tydens normale gebruik te wees nie. In ontplooiings wat nie 'n samesteller benodig nie (byvoorbeeld stelselbeelde waarin al die nodige kode vooraf saamgestel is), kan hierdie biblioteek (en sy LLVM-afhanklikheid) eenvoudig weggelaat word.
    • Voorwaardelike tipe afleiding is nou moontlik deur 'n argument na 'n metode oor te dra. Byvoorbeeld, vir Base.ifelse(isa(x, Int), x, 0) gee ::Int terug, selfs al is die tipe x onbekend.
    • SROA (Scalar Replacement of Aggregates) is verbeter: skakel getfield-oproepe uit met aanhoudende globale velde, skakel veranderlike strukture uit met ongeinitialiseerde velde, verbeter werkverrigting en hantering van geneste getfield-oproepe.
    • Tipe-afleiding volg verskeie effekte—newe-effekte en nie-drop. Konstante voortplanting word in ag geneem, wat die samestelling-tyd prestasie aansienlik verbeter. In sommige gevalle, byvoorbeeld, sal oproepe na funksies wat nie ingelyn kan word nie, maar nie die resultaat beïnvloed nie, tydens looptyd weggegooi word. Reëls vir effekte kan met die hand oorgeskryf word deur die Base.@assume_effects-makro te gebruik.
    • Precompilation (met eksplisiete precompilation-riglyne of gespesifiseerde werkladings) stoor nou meer tipe-gedefinieerde kode, wat lei tot vinniger eerste keer uitvoering. Enige nuwe metode/tipe kombinasies wat deur jou pakket benodig word, ongeag waar daardie metodes gedefinieer is, kan nou in die voorafsamestellingslêer in die kas geberg word as hulle geroep word deur 'n metode wat aan jou pakket behoort.
  • Command line parameter veranderinge
    • Die verstekgedrag vir die monitering van @inbounds-verklarings is nou die outo-opsie in "--check-bounds=yes|no|auto".
    • Nuwe "--strip-metadata" opsie om docstrings, bronligginginligting en plaaslike veranderlikename te verwyder wanneer 'n stelselbeeld geskep word.
    • Nuwe opsie "--strip-ir" om die samesteller toe te laat om die intermediêre bronkode-voorstelling te verwyder wanneer die stelselbeeld gebou word. Die resulterende prent sal slegs werk as "--compile=all" gebruik word of as al die vereiste kode vooraf saamgestel is.
    • As die "-" karakter in plaas van die lêernaam gespesifiseer word, word die uitvoerbare kode vanaf die standaard invoerstroom gelees.
  • Multithreading ondersteuning veranderinge
    • Threads.@threads gebruik by verstek die nuwe skeduleringsopsie :dynamic, wat verskil van die vorige modus deurdat iterasies dinamies oor beskikbare werkersdrade geskeduleer sal word eerder as om aan elke draad toegewys te word. Hierdie modus maak voorsiening vir beter verspreiding van geneste lusse met @spawn en @threads.
  • Nuwe biblioteekfunksies
    • eachsplit(str) om split(str) verskeie kere uit te voer.
    • allequal(itr) om te toets of alle elemente in 'n iterator gelyk is.
    • hardlink (src, dst) kan gebruik word om harde skakels te skep.
    • setcpuaffinity(cmd, cpus) om die affiniteit van die verwerkerkern na die geloodsde prosesse te stel.
    • diskstat(path=pwd()) om skyfstatistieke te kry.
    • Nuwe @showtime-makro om beide die lyn wat geëvalueer word en die @time-verslag te vertoon.
    • LazyString en lui "str" ​​-makro is bygevoeg om lui konstruksie van foutboodskappe in foutpaaie te ondersteun.
    • Het 'n gelyktydige probleem in Dict en ander afgeleide voorwerpe soos sleutels (::Dict), waardes (::Dict) en Set opgelos. Iterasiemetodes kan nou op 'n woordeboek of stel aangeroep word, solank daar geen oproepe is wat die woordeboek of stel wysig nie.
    • @time en @timev het nou 'n opsionele beskrywing, wat jou in staat stel om byvoorbeeld die bron van tydverslae te annoteer. @time "Evaluating foo" foo().
    • reeks neem óf stop óf lengte as sy enigste sleutelwoordargument.
    • presisie en stelpresisie aanvaar nou basis as 'n sleutelwoord
    • TCP-sokvoorwerpe bied nou 'n closewrite-metode en ondersteun die gebruik van halfoopmodus.
    • extrema aanvaar nou 'n init-argument.
    • Iterators.countfrom aanvaar nou enige tipe wat 'n + metode definieer.
    • @time ken nou die % tyd toe wat spandeer word om metodes met veranderde tipes te hersaamstel.
  • Standaardbiblioteekveranderings
    • Sleutels met waarde Niks word nou uit die omgewing in addenv verwyder nie.
    • Iterators.reverse (en dus laaste) ondersteun elke lyn.
    • Die lengtefunksie vir reekse van sekere tipes kontroleer nie meer vir heelgetaloorloop nie. 'n Nuwe funksie, checked_length, is beskikbaar; dit bevat bisoordragbeheerlogika. Indien nodig, gebruik SaferIntegers.jl om die reeks tipe te konstrueer.
    • Die Iterators.Reverse iterator implementeer elke indeksomkering indien moontlik.
  • Pakketbestuurder
    • Nuwe ⌃ en ⌅ aanwysers langs pakkette in die "pkg>" status waarvoor nuwe weergawes beskikbaar is. ⌅ dui aan dat nuwe weergawes nie geïnstalleer kan word nie.
    • Nuwe verouderde::Bool-argument na Pkg.status (--verouderd of -o in REPL-modus) om inligting oor pakkette van vorige weergawes te wys.
    • Nuwe compat::Bool-argument na Pkg.status (--compat of -c in REPL-modus) om enige [compat]-inskrywings in Project.toml te wys.
    • Nuwe "pkg>compat" (en Pkg.compat) modus vir die opstel van projekversoenbaarheidsinskrywings. Verskaf 'n interaktiewe redigeerder via "pkg>compat" of direkte rekordbeheer via "pkg>Foo 0.4,0.5", wat huidige rekords kan laai via bladvoltooiing. Dit wil sê, "pkg> compat Fo " word outomaties opgedateer na "pkg>Foo 0.4,0.5" om wysiging van 'n bestaande inskrywing moontlik te maak.
    • Pkg probeer nou net om pakkette van 'n pakketbediener af te laai as die bediener die register wat die pakket bevat, monitor.
    • Pkg.instantiate sal nou 'n waarskuwing uitreik wanneer Project.toml nie gesinchroniseer is met Manifest.toml nie. Dit doen dit op grond van 'n hash van die projek se deps en compat-rekords (ander velde word geïgnoreer) in die manifes wanneer dit opgelos word, sodat enige verandering aan die Project.toml-deps of compat-rekords opgespoor kan word sonder om weer op te los.
    • As "pkg>add" nie 'n pakket met die gegewe naam kan vind nie, sal dit nou pakkette met soortgelyke name voorstel wat bygevoeg kan word.
    • Die weergawe van julia wat in die manifes gestoor is, sluit nie meer die bounommer in nie, wat beteken dat meester nou as 1.9.0-DEV geskryf sal word.
    • Toetsafbreek "pkg>" sal nou meer konsekwent opgespoor word en sal korrek na die REPL teruggestuur word.
  • InteractiveUtils
    • Nuwe @time_imports-makro om tyd aan te gee wat spandeer word aan die invoer van pakkette en hul afhanklikhede, met die samestelling en hersamestelling van tyd as 'n persentasie van invoere uit.
  • Lineêre algebra
    • Die BLAS-submodule ondersteun nou vlak-2 BLAS spr!-funksies.
    • Die LinearAlgebra.jl-standaardbiblioteek is nou heeltemal onafhanklik van SparseArrays.jl, beide vanuit 'n bronkode- en eenheidtoetsperspektief. As gevolg hiervan word yl skikkings nie meer (implisiet) teruggestuur deur metodes van Lineêre Algebra wat op Base- of LinearAlgebra-objekte toegepas word nie. Dit lei veral tot die volgende breekveranderings:
      • Aaneenskakelings wat spesiale "yl" matrikse (bv. diagonaal) gebruik, gee nou digte matrikse terug; Gevolglik is die D1- en D2-velde van SVD-voorwerpe wat deur getproperty-oproepe geskep word, nou digte matrikse.
      • Die soortgelyke (::SpecialSparseMatrix, ::Type, ::Dims) metode gee 'n digte nulmatriks terug. Gevolglik lei produkte van twee-, drie- en simmetriese tridiagonale matrikse met mekaar tot die generering van 'n digte matriks. Daarbenewens misluk die konstruksie van soortgelyke matrikse met drie argumente uit spesiale "yl" matrikse uit (nie-statiese) matrikse nou as gevolg van "zero(::Type{Matrix{T}})".
  • Drukf
    • %s en %c gebruik nou die tekswydte-argument om die breedte te formateer.
  • Profiel
    • SVE-ladingsprofiele teken nou metadata aan, insluitend drade en take. Profile.print() het 'n nuwe groupby-argument wat jou toelaat om drade, take of sub-drade/take, take/threads, en drade en take-argumente te groepeer om filtering te verskaf. Boonop word gebruikspersentasie nou as 'n algehele of per draad gerapporteer, afhangende van of die draad ledig is of nie in elke monster nie. Profile.fetch() sluit die nuwe metadata by verstek in. Vir terugwaartse versoenbaarheid met eksterne verbruikers van profieldata, kan dit uitgesluit word deur include_meta=false deur te gee.
    • Die nuwe Profile.Allocs-module laat jou toe om geheuetoekennings te profileer. 'n Stapelspoor van die tipe en grootte van elke geheuetoewysing word aangeteken, en die sample_rate-argument laat toe dat 'n konfigureerbare aantal toekennings oorgeslaan kan word, wat prestasiebokoste verminder.
    • SVE-profilering met vaste duur kan nou deur die gebruiker uitgevoer word terwyl take loop sonder om eers die profiel te laai, en die verslag sal vertoon word terwyl dit loop. Op MacOS en FreeBSD, druk ctrl-t of bel SIGINFO. Vir ander platforms, aktiveer SIGUSR1, d.w.s. % doodmaak -USR1 $julia_pid. Dit is nie beskikbaar op Windows nie.
  • REPUBLIEK
    • RadioMenu ondersteun nou bykomende sleutelbordkortpaaie vir direkte keuse van opsies.
    • Die volgorde "?(x, y" gevolg deur TAB te druk, vertoon al die metodes wat met argumente x, y, ... geroep kan word. ('n Voorste spasie verhoed jou om in hulpmodus in te gaan.) "MyModule.?(x, y " beperk die soektog tot "MyModule". Om TAB te druk vereis dat ten minste een argument van 'n tipe meer spesifiek as Enige moet wees. Of gebruik SHIFT-TAB in plaas van TAB om enige versoenbare metodes toe te laat.
    • Die nuwe globale veranderlike fout laat jou toe om die nuutste uitsondering te kry, soortgelyk aan die gedrag van ans met die laaste reaksie. As u fout invoer, word die uitsonderingsinligting herdruk.
  • SparseArrays
    • Het die SparseArrays-kode van die Julia-bewaarplek na die eksterne SparseArrays.jl-bewaarplek geskuif.
    • Die nuwe aaneenskakelingsfunksies sparse_hcat, sparse_vcat en sparse_hvcat gee 'n SparseMatrixCSC-tipe terug ongeag die tipes invoerargumente. Dit het nodig geword om die meganisme vir die gom van matrikse te verenig nadat die LinearAlgebra.jl- en SparseArrays.jl-kode geskei is.
  • Logging
    • Die standaard aantekenvlakke BelowMinLevel, Debug, Info, Warn, Error en AboveMaxLevel word nou vanaf die standaard Logging-biblioteek uitgevoer.
  • Unicode
    • Bygevoeg isequal_normalized-funksie om te kyk vir Unicode-ekwivalensie sonder om eksplisiet genormaliseerde snare te konstrueer.
    • Die Unicode.normalize-funksie aanvaar nou die charttransform-sleutelwoord, wat gebruik kan word om persoonlike karakterkartering te verskaf, en die Unicode.julia_chartransform-funksie word ook verskaf om die kartering wat gebruik word wanneer die Julia-ontleder identifiseerders normaliseer, weer te gee.
  • Toets
    • '@test_throws "sommige boodskap" triggers_error()' kan nou gebruik word om te toets of die vertoonde foutteks 'n "sommige boodskap"-fout bevat, ongeag die spesifieke uitsonderingstipe. Gereelde uitdrukkings, stringlyste en bypassende funksies word ook ondersteun.
    • @testset foo() kan nou gebruik word om 'n toetsstel van 'n gegewe funksie te skep. Die toetsgevalnaam is die naam van die funksie wat genoem word. Die opgeroep funksie kan @toets en ander @toetsstel definisies bevat, insluitend vir oproepe na ander funksies, terwyl alle tussentydse toetsresultate opgeneem word.
    • TestLogger en LogRecord word nou vanaf die standaard toetsbiblioteek uitgevoer.
  • versprei
    • SSHManager ondersteun nou werkersdrade met 'n csh/tcsh-omhulsel via die addprocs()-metode en die shell=:csh-parameter.
  • Ander veranderinge
    • GC.enable_logging(true) kan gebruik word om elke vullisversameling operasie aan te teken met die tyd en hoeveelheid geheue wat ingesamel is.

Bron: opennet.ru

Voeg 'n opmerking