ĂshtĂ« publikuar versioni i gjuhĂ«s sĂ« programimit Julia 1.11, qĂ« kombinon tĂ« tilla cilĂ«si si performanca e lartĂ«, mbĂ«shtetje pĂ«r tipizimin dinamik dhe mjete tĂ« integruara pĂ«r programimin paralel. Sintaksisi i Julia-s Ă«shtĂ« i afĂ«rt me MATLAB duke huazuar disa elemente nga Ruby dhe Lisp. Metodat e manipulimit tĂ« vargjeve janĂ« tĂ« ngjashme me Perl. 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.11:
- Mundësi të reja të gjuhës
- Shtuar lloji Memory, i cili është një alternativë me nivel të ulët për llojin Array. Lloji Memory kërkon më pak burime dhe ka një ndërtues të shpejtë, duke qenë një alternativë për Array aty ku nuk nevojiten të gjitha mundësitë e tij. Për shembull, array të shumëdimensionale. Në implementimin e brendshëm, shumica e metodave të llojit Array janë implementuar mbi llojin Memory, duke e përshpejtuar ndjeshëm disa funksione, si për shembull push.
- Shtuar fjalën kyçe "public". Identifikuesit që janë të markuar si "public" merren si një ndërfaqe programore e jashtme. Identifikuesit me fjalën kyçe "export" shqyrtohen në mënyrë të ngjashme. Por ndryshimi kryesor midis "public" dhe "export" është se emrat e shënuar me "public" nuk përfshihen në kontekstin e modulit kur përdoret "using" në modulet e varura.
- Paketa ScopedValue implementon një zonë të dinamikshme të dukshmërisë kur përdoret në programim paralel Threads/tasks.
- File Manifest.toml tani mund të riemërohet në formatin Manifest-v{major}.{minor}.toml për përdorimin e një versioni specifik të Julia. Për shembull, file Manifest-v1.11.toml do të përdoret nga versioni 1.11, ndërsa file Manifest.toml në të njëjtën direktor të do të përdoret nga versionet e tjera të Julia.
- Shtuar mbështetje për Unicode 15.1.
- Ndryshime në gjuhë
- Gjatë procesit të parapërgatitjes, trajtuesi "atexit" startohet para krijimit të file-it përfundimtar. Kjo u lejon përdoruesve të mbarojnë sigurt funksionimin në sfond (për shembull, trigger-a nga një timer ose njoftime periodike), si dhe të lirojnë në mënyrë të qartë burimet para përfundimit të programit.
- File-t e mbulimit të kodit dhe të alokimit të memories nuk krijohen më gjatë në procesin e parapërgatitjes. Për më tepër, në këto nivele, cach-et pkgimage përdoren për paketat që gjithashtu nuk ndjekin. Kjo do të thotë se testet e mbulimit (me default për julia-actions/julia-runtest) përdorin cach-et pkgimage për të gjitha paketat e tjera nga të cilat varet testi. Kjo ndihmon në përshpejtimin e testimit.
- Specifikimi i rrugës në JULIA_DEPOT_PATH tani trajtohet ndryshe. Nëse ka vetëm një rrugë, vetëm kjo rrugë do të futet në vlerën e variablit të brendshëm DEPOT_PATH. Nëse simboli i fundit është ":", atëherë variabli DEPOT_PATH do të marrë një vlerë që përmban gjithçka që është specifikuar deri në ":", si dhe një listë me rrugët sistemore ku ndodhet Julia.
- File-t e cache-it të parapërgatitjes tani mund të lëvizen, dhe aktualiteti i tyre tashmë kontrollohet përmes hash-it të përmbajtjes së file-t origjinale, e jo përmes "mtime".
- Përmirësime të kompiluesit/ambientit të ekzekutimit.
- Eshte përmirësuar heuristika e mbledhësve të plehrave, duke mundësuar punën me faqe të memories në përgjithësi, në vend të objekteve individuale.
- Shtuar mbështetje për annotimin Base.@assume_effects në kod.
- Ndryshimet në parametrat e komandës
- Pika e hyrjes tani Ă«shtĂ« pĂ«rcaktuar saktĂ«sisht si Main.main(args). Pika e hyrjes duhet tĂ« pĂ«rcaktohet me makron @main (shih dokumentacionin). NĂ«se pika e hyrjes pĂ«rcaktohet nĂ« njĂ« skript qĂ« startohet nĂ« linjĂ«n e komandĂ«s (pĂ«r shembull "julia script.jl" ose "julia -e expr"), Julia do tĂ« startojĂ« funksionin Main.main automatikisht. Kjo Ă«shtĂ« bĂ«rĂ« pĂ«r tĂ« unifikuar ekzekutimin e skripteve dhe kompaktimin e tyre, kur ngarkimi i kodit mund tĂ« ndodhĂ« pĂ«r kompaktimin, dhe ekzekutimi i metodĂ«s Main.main vetĂ«m nĂ« fazĂ«n e ekzekutimit tĂ« file-it tĂ« ekzekutimit. Kur pĂ«rdorim Julia nĂ« modin interaktiv, nuk ka ndryshime. I gjithĂ« kodi ekzekutohet nĂ« mĂ«nyrĂ« tĂ« renditur. Argumentet "âcompiled-modules" dhe "âpkgimages" mund tĂ« vendosen nĂ« modin existing, qĂ« e bĂ«n JulinĂ« tĂ« pĂ«rdorĂ« cache-et ekzistuese, por tĂ« mos krijojĂ« tĂ« reja.
- Argumenti "âproject" tani mund tĂ« marrĂ« vlerĂ«n @script pĂ«r tĂ« specifikuar vendndodhjen e file-t Project.toml nĂ« lidhje me skriptin e ekzekutuar. PĂ«r shembull, "âproject=@script/foo" pĂ«r direktorinĂ« foo. NĂ«se nuk Ă«shtĂ« specifikuar asgjĂ«, pra "âproject=@script", kjo do tĂ« jetĂ« e ngjashme me "âproject=@.", kur file-i Project.toml kĂ«rkohet nĂ« direktorinĂ« aktuale.
- Ndryshimet e shumëfishta
- Në makron Threads.@threads mund të specifikohet mënyra e planifikuesit :greedy, e cila është e përshtatshme për ngarkesat e llogaritjes së pabarabartë. Struktura e re (me specifikatorin public, por jo export) "struct Base.Lockable{T, L<:AbstractLock}" përfaqëson një mbështjellës për renditjen e aksesit paralel në elementet e llojeve përbërëse, në përgjithësi duke e bërë kodin më të thjeshtë.
- Ndryshimet në sistemin e ndërtimit
- File-i Makefile për ndërtimin e Julia dhe LLVM përdor strategjitë e optimizimit PGO dhe LTO. Shih contrib/pgo-lto/Makefile.
- Funksionet e reja të bibliotekës
- TĂ« treja lloje tĂ« reja janĂ« shtuar brenda idesĂ« sĂ« tekstit me annotimin â Pair{Symbol, Any}, pĂ«r shembull ':lang => "en"' ose ':face => :magenta'. NĂ«se Ă«shtĂ« e mundur, annotimet ruajnĂ« gjatĂ« operacioneve me vargje, si concatenimi.
- Lloji specifik AnnotatedString realizon AbstractString. Ky lloj është një mbështjellës mbi varg dhe lejon të shtojë annotime sipas gamës së simboleve. Lloji AnnotatedString përdoret gjerësisht në bibliotekën e re standarde StyledStrings për të shfaqur informacion në ekran me stil.
- Lloji specifik AnnotatedChar realizon AbstractChar. ĂshtĂ« njĂ« mbĂ«shtjellĂ«s mbi njĂ« simbol dhe lejon tĂ« bashkĂ«lidhĂ« njĂ« ListĂ« annotimesh me tĂ«.
- Lloji specifik AnnotatedIOBuffer realizon IO, përsërit ndërfaqen e llojit IOBuffer, por ka metoda të specializuara për lexim/shkrim për annotimin e rrjedhës. Mund të përdoret si një ndërtues vargjesh ose si një mjet për bashkimin e vargjeve të annotuara dhe të paannotuara.
- Metoda âin!(x, s::AbstractSet)â gjithmonĂ« kthen true. Por nĂ«se elementi x nuk Ă«shtĂ« nĂ« s, atĂ«herĂ« ai do tĂ« futet.
- Funksioni i ri Libc.mkfifo është një mbështjellës i funksionit C mkfifo për platforma Unix.
- Metoda âlogrange(start, stop; length)â krijon njĂ« seri logaritmike me numrin e specifikuar, nĂ« vend tĂ« njĂ« hapi tĂ« fiksuar.
- Metodat âcopyuntil(out, io, delim)â dhe âcopyline(out, io)â kopjojnĂ« tĂ« dhĂ«na nga rrjedha io nĂ« rrjedhĂ«n out::IO.
- Metoda âeachrsplit(string, pattern)â kthen njĂ« iterues mbi elementet e ndara tĂ« vargut nga e djathta nĂ« tĂ« majtĂ«.
- Metoda Sys.username() kthen emrin e përdoruesit aktual.
- Metodat Sys.isreadable(), Sys.iswritable() mund të përdoren për të përcaktuar lejet e përdoruesit për të lexuar dhe shkruar të dhëna.
- Metoda GC.logging_enabled() kthen true nëse regjistrimi i operacioneve të mbledhësit të plehrave është aktivizuar përmes GC.enable_logging.
- Lloji IdSet tani eksporton nga Base dhe është publik.
- Makroja â@timeâ tani raporton vlerĂ«n e numĂ«ruesit tĂ« konflikteve tĂ« bllokimit, nĂ«se po pĂ«rdoret ReentrantLock, qĂ« duhet pritur. Gjithashtu Ă«shtĂ« shtuar makroja â@lock_conflictsâ, e cila kthen kĂ«tĂ« numĂ«rues.
- Makroja Base.Cartesian.@ncallkw është zhvilluar në përputhje me Base.Cartesian.@ncall, por lejon të shtoni argumente në formë të fjalëve kyçe për thirrjen e funksionit.
- Funksioni i ri Docs.hasdoc(module, symbol) tregon nëse emri i kërkuar simbol ka një përshkrim docstring.
- Funksioni i ri Docs.undocumented_names(module) kthen emrat e funksioneve të pa dokumentuara të modulit të kërkuar module.
- Veçori të reja të metodave të njohura
- Metoda invmod(n, T) për tipin e caktuar të plotë T tani llogarit inverse sipas modulusit të plotë n me një algoritëm të ri.
- Metoda invmod(n) ofron një formë të shkurtuar për thirrjen invmod(n, typeof(n)) për tipat e plotë.
- Metoda replace(string, patternâŠ) tani mbĂ«shtet njĂ« argument opsional IO pĂ«r tĂ« kthyer vlerĂ«n nĂ« njĂ« rrjedhĂ« nĂ« vend tĂ« kthimit tĂ« njĂ« vargu tĂ« tipit String.
- Metodat e reja allequal(f, itr) dhe allunique(f, itr) me argumentin e funksionit - predikati.
- Metoda sizehint!(s, n) tani mbĂ«shtet opsionin âshrinkâ qĂ« lejon çaktivizimin e prerjes sĂ« elementeve.
- Përçimi i IOBuffer si argument stdout gjatë krijimit të proceseve, tani punon me një sinkronizim të plotë "wait" ose "success", kështu që në Base.BufferStream nuk ka më nevojë për kontrollimin e disponueshmërisë.
- Metoda âclosewriteâ nuk thirret mĂ« automatikisht pĂ«r rrjedhĂ«n e dhĂ«nĂ« pas mbylljes sĂ« procesit. PĂ«rdorni metodĂ«n âwaitâ pĂ«r procesin, dhe pastaj thirrni âclosewriteâ me forcĂ«. Ose pĂ«rdorni formĂ«n e metodĂ«s open me funksione pĂ«r trajtimin automatik tĂ« mbylljes.
- Metoda â@timedâ tani po ashtu kthen vlerĂ«simin e kohĂ«s sĂ« kompilimit dhe ripĂ«rpilimit, tĂ« shkaktuar nga destabilizimi i llojeve.
- Metoda âfilterâ tani mund tĂ« punojĂ« me NamedTuple.
- Metoda Iterators.cycle(iter, n) fillon në iteraorin 'iter' një numër fiks n herë.
- Metoda zero(::AbstractArray) përdoret në mënyrë rekurzive, për shembull zero([[1,2],[3,4,5]]) prodhon [[0,0],[0,0,0]] në vend që të nxjerrë një gabim.
- Metoda include_dependency(path; track_content=true) lidh varësitë bazuar në vlerën hash të kodit të para-kompiluara, në vend të mtime.
- Ndryshimet në bibliotekën bazë
- Metoda write(::IO, ::AbstractArray) pĂ«rdoret pĂ«r thirrjen rekursive tĂ« metodave âwriteâ pĂ«r çdo element tĂ« vargut, por tani shkruan paraqitjen nĂ« memorie tĂ« çdo vlerĂ«. PĂ«r shembull, thirrja write(io, 'a':'b') do tĂ« shkruajĂ« 4 byte pĂ«r çdo simbol, nĂ« vend tĂ« paraqitjes tĂ« shkurtuar UTF-8 pĂ«r secilin prej tyre. Formati i ri Ă«shtĂ« i pĂ«rputhshĂ«m me Array, duke e bĂ«rĂ« tĂ« mundur pĂ«rdorimin e metodĂ«s âread!â pĂ«r leximin e kundĂ«rt tĂ« vlerave.
- Nuk Ă«shtĂ« e mundur tĂ« pĂ«rcaktohet metoda âlengthâ pĂ«r iteraormet me gjendje nĂ« njĂ« formĂ« tĂ« pĂ«rgjithshme. PĂ«r shkak tĂ« funksionimit tĂ« mundshĂ«m tĂ« gabuar tĂ« iteraorĂ«ve Stateful, metoda length(::Stateful) Ă«shtĂ« hequr.
- StyledStrings
- Biblioteka e re standarde për paraqitjen stilistike të vargjeve.
- Struktura Faces është një kontejner informacioni stilor (ngjyra, dekoratorë etj.), dhe ofron gjithashtu një qasje të përshtatshme, të zgjerueshme (përmes addface!) dhe të adaptueshme (duke përdorur Faces.toml të personalizuara dhe loadfaces!) për të paraqitur përmbajtjen me stile.
- Makro @styled_str ofron një mënyrë të lehtë për të krijuar vargje të annotuara AnnotatedString me atribute-stile të ndryshme. Për shembull, StyledStrings.addface!(:orange => StyledStrings.Face(foreground = 0xFF7700)) styled»{orange:kjo është teksti portokalli}»
- Libdl
- Një tip i ri LazyLibrary eksportohet nga biblioteka Libdl për krijimin e zinxhirëve të ngarkimit të vonuar të bibliotekave, të përdorura fillimisht në formatin JLL.
- LinearAlgebra
- Metoda cbrt(::AbstractMatrix{<:Real}) tani kthen një matricë me vlera reale të rrënjëve katrore për matricën hyrëse të vlerave reale.
- Metoda për llogaritjen e vlerave të tipareve «eigvals/eigen(A, bunchkaufman(B)) dhe eigvals/eigen(A, lu(B))» përdor algoritmet Bunchkaufman (LDL) dhe LU të dekompozimit B, përkatësisht, për llogaritjen efektive të vlerave të përgjithshme të tipareve (eigen: dhe eigenvectors) të A dhe B. Argumenti i dytë i metodës kalon rezultatin e metodave bunchkaufman ose lu.
- Një metodë e specializuar «eigvals/eigen(::Hermitian{<:Tridiagonal})», e cila është e dizajnuar për matrica simetrike tridiagonale dhe përdor mjetet LAPACK.
- Matricat e strukturuara tani ruajnë aksin e prindit (për Symmetric/Hermitian/AbstractTriangular/UpperHessenberg), ose aksin e diagonaleve kryesore (për matricat e shiritit).
- Metodat bunchkaufman dhe bunchkaufman! tani përcaktohen për tipet AbstractFloat, Rational dhe variacionet e tyre komplekse. Metoda bunchkaufman tani mbështet tipet Integer, duke i konvertuar ato brenda në Rational{BigInt}. Një funksion inertia është shtuar, i cili llogarit inercinë e faktorëve diagonalë të procedurës BunchKaufman për objektin e matricës simetrike reale ose Hermitian. Për matricat simetrike komplekse, metoda inertia vetëm llogarit numrin e vlerave të tipareve të faktorëve diagonalë.
- Paketa që përcakton metodën e shumëzimit të matricave mul! me nënshkrimin mul!(::AbstractMatrix, ::MyMatrix, ::AbstractMatrix, ::Number, ::Number) nuk do të kenë më paqartësi kur ndërveprojnë me paketa LinearAlgebra. Më parë, gjatë shumëzimit ndodhnin paqartësi midis tipit të matricës MyMatrix dhe matricave të strukturuara që ofrohen nga paketa LinearAlgebra, për shembull AbstractTriangular. Probleme të tilla janë eliminua për operacionet mul! me tipe matricë-vektor.
- Metodat lu dhe issuccess(::LU) tani mbështesin argumetnin allowsingular. Nëse ka vlerën true, një dekompozim i lejuar me faktor U me rang të pamjaftueshëm do të konsiderohet i suksesshëm, e jo të japë një gabim. Të tilla dekompozime tani shfaqen duke printuar faktorët me etiketim «rank-deficient», e jo mesazhin «Nuk arriti Dekompozimin».
- Rastësor
- Metoda rand tani është e aplikueshme për tipet e dhëna në formë Tuple.
- Metoda rand tani është e aplikueshme për tipet e dhëna në Pair.
- Për inicializimin fillestar të gjeneratorit të numrave të rastësishëm RNG të modulit Random tani mund të përdoren numra negativë.
- Inicializimi i gjeneratorit të numrave të rastësishëm tani mund të realizohet me një varg, për shembull seed!(rng, «një farë e rastësishme»).
- REPL
- Shtypja e çelësit Tab për përfundimin e sugjerimeve tani njihet me një shkrim të ndritshëm. Për ta çaktivizuar këtë modalitet, aplikoni Base.active_repl.options.hint_tab_completes = false në mënyrë interaktive ose në skriptin startup.jl: nëse VERSION >= v»1.11.0-0Ⳡatreplinit() bëni repl repl.options.hint_tab_completes = false përfundim
- Meta-M me një këshill të zbrazët tani ndërron modul kontekstual midis modulit të mëparshëm jo-të rëndësishëm dhe atij kryesor, duke e thjeshtuar ndërrimin në të dy anët.
- Datas
- Funksioni adjust i pa dokumentuar tani nuk eksportohesh më, por është dokumentuar.
- Statistikat
- Paketa Statistics tani është e përditësueshme pa të gjithë paketën Julia.
- Distribuar
- Metoda pmap tani përdor si parazgjedhje CachingPool.
- Metodat e plota dhe të fshira
- Metodat Base.map, Iterators.map, dhe foreach me një argument të vetëm nuk mbështeten më.
- Varësitë e jashtme
- Biblioteka libuv është përditësuar nga versioni 1.44.2 në 1.48.0.
- Metoda tput nuk përdoret më për kontrollin e mundësive të terminalit. Ajo është zëvendësuar nga mjetet e parse-it terminfo, të realizuara plotësisht në Julia.
- Terminfo përdoret si parazgjedhje. Nëse ajo mungon në sistem, Julia mund të ndërtohet me opsionin Makefile WITH_TERMINFO=0.
- Përmirësime të mjeteve
- CI tani kryen një kontroll të kufizuar automatizimi të tipareve në të gjitha kërkesat për bashkim.
Burimi: opennet.ru
