ĂshtĂ« publikuar lĂ«shimi i gjuhĂ«s sĂ« programimit Julia 1.7, qĂ« kombinon cilĂ«si tĂ« tilla si performancĂ« e lartĂ«, mbĂ«shtetje pĂ«r tipizimin dinamik dhe mjete tĂ« ndĂ«rtuara pĂ«r programimin paralel. Sintaksa e Julia-s Ă«shtĂ« e ngjashme me MATLAB, duke huazuar disa elemente nga Ruby dhe Lisp. Metoda e manaxhimit tĂ« vargjeve i ngjan Perl.
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.
Mundësitë e reja të gjuhës Julia 1.7:
- Sintaksa e re për krijimin e arra-ve shumëdimensionale. Simbolet e pikës së katërshikimit së bashku përdoren për të ndarë dimensionet e array-t, ndërsa numri i pikave të katërshikimit tregon madhësinë. Për shembull, një pikë katërshikimi në '[A; B]' do të thotë konkatenim në dimensionin e parë (për vertikalisht në një array njëdimensionale), dy pika katërshikimi '[A;; B]' e bëjnë këtë në dimensionin e dytë (për horizontalisht si një rresht të ri të matricës), tri pika katërshikimi ';;;' në të tretin, etj.
- Shenja e prapme (\) në fund të një rreshti brenda literalit të vargut tani fshin simbolin e kalimit në rresht dhe hapësirat. Kjo mund të përdoret për të ndarë rreshta të gjatë në disa rreshta kodi pa shtuar simbole shtesë.
- Shenja e mbrapsht dhe e pjerrĂ«t para njĂ« rreshti tĂ« ri nĂ« literalet e komandave tĂ« konsolĂ«s `cmd \âŠ` tani gjithmonĂ« fshin rreshtin e ri dhe e interpreton sekuencĂ«n si njĂ« literal string tĂ« vazhdueshĂ«m, ndĂ«rsa rezultati mĂ« parĂ« nuk ishte qartĂ« i pĂ«rcaktuar.
- Shprehja «(; a, b) = x» për të krijuar variablat e veçantë a dhe b nga x. Ky sintaksë është ekuivalente me «a = getproperty(x, :a); b = getproperty(x, :b)».
- ShumĂ«zimi implicit tani lejohet pĂ«r simbolet e radikove (p.sh., xây dhe xây).
- Operatorët logjikë «&&» dhe «||» tani mund të përdoren në lidhje me elementët e array-it në formën «.&&» dhe «.||».
- OperatorĂ«t â«Ș(U + 2AEA, \Top, \downvDash) dhe â««(U + 2AEB, \Bot, \upvDash, \indep) tani mund tĂ« pĂ«rdoren si operatorĂ« binarĂ«.
- Shtuar opsioni «âcheck-bounds=yes|no|auto» pĂ«r kontrollin e makrove @inbounds me vlerĂ«simin e parazgjedhur auto.
Ndryshimet e gjuhës
- Generatori i numrave të rastit, i caktuar si i parazgjedhur, është ndryshuar nga Mersenne Twister në Xoshiro256++. Kështu, të gjithë numrat e rastit do të jenë të ndryshëm (edhe nëse përdoret i njëjti numër fillestar), përveç nëse përdoret një objekt RNG i qartë. Ky gjenerues ka performancë më të mirë, karakteristika të shkëlqyera statistikore dhe përdoret për rastësi të riprodhueshme në programet me shumë procese (ruan gjendjen për çdo detyrë që ekzekutohet dhe deformon një gjendje të veçantë kur krijon një detyrë të re).
- Destrukturimi nuk ndryshon më vlerat gjatë procesit të caktimit të anës së majtë kur merret vlera nga ankesa e së djathtës. Për shembull, për masën x, shprehja "x[2], x[1] = x" tani do të shkëmbejë vendet e elementëve të parë dhe të dytë x, ndërsa më parë për të plotësuar të dyja regjistrat përdorej x[1] sepse x[2] ndryshonte gjatë iteracionit të caktimit të x.
- macroexpand, @macroexpand dhe @macroexpand1 tani nuk gjenerojnë më gabimin LoadError. @test_throws gjithashtu është ndryshuar për të ruajtur funksionimin e testeve të prekur.
- Pika e mesme «·» ( \cdotpU + 00b7) dhe interpunkti grek ·(U + 0387) tani trajtohen si ekuivalente tĂ« operatorit tĂ« pikĂ«s «â » (\cdotU + 22c5).
- Shenje e minusit «â» (\minusU + 2212) tani konsiderohet si ekuivalente e shenjĂ«s sĂ« defisit-minusi «-» (U + 002d).
- Iterators.peel(itr) tani kthen «nothing» kur itr është bosh, dhe nuk hedh më një përjashtim BoundsError.
- Disa pika përsëritëse me ndalesa në shprehjen e array-t më parë injoroheshin (p.sh., «[1 ;; 2] == [1 ; 2]»). Tani ky sintaks është përdorur për ndarjen e dimensioneve.
- Direktivët e formatimit të pa balances «#= ⊠=#» në Unicode tani ndalohen në stringje dhe komentet, për të zvogëluar mundësinë e injeksioneve të kodit parse/eval.
Ndryshimet në parametrat e komandës
- Parametri julia âproject dhe variabla e mjedisit JULIA_PROJECT tani mbĂ«shtesin zgjedhjen e mjediseve tĂ« zakonshme. PĂ«r shembull, tani janĂ« ekuivalente me julia âproject=@myenv dhe export JULIA_PROJECT=»@myenv».
Ndryshime në shumëprona
- Funksionet e brendshme për operacionet me tregues atomik tani janë të përcaktuara për madhësi të caktuara byte.
- Shtuar mbështetje për shpalljen dhe përdorimin e fushave të veçanta për mutable struct si atomikë; shihni makron e re @atomic.
- Nëse për variablën e mjedisit JULIA_NUM_THREADS është caktuar vlera «auto», atëherë numri i tytave do të jetë i barabartë me numrin e tytave të procesorit.
- Ădo objekt Task ka njĂ« gjendje lokale tĂ« generatorit tĂ« numrave tĂ« rastit, i cili pĂ«r nga e drejta siguron ekzekutimin e kodit tĂ« simulimit paralel nĂ« mĂ«nyrĂ« reproducibile (tĂ« pavarur nga programi). Generatorja e paracaktuar gjithashtu punon paralelisht ndjeshĂ«m mĂ« shpejt se versionet e mĂ«parshme.
- Të gjitha detyrat tani mund të lëvizin midis tytave. Më parë, një detyrë gjithmonë fillonte në atë tytë që e kishte aktivizuar për herë të parë.
Funksionet e reja të bibliotekës
- Metodat findmax(f, domain), argmax(f, domain) dhe versionet përkatëse me «min» me dy argumente janë shtuar.
- isunordered(x) kthen true, nëse x është një vlerë që duhet të jetë e paordenuar, siç janë NaN ose missing.
- Funksioni i ri keepat!(vector, inds), i cili është ekuivalenti i vector[inds] i listës inds të numrave të plotë.
- Metoda lock(f, lck) për dy argumente tani pranon Channel si argumentin e dytë.
- Funktori i ri Returns(value) kthen value për çdo argument.
- Makrotë e reja @something dhe @coalesce, të cilat janë versionet e diçkaje dhe coalesce, përkatësisht.
- Funksioni i ri redirect_stdio për të redaktuar stdin, stdout dhe stderr.
- Makroja e re «Base.@invoke f(arg1::T1, arg2::T2; kwargsâŠ)» siguron njĂ« sintaksĂ« tĂ« thjeshtĂ« pĂ«r thirrjen «invoke(f, Tuple{T1,T2}, arg1, arg2; kwargsâŠ)».
- Makroja e re «Base.@invokelatest f(argsâŠ; kwargsâŠ)» ofron njĂ« mĂ«nyrĂ« tĂ« rehatshme pĂ«r tĂ« thirrur «Base.invokelatest(f, argsâŠ; kwargsâŠ)».
Mundësi të reja në bibliotekë
- Të dhënat mund të krijohen me fjalën kyçe context në formatin «:key => value», për të specifikuar atributet për t'u kaluar në IOContext.
- bytes2hex dhe hex2bytes tani nuk kufizohen më në argumentet e tipit «Union{String,AbstractVector{UInt8}}» dhe tani kërkojnë vetëm që tipet të jenë sekonda dhe të kenë një gjatësi të matshme.
- stat(file) tani ka një metodë show më të detajuar dhe të lehtë për t'u përdorur.
Ndryshime në bibliotekën eståndar
- count dhe findall tani pranojnë argumentin AbstractChar për të kërkuar një simbol në string.
- Metodat e reja range(start, stop) dhe range(start, stop, length).
- range tani mbështet start si argument të opsionalizuar.
- Disa operacione me intervalet tani kthejnë StepRangeLen në vend të StepRange duke lejuar një hap zero. Më parë λ .* (1:9) shkaktonte një gabim kur λ = 0.
- islowercase dhe isuppercase tani trajtojnë kategoritë Unicode të regjistrit të vogël dhe të madh.
- funksionet iseven dhe isodd tani mbështesin tipe të ndryshme nga Integer.
- escape_string tani pranon një grup simboresh përmes fjalës kyçe keep, për simbolet që duhet të mbeten të paprekura.
- getindex për NamedTuple tani pranon një tuple simboresh për indeksimin e shumë vlerave.
- Nën-tipat AbstractRange ndjekin sjelljen e zakonshme të indeksimit të masivave kur indeksohen Bool, duke shkaktuar gabime për skalarët Bool dhe duke trajtuar masivët (përfshirë ranges) Bool si indekse logjike.
- keys(::RegexMatch) kthen çelësat e kapjes së shprehjeve të zakonshme sipas emrit, ose sipas indeksit nëse emrat nuk ekzistojnë.
- keys(::Generator) kthen çelësat e iteratorit.
- RegexMatch tani është i iterueshëm, duke nxjerrë në pah nënshtresa të kapura.
- lpad/rpad janë caktuar për textwidth.
- Test.@test tani pranon tani emëruar broken dhe skip, të cilat përsërisin sjelljen e Test.@test_broken dhe Test.@test_skip, por lejojnë kalimin e testeve që dështojnë vetëm në kushte të caktuara. Për shembull, nëse T == Float64, mund të zëvendësohet @test_broken isequal(complex(one(T)) / complex(T(Inf), T(-Inf)), complex(zero(T), zero(T))) me ndjekësin @test isequal(complex(one(T)) / complex(T(Inf), T(-Inf)), complex(zero(T), zero(T))). Në fund, mund të zëvendësohet me @test isequal(complex(one(T)) / complex(T(Inf), T(-Inf)), complex(zero(T), zero(T))) broken=(T == Float64)
- @lock tani eksportohet nga Base.
- Funksioni eksperimental Base.catch_stack() është rinomin për të qenë current_exceptions() dhe tani ka një tip të caktuar të vlerës së kthyer.
- Disa funksione trigonometrike (sind, cosd, tand, asind, acosd, asecd, acscd, acotd, atand) tani pranojnë një matricë katrore.
- replace(::String) tani pranon disa pattern-e që do të aplikohen nga majtas-drejt në mënyrë të njëkohshme, kështu që një simbol do të aplikojë vetëm një pattern, dhe pattern-et do të aplikohen vetëm në tekstin hyrës, por jo në zëvendësimet e tyre të tërë.
- Funksioni length për intervalet e caktuar të tipeve nuk kontrollon më mbivlerësimin e integerave në shumicën e rasteve. checked_length është një funksion i ri që përdor aritmetikën e verifikuar deri në pikën e mbivlerësimit, nëse rezultati mund të ketë mbivendosje. Ose përdorni paketën SaferIntegers.jl, nëse ka rrezik për mbivlerësim të intervalit.
- Metodat e reja replace për të zëvendësuar elementët në Tuple.
Menaxheri i paketave
- Në modalitetin e konsolës «julia>» për paketat që përdorin ose importojnë që nuk janë instaluar, por janë të disponueshme në regjistrin «pkg> add», sugjerohet të instalohet paketa automatikisht.
- Manifest.toml përdor një format të ri me metadatat e reja, duke përfshirë versionin e julia që gjeneroi manifestin. Mënyrat e vjetra të formatit akoma mbështeten në formatin origjinal, deri sa përdoruesi të përmbushë Pkg.upgrade_manifest().
- «pkg> precompile» tani do të parakompozojë versionet e reja të paketimeve që janë tashmë të ngarkuara, dhe jo t'i shtyjë ato deri në seancën tjetër.
- «pkg> rm, pin dhe free» tani mbĂ«shtesin argumentin «âall» pĂ«r tĂ« kryer veprimin pĂ«r tĂ« gjitha paketat nĂ« tĂ« njĂ«jtĂ«n kohĂ«.
- Regjistrat e ngarkuar nga Pkg Server (jo git) nuk janë më të shkarkueshme në skedarë, por lexohen drejtpërdrejt nga arkivi në memorie. Për të çaktivizuar këtë funksion, vendosni variablin e mjedisit JULIA_PKG_UNPACK_REGISTRY=true.
- Tani mund të përdorni një skedar ekzekutues të jashtëm git në vend të librit libgit2 si parazgjedhje për shkarkimet që ndodhin përmes protokollit Git, duke vendosur variablin e mjedisit JULIA_PKG_USE_CLI_GIT=true.
- Regjistrat e ngarkuar nga server Pkg (jo git) tani konsiderohen të paprekshëm. Ndryshimet e bëra manualisht në skedarët e tyre mund të mos pranohen nga seanca e Pkg në funksion.
- Shtimi i pakove sipas emrit të katalogut në mënyrën REPL tani kërkon të shtohet «./» në emrin, nëse paketa ndodhet në katalogun aktual; për shembull, «add ./Package» në vend të «add Package». Kjo është bërë për të evituar konfuzionin midis emrit të paketës Package dhe katalogut lokal Package.
- Fjalën kyçe mode për PackageSpec e hequr.
Algebra lineare
- Përdorni Libblastrampoline për të lidhur BLAS dhe LAPACK në kohën e ekzekutimit. Nga parazgjedhja, OpenBLAS lidhet në përbërjen e distribucionit Julia. Mekanizmi i ri i lidhjes mund të përdoret për të zëvendësuar BLAS dhe LAPACK me konfigurime të personalizuara.
- Në aarch64, OpenBLAS tani përdor ILP64 BLAS, ashtu si të gjitha platformat e tjera 64-bit.
- OpenBLAS është azhurnuar në versionin 0.3.13.
- SuiteSparse është azhurnuar në versionin 5.8.1.
- Forma e matricës UpperHessenberg ruhet gjatë operacioneve të caktuara aritmetike, për shembull, gjatë shumëzimit ose ndarjes me një matricë UpperTriangular.
- Faktorizimet reale quasi-triangle të Shurës tani mund të konvertohen në formën komplekse të sipërme triangulare me shprehjen "Schur{Complex}(S)".
- cis(A) tani mbështet matricat si argumente.
- dot mbështet UniformScaling për tipin AbstractMatrix.
- qr[!] dhe lu[!] tani mbështesin vlerat LinearAlgebra.PivotingStrategy të tipit elementar si një argument pivot të opsional: vlerat e parazgjedhura janë qr(A, NoPivot()) krahasuar me qr(A, ColumnNorm()) me pivot dhe lu(A, RowMaximum()) krahasuar me lu(A, NoPivot()) pa pivot. Thirrjet e mëparshme Val{true/false} janë dëmtuar.
- det(M::AbstractMatrix{BigInt}) thërret det_bareiss(M), i cili përdor algoritmin Bareiss për të llogaritur vlerat e sakta.
REPL
- Rreshtat e gjatë tani fshihen duke përdorur sintaksën "head" ⯠12345 bytes ⯠"tail" gjatë shfaqjes në REPL.
- Ngarkimi i shembujve Repl nga clipboard në REPL tani mbështet të gjitha reformat Repl (julia, pkg, shell, help?) dhe mënyra kalon automatikisht.
- «help?>» për modulat pa rreshta dokumentacioni tani kthen një listë emrash të eksportuar dhe nxjerr përmbajtjen e README.md të lidhur nëse është gjetur.
SparseArrays
- Metoda e re sizehint!(::SparseMatrixCSC, ::Integer).
- cholesky() tani ruan plotësisht përshtatjen e përdoruesit të caktuar.
- issparse tani aplikohet me konsistencë për të gjithë masat e mbuluara, duke përfshirë ato të shpërndara, përmes verifikimit të issparse të masës prind të mbulesës.
Manipulimi i datave
- Funksioni Dates.periods mund të përdoret për të marrë vlera Vector nga Period nga CompoundPeriod.
Shkarkimet
- Nëse titulli i cookie është vendosur në kërkesën e ridrejtimit, cookie tani do të dërgohet në kërkesat e mëpasshme.
- Nëse skedari ~/.,netrc ekziston, ai përdoret si burim fqish për faqet e internetit me autentifikim.
- Indikimi i emrit të serverit tani kryhet me të gjitha lidhjet TLS, edhe nëse identiteti i serverit nuk verifikohet (shih NetworkOptions).
- Kur kontrolloni lidhjet TLS në Windows, nëse server Shqetësimi i certifikatave nuk është në dispozicion, lidhja e lejuar; kjo përputhet me ato që bëjnë aplikacione të tjera dhe si kryhet revokimi në macOS.
- Tani ka një pritje prej 30 sekondash për lidhjen dhe 20 sekonda për dërgimin e të dhënave. Kjo garanton që lidhjet janë të gjalla, përndryshe ato do të çaktivizohen për më pak se një minutë.
Tar
- Tar.extract tani injoron modin e saktë të lejimeve në tarball dhe normalizon modet njësoj si Tar.create. Kjo është e ngjashme me git.
- Funksionet qĂ« pĂ«rdorin arkivat tar tani pĂ«rpunojnĂ« lidhjet e forta: qĂ«llimi i lidhjes duhet tĂ« jetĂ« njĂ« skedar i parĂ« i parĂ«; Tar.list rendit njĂ« hyrje me llojin :hardlink dhe fushĂ«n .link qĂ« tregon rrugĂ«n drejt qĂ«llimit; funksione tĂ« tjera â Tar.extract, Tar.rewrite, Tar.tree_hash â kthejnĂ« lidhjen e fortĂ« nĂ« njĂ« kopje tĂ« skedarit tĂ« qĂ«llimit.
- Formati standard, i krijuar nga Tar.create dhe Tar.rewrite tani përfshin hyrje për katalogët e pa të zbrazët. Disa mjete që përdorin tarball (përfshirë dockern), ngatërrohen për shkak të mungesës së këtyre hyrjeve në katalog.
- Tar tani pranon tarball me hapësira fillestare në fushat e titullit të numrave të plotë në oktal: teknisht, ky është një format i papranueshëm sipas specifikimeve POSIX, por komandat e vjetra tar të Solaris krijuan këto arkiva, prandaj ky format vërtet ndodhet në natyrë dhe duket se është e përshtatshme ta pranojmë.
- Tar.extract tani pranon argumentin e fjalës kyçe set_permissions, i cili për default është true; nëse false dërgohet në vend të tij, lejet e skedarëve të nxjerra nuk ndryshohen gjatë nxjerrjes.
Mmap
- mmap tani eksportohen dhe janë të disponueshëm për përdorim.
DelimitedFiles
- Readdlm tani për default përdor use_mmap=false në të gjitha sistemet operative për të siguruar qëndrueshmëri të qëndrueshme në situatat anormale me sistemin e skedarëve.
Burimi: opennet.ru
