Lëshimi i gjuhës së programimit Julia 1.10

Është publikuar versioni i gjuhës së programimit Julia 1.10, që kombinon cilësi të tilla si performanca e lartë, mbështetje për tipizimin dinamik dhe mjete të integruara për programimin paralel. Sintaksa e Julia-s është e ngjashme me MATLAB-in, me marrjen e disa elementeve nga Ruby dhe Lisp. Metoda e manipulimit të stringjeve i ngjan Perl-it. Kodi i projektit shpërndahet nën licencën MIT.

Veçoritë kyçe të gjuhës:

  • Performancë e lartë: Një nga qëllimet kryesore të projektit është arritja e performancës afër programeve në gjuhën C. Kompilatori i Julia-s bazohet në punët e projektit LLVM dhe gjeneron kod të efektshëm të makinës natyrore për shumë platforma të synuara;
  • Mbështetje për paradigmat të ndryshme të programimit, duke përfshirë elemente të programimit objekt-orientuar dhe funksional. Biblioteka standarde ofron gjithashtu funksione për hyrje/dalje asinkrone, menaxhimin e proceseve, regjistrimin, profilimin dhe menaxhimin e pakot;
  • Tipizimi dinamik: gjuha nuk kërkon përcaktimin e qartë të tipave për variablat, ngjashëm me gjuhët e programimit të skriptimit. Mbështetet një mod i ndërveprueshëm;
  • Mundësi opsionale për të specifikuar qartë tipet;
  • Sintaksa, e cila përshtatet shkëlqyeshëm për llogaritjet numerike, llogaritjet shkencore, sistemet e mësimit të makinerive dhe vizualizimin e të dhënave. Mbështetje për shumë lloje të të dhënave numerike dhe mjete për paralelizimin e llogaritjeve.
  • Mundësia për të thirrur drejtpërdrejt funksionet nga bibliotekat në gjuhën C pa shtresa të tjera.

