Programmeerimiskeele Julia 1.7 väljaanne

Avaldatud on programmeerimiskeele Julia 1.7 versioon, mis ühendab endas kõrge jõudluse, dünaamilise tüpiseerimise toe ja integreeritud vahendid paralleelseks programmeerimiseks. Julia süntaks sarnaneb MATLAB-ile, sisaldades elemente Ruby-st ja Lisp-ist. Stringide manipuleerimise meetod meenutab Perl-i.

Keele põhijooned:

  • Kõrge jõudlus: projekti üheks peamiseks eesmärgiks on jõudluse saavutamine, mis on lähedane C keeles kirjutatud programmidele. Julia kompilaator põhineb LLVM projektide arendustel ja genereerib tõhusat natiivset masinkoodi mitmesugustele sihtplatvormidele;
  • Toetab erinevaid programmeerimisparadigmasid, sealhulgas objekte orienteeritud ja funktsionaalset programmeerimist. Standardraamatukogu sisaldab funktsioone, sealhulgas asünkroonseks sisendiks/väljundiks, protsesside juhtimiseks, logimise, profileerimise ja paketihaldamise jaoks;
  • Dünaamiline tüpiseerimine: keel ei nõua muutujate tüüpide selget määratlemist, sarnaselt skriptikeeltele. Toetatakse interaktiivset töörežiimi;
  • Valikuline võimalus tüüpide selgeks määramiseks;
  • Süntaks, mis sobib suurepäraselt arvutuste, teaduslike arvutuste, masinõppe süsteemide ja andmete visualiseerimise jaoks. Toetatakse mitmeid arvandmete type ja lahendusi arvutuste paralleliseerimiseks.
  • Otsene funktsioonide kutsumise võimalus C-keele raamatukogudest ilma täiendavate vahelkihtideta.

Uued võimalused keeles Julia 1.7:

  • Uus süntaks mitme mõõtmeliste massiivide loomiseks. Semikoolonite sümboleid kasutatakse massiivi mõõtmete eraldamiseks, kusjuures semikoolonite arv näitab suurust. Näiteks, üks semikoolon "[A; B]" tähendab kinnitus esimeses mõõtmes (vertikaalselt ühes dimensioonilises massiivis), kaks semikoolonit "[A;; B]" teevad seda teises mõõtmes (horisontaalne uus rida maatriksis), kolm semikoolonit ";;;" kolmandas mõõtmes jne.
  • Tagasi kumer kaldenurk (\) stringi literali lõpus eemaldab nüüd rea vahetuse sümboli ja sisestused. Seda saab kasutada pikkade ridade jagamiseks mitmeks koodireaks, ilma et lisanduks täiendavaid sümboleid.
  • Kaldus tagasiviiv ei prindi enam uue rea märkide puhul konsoolikäskude literaalides `cmd \…`, vaid tõlgendab järjestuse kui pidevat string literaalina, samas kui tulemus polnud varem selgelt määratletud.
  • Väljend „(; a, b) = x” loob eraldiseisvad muutujaid a ja b väärtusest x. See süntaks on ekvivalentne „a = getproperty(x, :a); b = getproperty(x, :b)”.
  • Vaikimisi korrutamine on nüüd lubatud radikaalsümbolite puhul (nt x√y ja x∛y).
  • Loogilisi operaatori „&&” ja „||” saab nüüd kasutada massiivi elementide suhtes kujul „.&&” ja „.||”.
  • Operaatorid ⫪(U + 2AEA, \Top, \downvDash) ja ⫫(U + 2AEB, \Bot, \upvDash, \indep) võivad nüüd olla kasutatud binaarsete operaatoritena.
  • Lisatud on valik „—check-bounds=yes|no|auto” makrode @inbounds kontrollimiseks, mille vaikeväärtus on auto.

