Programmeerimiskeele Julia 1.10 väljaanne

Avaldatud on programmeerimiskeele Julia 1.10 versioon, mis ühendab selliseid omadusi nagu kõrge jõudlus, dünaamilise tüübi tugi ja sisseehitatud vahendid paralleelseks programmeerimiseks. Julia süntaks sarnaneb MATLAB-ile, kus on laenatud elemente Ruby-st ja Lisp-ist. Stringide manipuleerimise meetod sarnaneb Perlile. Projekti kood levib MIT litsentsi alusel.

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.

Peamised muudatused Julia 1.10-s:

  • Keele uued võimalused
    • Vaikimisi on kasutusele võetud uus täiustatud süntaksianalüsaator JuliaSyntax.jl. Kui on vaja naasta vanale, tuleks seadistada keskkonnamuutuja JULIA_USE_FLISP_PARSER väärtusele 1.
    • Sümboleid ⥺ (U+297A, \leftarrowsubset) ja ⥷ (U+2977, \leftarrowless) saab nüüd kasutada binaarsete operaatoritena nooleprioriteediga.
  • Keeles tehtud muudatused
    • Tütartööde genereerimisel ei mõjuta enam kohaliku RNG (juhuslike arvude generaator) vanemteavet. Uus juhuslike arvude generaatori initsialiseerimise skeem sarnaneb implementatsioonidele SplitMix ja DotMix.
    • Ettepanek on uus meetodi valimise reegel, mis kõrvaldab ebaselgust tüübi „Union{}“ puhul meetodi kasuks, mis on selgelt määratletud „Union{}“ tüüpi argumendi käsitlemiseks.
    • Sümbol «h bar» ℏ (\hslash U+210F) peetakse nüüd ekvivalentseks ħ (\hbar U+0127).
    • Makro «@simd» omab nüüd spetsiifilist semantikat: see lubab ainult uute järjestuste ja vähendatud ujuva punktiga tehingute tegemist, mitte kõiki «kiire matemaatika @fastmath» optimeerimisi. Kui programmi täitmisel tekib selle muutuse tõttu jõudlusprobleeme, saab varasema käitumise taastada, kasutades «@fastmath @simd».
    • Meetodi jälgimispuus võtmesõnadega kuvamisel on võtmesõnade tekstiline esitlus nüüd lihtsustatud uue makro süntaksiga «@Kwargs{key1::Type1, …}».
  • Kompilaatori/ajaviimese parandused
    • Prahtide kogumise süsteem töötab nüüd mitme pöördega objektide valimise peal.
    • JITLink on vaikimisi aktiveeritud Linuxi aarch64 arhitektuuriga süsteemides, kui Julia kogutakse LLVM 15 või uuemate versioonidega.
    • Eelkompileerimise protsessis on kasutusel pid-failide lukustused. Ainult üks julia protsess võib samal ajal eelkompileerida. Varem töötasid kõik protsessid samaaegselt, mis tõi endaga kaasa ohu kahjustada kompileerimise vahemälu faile rivaalitsemise tõttu.
  • Käsurea parameetrite muudatused
    • Lisatud on '—gcthreads' valik, mis võimaldab määrata, kui palju paralleelseid vooge jäätme kogujat kasutab. Vaikimisi on väärtus 'N/2', kus N on töövoogude ('—threads') arv, mida Julia kasutab.
  • Kogumisseadme muudatused
    • Vaikeseadmest on eemaldatud moodulid 'SparseArrays' ja 'SuiteSparse'. Julia põhikomplektis ei ole enam GPL-litsentsiga raamatukogusid. Kuid need raamatukogud on endiselt kaasas keele standardse binaardistibuutiga.
  • Uued raamatukogu funktsioonid
    • 'tanpi' arvutab 'tan(π*x)' täpsemalt kui 'tan(pi*x)'.
    • 'fourroot(x)' on määratud Base.Math-s ja seda saab kasutada 'x' neljanda juure arvutamiseks. Selle meetodi lühinimi on Unicode'i sümbol ∜, mille saab sisestada käsuga \fourthroot.
    • Lisatud on funktsioonid 'Libc.memmove', 'Libc.memset' ja 'Libc.memcpy', mille funktsionaalsus vastab vastavatele C-kõnedest.
    • Lisatud meetod 'Base.isprecompiled(pkg::PkgId)', mis tagastab 'true', kui pakett on juba eelnevalt kompileeritud.
  • Raamatukogu funktsioonide valikud
    • 'binomial(x, k)' toetab nüüd mitte-ühtlast arvu 'x'.
    • «CartesianIndex» vaadatakse nüüd kui «skalaar» laialdaselt saatmiseks.
    • Meetod «printstyled» toetab nüüd kaldkirja väljundit.
    • Meetodid «parent» ja «parentindices» toetavad nüüd tüüpi «SubStrings».
    • Meetod «replace(string,pattern…)» toetab nüüd valikulist argumenti «IO» väljundiks voogus, mitte stringi tagastamiseks.
    • Meetod «startswith» toetab nüüd sisendi- ja väljundi voo juhtimist.
  • Alglibide muudatused
    • Meetoditest «sortperm!» ja «partialsortperm!» on eemaldatud märksõna «initialized=true», mis võis põhjustada ebausaldusväärset käitumist.
    • Tüüpi «Rational» täisarvude printimisel jäetakse nende nimetaja nüüd välja tüübitud voogude kontekstis «Rational» (nt massiivides).
  • Pakkide haldaja
    • Meetod «Pkg.precompile» võtab nüüd võtmeargumendina «timing», kuvades iga paketi eelkompileerimise aja teavet — «Pkg.precompile(timing=true)».
  • LinearAlgebra
    • Tüüp „AbstractQ“ ei ole enam „AbstractMatrix“ alamtüüp. Lisaks ei kata meetod „adjoint(Q::AbstractQ)“ enam „Q-d“ tüübiga „Adjoint“, asendades selle „AdjointQ“-ga, mis on omakorda alamtüüp „AbstractQ“. See muudatus on tingitud sellest, et „AbstractQ“ eksemplarid käituvad tavaliselt nagu funktsioonide ja maatriksite lineaarsete operaatoritena ning neid ei ole võimalik indekseerida. Lisaks saavad paljusid „AbstractQ“ tüüpe kasutada erineva suurusega vektorite/maatriksite puhul, toimides maatriksina, mille suurus sõltub kontekstist. Tänu sellele muudatusele on tüübile „AbstractQ“ määratud selgelt defineeritud liides, mis on põhjalikult kirjeldatud Julia dokumentatsioonis.
    • Faktoriseerimise tulemusi ei esitata enam „Adjoint“ ja „Transpose“ tüübide korpustes. Nende asemel on lisatud tüübid „AdjointFactorization“ ja „TransposeFactorization“, mis on samuti alamtüübid „Factorization“.
    • Uued funktsioonid „hermitianpart“ ja „hermitianpart!“ maatriksi hermitilise (reaalselt sümmeetrilise) osa leidmiseks.
    • Tüübist „AbstractMatrix“ pärineva transponeeritud maatriksi meetod „norm“ tagastab nüüd vaikimisi vanema maatriksi norme, mis vastab praegusele käitumisele tüüpide „AbstractVectors“ puhul.
    • Lisatud funktsioonid „eigen(A, B)“ ja „eigvals(A, B)“, et arvutada omavektorid, kui A või B on sümmeetriline või hermiitne.
    • Funktsioonid „eigvals/eigen(A, cholesky(B))“ arvutavad nüüd üldised omaväärtused (sh omavektorid) A ja B, kasutades Cholesky lagunemist positiivselt määratletud B puhul.
  • Printf
    • Formaadi spetsiifikaatorid toetavad nüüd dünaamilist laiust ja täpsust, näiteks „%*s“ ja „%*.*g“.
  • REPL
    • Jälgimise kihi väljastamisel on funktsioonide allkirjade tüübid piiratud sügavusele, et vältida liiga detailsed väljundit.
  • Test
    • Maks „@test_broken“ (või „@test“ koos „broken=true“) viskab nüüd vea, kui testiväljend tagastab mitte false/true väärtuse.
    • Kui „@test“ kutsumise või funktsiooni sees esineb viga, antakse nüüd detailne jälgimiskihi info, et mõista testi positsiooni „@testset“.
  • InteractiveUtils
    • „code_native“ ja „@code_native“ kasutavad nüüd Intel süntaksit, mitte AT&T.
    • „@time_imports“ näitab nüüd „__init__()“ käivitamise aega imporditud moodulite jaoks.
  • Vana ja eemaldamisele kuuluvad struktuurid.
    • Makro «@pure» on kuulutatud vananenuks. Selle asemel tuleb kasutada «Base.@assume_effects :foldable».

Allikas: opennet.ru

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