Ndryshimet kryesore në Julia 1.10:

  • Mundësi të reja të gjuhës
    • Sipas parazgjedhjes, është aktivizuar një analizues sintaksor i ri dhe i përmirësuar JuliaSyntax.jl. Nëse është e nevojshme të ktheheni në të vjetrin, duhet të vendosni variablën e mjedisit JULIA_USE_FLISP_PARSER në vlerën 1.
    • Simbolet ⥺ (U+297A, \leftarrowsubset) dhe ⥷ (U+2977, \leftarrowless) tani mund të përdoren si operatorë binarë me prioritete të shigjetave.
  • Ndryshime në gjuhë
    • Kur ndodhin nën-projekte, RNG lokal (generaatori i numrave të rastësishëm) i projektit prind më nuk preket. Skema e re e inicializimit të geraatorit të numrave të rastësishëm është e ngjashme me implementimet SplitMix dhe DotMix.
    • Është propozuar një rregull i ri për zgjedhjen e metodës, i cili eleminon paqartësinë me llojin «Union{}» në favor të një metode që përcaktohet qartë për trajtimin e argumentit të tipit «Union{}».
    • Simboli «h bar» ℏ (\hslash U+210F) tani konsiderohet si ekuivalent me ħ (\hbar U+0127).
    • Makroja «@simd» tani ka një semantikë të konkretizuar: ajo lejon vetëm riorganizimin dhe reduktimin e operacioneve me pikë float, në vend që të përfshijë të gjitha optimizimet «matematika e shpejtë @fastmath». Nëse gjatë ekzekutimit të programeve vërehet një rënie e performancës për shkak të kësaj ndryshimi, është e mundur të rikthehet sjellja e mëparshme duke përdorur «@fastmath @simd».
    • Kur shfaqet në gjurmimin e stack-ut të metodës me fjalë kyçe, përfaqësimi tekstor i fjalëve kyçe tani thjeshtohet duke përdorur sintaksën e re të makros «@Kwargs{key1::Type1, …}».
  • Përmirësime të kompiluesit/ambientit të ekzekutimit.
    • Krijuesi i mbetjeve tani kryen seleksionim shumëpricës për objektet për t'u fshirë.
    • JITLink është aktivizuar si parazgjedhje në sistemet Linux të bazuara në arkitekturën aarch64 gjatë ndërtimit të Julia me LLVM 15 ose versione më të reja.
    • Gjatë procesit të parakomplimit përfshihen bllokimet e skedarëve pid. Një proces vetëm julia mund të kryejë parakomplimin në një moment. Më parë, të gjithë proceset ishin duke punuar paralelisht dhe kishte rrezik për dëmtimin e skedarëve të caches së parakomplimit për shkak të një gjendjeje konkurences.
  • Ndryshimet në parametrat e komandës
    • Është shtuar opsioni «—gcthreads», i cili lejon përcaktimin e numrit të rrjedhave paralele që do të përdorë krijuesi i mbetjeve. Si parazgjedhje është e vendosur vlera «N/2», ku N është numri i rrjedhave të punës («—threads») që përdor Julia.
  • Ndryshimet në sistemin e ndërtimit
    • Nga imazhi i sistemit janë përjashtuar si parazgjedhje modulat «SparseArrays» dhe «SuiteSparse». Në paketën bazë të Julia nuk përfshihen më biblioteka me licencë GPL. Megjithatë, këto biblioteka janë ende të përfshira së bashku me gjuhën në shpërndarjen binare standard.
  • Funksionet e reja të bibliotekës
    • «tanpi» llogarit «tan(π*x)» më saktë se «tan(pi*x)».
    • «fourroot(x)» është përcaktuar në Base.Math dhe mund të përdoret për të llogaritur rrënjën katrore të «x». Emri i shkurtuar i këtij metodi është simbolet Unicode ∜, e cila mund të futet duke përdorur komandën \fourthroot<tab>.
    • Shtohen funksionet «Libc.memmove», «Libc.memset» dhe «Libc.memcpy», funksionaliteti i të cilave përputhet me funksionalitetin e thirrjeve përkatëse C.
    • Shtohet metoda «Base.isprecompiled(pkg::PkgId)», e cila kthen «true» nëse paketa është kompiluar më parë.
  • Opsionet e funksioneve të bibliotekës
    • «binomial(x, k)» tani mbështet numra jo të plotë «x».
    • «CartesianIndex» tani shqyrtohet si «skalar» për shpërndarjen e gjerë.
    • Metoda «printstyled» tani mbështet shkronjat me kursiv.
    • Metodat «parent» dhe «parentindices» tani mbështesin llojin «SubStrings».
    • Metoda «replace(string,pattern…)» tani mbështet një argument opsional «IO» për daljen në një rrjedhë, jo për kthimin e një stringu.
    • Metoda «startswith» tani mbështet rrjedhat e input-output.
  • Ndryshimet në bibliotekat bazë
    • Nga metodat «sortperm!» dhe «partialsortperm!» janë hequr fjalët kyçe «initialized=true», të cilat mund të çonin në sjellje të pasigurta.
    • Kur gjatë printimit të numrave të plotë të tipit "Rational", tani përjashtohet nofka e tyre në kontekstin e rrjedhave të tipizuara "Rational" (p.sh., në masa).
  • Menaxheri i paketave
    • Metoda "Pkg.precompile" tani pranon "timing" si një argument kryesor, duke treguar informacionin mbi kohën e prékompilimit për secilën paketë — "Pkg.precompile(timing=true)".
  • LinearAlgebra
    • Tipi "AbstractQ" nuk është më një nën-tip i "AbstractMatrix". Për më tepër, metoda "adjoint(Q::AbstractQ)" tani nuk e mbush "Q" në tipin "Adjoint", por e zëvendëson me "AdjointQ", i cili vetë është një nën-tip i "AbstractQ". Ky ndryshim ka ndodhur sepse zakonisht instancat e "AbstractQ" sillen si operatorë linearë në bazë të funksioneve dhe matrixeve dhe nuk janë të aksesueshëm me indekse. Për më tepër, shumë lloje të "AbstractQ" mund të punojnë me vektorë/matrica të madhësive të ndryshme, duke vepruar si matrica me një madhësi që varet nga konteksti. Me këtë ndryshim, tipi "AbstractQ" tani ka një interfec të qartë të përcaktuar, të cilin e përshkruan në detaje dokumentacioni i Julia.
    • Rezultatet e faktorimit nuk janë më të kufizuara në tipet e mbështjelljes «Adjoint» dhe «Transpose». Për të janë shtuar tipet «AdjointFactorization» dhe «TranposeFactorization», të cilat vetë janë nën-lloj të «Factorization».
    • Funksionet e reja «hermitianpart» dhe «hermitianpart!» për gjetjen e pjesës hermitiane (vërtet simetrike) të matricës.
    • Metoda «norm» e matricës së transponuar të llojit «AbstractMatrix» tani, si parazgjedhje, kthen normën e matricës prind, që përputhet me sjelljen aktuale për «AbstractVectors».
    • Janë shtuar metodat për llogaritjen e vektorëve të vetë «eigen(A, B)» dhe «eigvals(A, B)» për rastin ku një nga A ose B është simetrik ose hermitian.
    • Metodat «eigvals/eigen(A, cholesky(B))» tani llogarisin vlerat e vetë të përgjithshme (vetë: dhe vektorët e vetë) A dhe B nëpërmjet dekompozimit Cholesky për B që është pozitivisht i përcaktuar.
  • Printf
    • Specifikatorët e formatit tani mbështesin gjerësinë dhe saktësinë dinamike, për shembull «%*s» dhe «%*.*g».
  • REPL
    • Kur printohet staku i gjurmimit, thellësia e tipeve të printuara në nënshkrimet e funksioneve është e kufizuar për të shmangur një dalje tepër të detajuar.
  • Test
    • Makroja «@test_broken» (ose «@test» me «broken=true») tani tregojnë një gabim nëse shprehja e testit kthen ndonjë vlerë tjetër përveç false/true.
    • Në rast gabimi gjatë thirrjes «@test» ose gabimi brenda funksionit, tani jepet një gjurmë e detajuar e katërshe, duke lejuar të kuptohet vendndodhja e testit në «@testset».
  • InteractiveUtils
    • «code_native» dhe «@code_native» tani përdorin sintaksën Intel në vend të AT&T.
    • «@time_imports» tani tregon kohën e ekzekutimit të «__init__()» për modulet e importuara.
  • Struktura të ndryshme të vjetra dhe që do të hiqen
    • Makroja «@pure» është shpallur e vjetër. Në vend të saj duhet të përdoret «Base.@assume_effects :foldable».

Burimi: opennet.ru

Bleni hostim të besueshëm për faqe me mbrojtje nga DDoS, serverë VPS VDS 🔥 Bleni hostim të besueshëm për faqe me mbrojtje nga DDoS, serverë VPS VDS | ProHoster