Keeles tehtud muudatused

  • Vaikimisi kasutatakse pseudorandom numbrite generaatorina Mersenne Twisteri asemel Xoshiro256++, seega on kõik juhuslikud numbrid erinevad (isegi sama algnumbriga), välja arvatud juhul, kui kasutatakse selget RNG objekti. Uus generaator on parema jõudlusega, suurepäraste statistiliste omadustega ja seda kasutatakse reprodutseeritava juhuslikkuse jaoks mitme lõimega programmides (salvestab oleku iga jooksva ülesande jaoks ja harutab välja eraldi oleku uue ülesande loomisel).
  • Destruktureerimine ei muuda enam väärtusi vasakpoolse osa määramisel, kui väärtusi saadakse parempoolsest väljendist. Näiteks massiivi x puhul muudab väljend «x[2], x[1] = x» nüüd esimese ja teise x elementi vahetusse, samas kui varem kasutati mõlema kirje täitmiseks x[1], kuna x[2] muudeti määramise iteratsiooni käigus.
  • macroexpand, @macroexpand ja @macroexpand1 ei genereeri enam LoadError viga. @test_throws on samuti muudetud, et säilitada mõjutatud testide toimivus.
  • Keskmine punkt «·» (\cdotpU + 00b7) ja kreeka interpunktsioon ·(U + 0387) töödeldakse nüüd ekvivalentidena punktoperaatorile «⋅» (\cdotU + 22c5).
  • Miinusmärk «−» (\minusU + 2212) loetakse nüüd ekvivalentseks defitsiitmiinusmärgile «-» (U + 002d).
  • Iterators.peel(itr) tagastab nüüd «nothing», kui itr on tühi, mitte ei viska BoundsError erandit.
  • Mitmed järjestikused semikoolonid massiiviväljendis ignoreeriti varem (nt «[1 ;; 2] == [1 ; 2]»). Nüüd kasutatakse seda süntaksit mõõtmete eristamiseks.
  • Tasakaalustamata vormindusdirektiivid «#= … =#» Unicode'is on nüüd keelatud stringides ja kommentaarides, et vähendada parsi/eval koodi süstimise tõenäosust.

Käsurea parameetrite muudatused

  • Parameeter julia —project ja keskkonnamuutuja JULIA_PROJECT toetavad nüüd ühiste keskkondade valikut. Näiteks on nüüd ekvivalentne julia —project=@myenv ja export JULIA_PROJECT=»@myenv».

Muudatused mitmeotsingus

  • Aatomite näidikute operatsioonide jaoks on now internal functions defined for specific byte sizes.
  • Toetatakse mutable struct eraldi väljade kuulutamist ja kasutamist aatomitena; vt uus makro @atomic.
  • Kui keskkonna muutuja JULIA_NUM_THREADS väärtuseks on seatud «auto», siis lõimede arv võrdub protsessori lõimede arvuga.
  • Igal Task objektillä on kohalik juhuslike arvude generaatori olek, mis vaikimisi tagab koodide paralleelse modelleerimise korduvuse (ajakavast sõltumatu). Vaikimisi töötab generaator ka paralleelselt oluliselt kiiremini kui varasemates versioonides.
  • Ülesanded saavad nüüd liikuda lõimede vahel. Varem käivitati ülesanne alati selles lõimes, mis seda esimesena käivitas.

Uued funktsioonid raamatukogus

  • Lisatud on meetodid findmax(f, domain), argmax(f, domain) ja vastavad «min» versioonid kahe argumendiga.
  • isunordered(x) tagastab true, kui x on väärtus, mis peaks olema mittesorditud, nagu näiteks NaN või puudu.
  • Uus funktsioon keepat!(vector, inds), mis on ekvivalent vector[inds] loendi inds täisarvudest.
  • Meetod lock(f, lck) kahe argumendi jaoks aktsepteerib nüüd Channelit kui teist argumenti.
  • Uus funktor Returns(value) tagastab value kätte igasuguste argumentide jaoks.
  • Uued makrod @something ja @coalesce, mis on vastavalt something ja coalesce versioonid.
  • Uus redirect_stdio funktsioon stdin, stdout ja stderr suunamiseks.
  • Uus makro «Base.@invoke f(arg1::T1, arg2::T2; kwargs…)» pakub lihtsat süntaksit «invoke(f, Tuple{T1,T2}, arg1, arg2; kwargs…)» väljakutsumiseks.
  • Uus makro «Base.@invokelatest f(args…; kwargs…)» võimaldab mugavat viisi «Base.invokelatest(f, args…; kwargs…)» väljakutsumiseks.

Uued võimalused raamatukogus

  • Tuples saab luua konteksti võtmesõnaga vormingus «:key => value», et näidata atribuudid, mida edastada IOContext'ile.
  • bytes2hex ja hex2bytes ei ole enam piiratud argumentidega tüübis «Union{String,AbstractVector{UInt8}}» ning nüüd nõuavad ainult, et tüübid oleksid järjestikud ja neil oleks arvutatav pikkus.
  • stat(file) on saanud rohkem üksikasjaliku ja mugava show meetodi.

Standardraamatukogu muudatused

  • count ja findall võtavad nüüd AbstractChar argumenti, et otsida sümbolit stringis.
  • Uued meetodid range(start, stop) ja range(start, stop, length).
  • range toetab nüüd start'i kui valikulist võtmeargumenti.
  • Mõned piirkondade tehingud tagastavad nüüd StepRangeLen StepRange asemel, võimaldades nulli lõppkasutuse sammuna. Varem põhjustas λ .* (1:9) vea, kui λ = 0.
  • islowercase ja isuppercase nüüd käsitlevad Unicode kategooriaid väikeste ja suurte tähtede kohta.
  • iseven ja isodd funktsioonid toetavad nüüd tüüpe, mis pole Integer.
  • escape_string nüüd võtab sümbolite kogumi läbi võtmesõna keep, mis määrab sümbolid, mis peavad jääma muutumatuks.
  • getindex NamedTuple jaoks nüüd võtab sümbolite tupele, et indekseerida mitu väärtust.
  • AbstractRange alamklassid järgivad massiivide indekseerimise üldist käitumist Booli indekseerimisel, Booli skalaaride puhul vigu ja Booli massiivide (sealhulgas vahemike) käsitlemisel loogiliste indeksitena.
  • keys(::RegexMatch) tagastab regulaaaravaldise nime järgi püüdmise võtmed või indeksi järgi, kui nimesid pole.
  • keys(::Generator) tagastab iteratori võtmed.
  • RegexMatch on nüüd iteratiivne, andes välja püütud alamjärgud.
  • lpad/rpad on määratletud textwidth jaoks.
  • Test.@test nüüd võtab nimelised argumendid broken ja skip, mis kordavad Test.@test_broken ja Test.@test_skip käitumist, kuid võimaldavad vahele jätta teste, mis kukuvad läbi ainult teatud tingimustel. Näiteks if T == Float64 @test_broken isequal(complex(one(T)) / complex(T(Inf), T(-Inf)), complex(zero(T), zero(T))) else @test isequal(complex(one(T)) / complex(T(Inf), T(-Inf)), complex(zero(T), zero(T))) end võib asendada @test isequal(complex(one(T)) / complex(T(Inf), T(-Inf)), complex(zero(T), zero(T))) broken=(T == Float64)
  • @lock eksporditakse nüüd Base'ist.
  • Eksperimentaalne funktsioon Base.catch_stack() on ümber nimetatud current_exceptions() ja saanud konkreetse tagastatava väärtuse tüübi.
  • Mõned trigonometrilised funktsioonid (sind, cosd, tand, asind, acosd, asecd, acscd, acotd, atand) aktsepteerivad nüüd ruutmatrit.
  • replace(::String) aktsepteerib nüüd mitmeid mustreid, mis rakendatakse vasakult paremale korraga, seega rakendatakse igale sümbolile ainult ühte mustrit ja mustreid rakendatakse ainult sisendtekstile, mitte nende järjestikustele asendustele.
  • Funktsioon length määratud tüüpide vahemikes ei kontrolli enam enamiku juhtumite korral täisarvu ülevoolu. checked_length on uus funktsioon, mis kasutab kontrollitud aritmeetikat ülevoolu punktini, kui tulemus võib olla ülevooluga. Või kasutage paketti SaferIntegers.jl, kui on oht vahemiku ülevooluks.
  • Uued replace meetodid elementide asendamiseks Tuple-is.

Pakkide haldaja

  • Konsoli režiimis „julia>” pakutakse automaatselt paigaldada pakett, kui using- või import-paketid ei ole installitud, kuid on saadaval registris „pkg> add”.
  • Manifest.toml kasutab uut formaati koos uute metaandmetega, sealhulgas versiooniga, mille Julia genereeris. Vana formaadi manifeid jäävad toeks algformaati, kuni kasutaja käivitab Pkg.upgrade_manifest().
  • «pkg> precompile» eeltöötab nüüd uusi versioone juba laaditud pakettidest, mitte ei lükka neid järgmisse seanssi.
  • «pkg> rm, pin ja free» toetavad nüüd argumenti «—all», et rakendada toimingut kõikide paketide jaoks korraga.
  • Registry'd, mis on laaditud Pkg Server'ist (mitte git), ei pakita enam failideks, vaid loetakse otse arhiivist mällu. Selle funktsiooni keelamiseks seadke keskkonnamuutuja JULIA_PKG_UNPACK_REGISTRY=true.
  • Nüüd saab kasutada välist käivitatavat faili git vaikimisi libgit2 teeki jaoks, mis laadimise toimub Git protokolli kaudu, seadistades keskkonnamuutuja JULIA_PKG_USE_CLI_GIT=true.
  • Registry'd, mis on laaditud serverile Pkg (mitte git), peetakse nüüd muutmatuks. Manuaalselt tehtud muudatused nende failides ei pruugi sisalduda jooksvas Pkg seansis.
  • Pakettide lisamine katalooge REPL-režiimis nõuab nüüd, et nimi algaks „./“, kui pakk on praeguses kataloogis; näiteks „add ./Package“ asemel „add Package“. See on tehtud segaduse vältimiseks päises „Package“ ja kohaliku katalooge, mille nimi on sama.
  • PackageSpec jaoks on eemaldatud võtmesõna mode.

Lineaarne algebra

  • Kasuta Libblastrampoline'i, et siduda BLAS ja LAPACK täitmishetkel. Vaikimisi ühendatakse OpenBLAS Julia jaotisesse. Uut ühendusmehhanismi saab kasutada BLAS ja LAPACK asendamiseks kohandatud seadetega.
  • Aarch64 OpenBLAS kasutab nüüd ILP64 BLAS-i nagu kõik teised 64-bitised platvormid.
  • OpenBLAS on värskendatud versioonile 0.3.13.
  • SuiteSparse on värskendatud versioonile 5.8.1.
  • UpperHessenbergi maatriksi kuju säilib teatud aritmeetilistes toimingutes, näiteks korrutamisel või jagamisel UpperTriangular maatriksitega.
  • Reaalsed Schur'i quasi-trofikaalvormid saab nüüd teisendada keerukateks ülemisteks trofikaalseteks vormideks, kasutades väljendit „Schur{Complex}(S)“.
  • cis(A) toetab nüüd maatrikseid argumentidena.
  • dot toetab AbstractMatrix tüübi UniformScaling'i.
  • qr[!] ja lu[!] toetavad nüüd LinearAlgebra.PivotingStrategy üheelemendilisi väärtusi valikulise pivot-argumendina: vaikimisi väärtused qr(A, NoPivot()) võrreldes qr(A, ColumnNorm()) pööramisega ja lu(A, RowMaximum()) võrreldes lu(A, NoPivot()) ilma pööramiseta. Varasemad Val{true/false} väljakutsed on aegunud.
  • det(M::AbstractMatrix{BigInt}) kutsub esile det_bareiss(M), mis kasutab Bareissi algoritmi täpsete väärtuste arvutamiseks.

REPL

  • Pikad read kustutatakse nüüd sintaksiga «head» ⋯ 12345 bytes ⋯ «tail» REPL-is kuvamisel.
  • REPL-i näidete kleepimine lõikepuhvrisse toetab nüüd kõiki REPL režiime (julia, pkg, shell, help?) ja režiim lülitub automaatselt.
  • «help?>» dokumentatsiooniridade puudumisel moodulites tagastab nüüd eksportitud nimede loendi ja kuvab seotud README.md sisu, kui see on leitud.

SparseArrays

  • Uus meetod sizehint!(::SparseMatrixCSC, ::Integer)\.
  • cholesky() säilitab nüüd täielikult kasutaja määratud permutatsiooni.
  • issparse rakendatakse nüüd järjepidevalt kõigile mähisarraydele, sealhulgas sisemistele, kontrollides issparse vanema mähisarray suhtes.

Kuupäevade manipuleerimine

  • Funktsioon Dates.periods võimaldab saada Vector-väärtusi Period'ist CompoundPeriod'ist.

Allalaadimised

  • Kui küpsise pealkiri on seadistatud suunatud päringus, saadetakse küpsis nüüd edaspidi saadetud päringutes.
  • Kui fail ~/.netrc eksisteerib, kasutatakse seda paroolide allikana autentimisega veebisaitide jaoks.
  • Serveri nime indikaatorit rakendatakse nüüd kõigis TLS-ühendustes, isegi kui serveri identiteeti ei kontrollita (vt NetworkOptions).
  • TLS-ühenduste kontrollimisel Windowsis, kui server sertifikaatide tühistamise teenus pole saadaval, lubatakse ühendus; see vastab sellele, mida teised rakendused teevad ja kuidas tühistamine toimub macOS-is.
  • Praegu on 30-sekundiline ooteaeg ühenduse kehtivuse kontrollimiseks ja 20-sekundiline ooteaeg andmete edastamiseks. See tagab, et ühendused on aktiivsed, vastasel juhul katkestatakse need vähem kui minuti pärast.

Tar

  • Tar.extract ignoreerib nüüd tarballi täpset õiguste režiimi ja normaliseerib režiimid täpselt nagu Tar.create. See on sarnane git'iga.
  • Tar-iga seotud funktsioonid käsitlevad nüüd kõvaketta linke: lingi siht peab olema eelnevalt vaadatud fail; Tar.list loetleb kirjeid, mille tüüp on :hardlink ja mille .link välja näitab sihttee; muud funktsioonid — Tar.extract, Tar.rewrite, Tar.tree_hash — teisendavad kõvaketta lingi sihtfailiks kopeerimiseks.
  • Tar.create ja Tar.rewrite loodud standardvorming sisaldab nüüd kirjeid mittetühiade kataloogide jaoks. Mõned tööriistad, mis kasutavad tarball'i (sealhulgas Docker), on segaduses, kuna neid kirjeid kataloogis ei ole.
  • Tar toetab nüüd tarball'e, mille alguses on tühikud kaheksanda numbriga pealkirjafailides: tehniliselt on see vastavuses POSIX spetsifikatsiooniga, kuid vanad Solaris tar käsklused genereerisid selliseid arhiive, seetõttu esineb see formaat looduses ning selle vastuvõtmine ei näi olema kahjulik.
  • Tar.extract toetab nüüd set_permissions võtmeargumenti, mille vaikeväärtus on true; kui selle asemel edastatakse false, ei muudeta välja tõmmatud failide õigusi.

Mmap

  • mmap on nüüd eksporditud ja saadaval kasutamiseks.

DelimitedFiles

  • Readdlm kasutab nüüd vaikimisi use_mmap=false kõikides operatsioonisüsteemides, et tagada stabiilsus ebanormaalsetes failisüsteemi olukordades.

Allikas: opennet.ru

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster