Ir pieejams Julia 1.8 programmÄÅ”anas valodas izlaidums, kas apvieno tÄdas Ä«paŔības kÄ augsta veiktspÄja, atbalsts dinamiskai rakstÄ«Å”anai un iebÅ«vÄti rÄ«ki paralÄlai programmÄÅ”anai. JÅ«lijas sintakse ir tuva MATLAB, dažus elementus aizÅemoties no Ruby un Lisp. StÄ«gu manipulÄcijas metode atgÄdina Perl. Projekta kods tiek izplatÄ«ts saskaÅÄ ar MIT licenci.
GalvenÄs valodas iezÄ«mes:
- Augsta veiktspÄja: viens no galvenajiem projekta mÄrÄ·iem ir sasniegt C programmÄm tuvu veiktspÄju. Julia kompilators ir balstÄ«ts uz LLVM projektu un Ä£enerÄ efektÄ«vu vietÄjo maŔīnkodu daudzÄm mÄrÄ·a platformÄm;
- Atbalsts dažÄdÄm programmÄÅ”anas paradigmÄm, ieskaitot objektorientÄtas un funkcionÄlÄs programmÄÅ”anas elementus. Standarta bibliotÄka nodroÅ”ina funkcijas asinhronai ievadei/izvadÄ«Å”anai, procesu pÄrvaldÄ«bai, reÄ£istrÄÅ”anai, profilÄÅ”anai un pakotÅu pÄrvaldÄ«bai, cita starpÄ;
- DinamiskÄ rakstÄ«Å”ana: valodai nav nepiecieÅ”ama precÄ«za mainÄ«go tipu definÄ«cija pÄc analoÄ£ijas ar skriptu programmÄÅ”anas valodÄm. Atbalsta interaktÄ«vo režīmu;
- PÄc izvÄles iespÄja skaidri norÄdÄ«t veidus;
- Sintakse, kas ir lieliski piemÄrota skaitliskiem aprÄÄ·iniem, zinÄtniskiem aprÄÄ·iniem, maŔīnmÄcÄ«Å”anÄs sistÄmÄm un datu vizualizÄcijai. Atbalsts daudziem skaitliskiem datu tipiem un rÄ«kiem aprÄÄ·inu paralÄlinÄÅ”anai.
- IespÄja tieÅ”i izsaukt funkcijas no C bibliotÄkÄm bez papildu slÄÅiem.
GalvenÄs izmaiÅas JÅ«lijÄ 1.8:
- Jaunas valodas funkcijas
- MainÄmÄs struktÅ«ras laukus tagad var anotÄt kÄ konstantes, lai novÄrstu to mainÄ«Å”anu un nodroÅ”inÄtu optimizÄciju.
- Tipa anotÄcijas var pievienot globÄlajiem mainÄ«gajiem.
- TukÅ”us n-dimensiju masÄ«vus var izveidot, izmantojot vairÄkus semikolus kvadrÄtiekavÄs, piemÄram, "[;;;]" izveido 0x0x0 masÄ«vu.
- IzmÄÄ£inÄÅ”anas blokiem tagad pÄc izvÄles var bÅ«t cits bloks, kas tiek izpildÄ«ts uzreiz aiz galvenÄs daļas, ja nav izmestas kļūdas.
- @inline un @noinline var ievietot funkcijas pamattekstÄ, ļaujot anotÄt anonÄ«mu funkciju.
- @inline un @noinline tagad var lietot funkcijai izsaukuma vietnÄ vai blokÄ, lai piespiestu iekļaut (vai neiekļaut) atbilstoÅ”os funkciju izsaukumus.
- ā, ā un ā ir atļauti kÄ identifikÄcijas rakstzÄ«mes.
- Pievienots Unicode 14.0.0 specifikÄcijas atbalsts.
- Metodi Module(:name, false, false) var izmantot, lai izveidotu moduli, kas nesatur nosaukumus, neimportÄ Base vai Core un nesatur atsauci uz sevi.
- Valodas izmaiÅas
- Jaunizveidotajiem uzdevumu objektiem (@spawn, @async u.c.) tagad ir world_age metodÄm no vecÄkuzdevuma izveides, kas ļauj optimizÄt izpildi. IepriekÅ”ÄjÄ aktivizÄcijas opcija ir pieejama, izmantojot metodi Base.invokelatest.
- Unikoda nelÄ«dzsvarotÄs divvirzienu formatÄÅ”anas direktÄ«vas tagad ir aizliegtas virknÄs un komentÄros, lai izvairÄ«tos no injekcijÄm.
- Base.ifelse tagad ir definÄta kÄ vispÄrÄ«ga funkcija, nevis iebÅ«vÄta funkcija, kas ļauj pakotnÄm paplaÅ”inÄt tÄs definÄ«ciju.
- Katra globÄlÄ mainÄ«gÄ pieŔķirÅ”ana tagad vispirms tiek aicinÄta konvertÄt(JebkurÅ”, x) vai konvertÄt(T, x), ja globÄlajam mainÄ«gajam tika deklarÄts T tipa. Pirms globÄlo mainÄ«go izmantoÅ”anas pÄrliecinieties, vai nemainÄ«gais mainÄ«gais konvertÄ(Any , x) === x vienmÄr ir patiess, pretÄjÄ gadÄ«jumÄ tas var izraisÄ«t neparedzÄtu uzvedÄ«bu.
- IebÅ«vÄtÄs funkcijas tagad ir lÄ«dzÄ«gas vispÄrÄ«gajÄm funkcijÄm, un tÄs var programmatiski uzskaitÄ«t, izmantojot metodes.
- Kompilatora/izpildlaika uzlabojumi
- SÄknÄÅ”anas laiks samazinÄts par aptuveni 25%.
- Uz LLVM balstÄ«tais kompilators ir atdalÄ«ts no izpildlaika bibliotÄkas jaunÄ bibliotÄkÄ libjulia-codegen. Tas tiek ielÄdÄts pÄc noklusÄjuma, tÄpÄc parastas lietoÅ”anas laikÄ nevajadzÄtu bÅ«t izmaiÅÄm. Izvietojumos, kuriem nav nepiecieÅ”ams kompilators (piemÄram, sistÄmas attÄli, kuros ir iepriekÅ” kompilÄts viss nepiecieÅ”amais kods), Å”o bibliotÄku (un tÄs LLVM atkarÄ«bu) var vienkÄrÅ”i izlaist.
- NosacÄ«tÄ tipa secinÄjumi tagad ir iespÄjami, nododot argumentu metodei. PiemÄram, Base.ifelse(isa(x, Int), x, 0) atgriež ::Int pat tad, ja x veids nav zinÄms.
- SROA (agregÄtu skalÄrÄ aizstÄÅ”ana) ir uzlabota: novÄrÅ” getfield zvanus ar pastÄvÄ«giem globÄliem laukiem, novÄrÅ” mainÄ«gas struktÅ«ras ar neinicializÄtiem laukiem, uzlabo veiktspÄju un ligzdotu getfield zvanu apstrÄdi.
- Tipa secinÄjumi izseko dažÄdus efektus ā blakusparÄdÄ«bas un nenokriÅ”anu. Tiek Åemta vÄrÄ pastÄvÄ«ga izplatÄ«Å”ana, kas ievÄrojami uzlabo kompilÄÅ”anas laika veiktspÄju. Dažos gadÄ«jumos, piemÄram, izsaukumi uz funkcijÄm, kuras nevar iekļaut, bet neietekmÄ rezultÄtu, izpildes laikÄ tiks atmesti. Efektu noteikumus var pÄrrakstÄ«t manuÄli, izmantojot makro Base.@assume_effects.
- IepriekÅ”Äja kompilÄcija (ar precÄ«zÄm pirmskompilÄcijas direktÄ«vÄm vai noteiktÄm darba slodzÄm) tagad ietaupa vairÄk tipa definÄta koda, tÄdÄjÄdi nodroÅ”inot ÄtrÄku pirmo izpildi. Visas jaunas metodes/tipu kombinÄcijas, kas nepiecieÅ”amas jÅ«su pakotnei, neatkarÄ«gi no tÄ, kur Ŕīs metodes tika definÄtas, tagad var tikt saglabÄtas keÅ”atmiÅÄ pirmskompilÄcijas failÄ, ja tÄs izsauc jÅ«su pakotnei piederoÅ”a metode.
- Komandrindas parametru izmaiÅas
- NoklusÄjuma darbÄ«ba @inbounds deklarÄciju pÄrraudzÄ«bai tagad ir automÄtiskÄ opcija sadaÄ¼Ä "--check-bounds=yes|no|auto".
- Jauna opcija "--strip-metadata", lai, veidojot sistÄmas attÄlu, noÅemtu dokumentu virknes, avota atraÅ”anÄs vietas informÄciju un vietÄjo mainÄ«go nosaukumus.
- Jauna opcija "--strip-ir", lai ļautu kompilatoram noÅemt starpposma pirmkoda attÄlojumu, veidojot sistÄmas attÄlu. IegÅ«tais attÄls darbosies tikai tad, ja tiks izmantots "--compile=all" vai arÄ« viss nepiecieÅ”amais kods ir iepriekÅ” kompilÄts.
- Ja faila nosaukuma vietÄ ir norÄdÄ«ta rakstzÄ«me "-", izpildÄmais kods tiek nolasÄ«ts no standarta ievades straumes.
- Daudzpavedienu atbalsta izmaiÅas
- Threads.@threads pÄc noklusÄjuma izmanto jauno plÄnoÅ”anas opciju :dynamic, kas atŔķiras no iepriekÅ”ÄjÄ režīma ar to, ka iterÄcijas tiks dinamiski ieplÄnotas pieejamos darbinieka pavedienos, nevis pieŔķirtas katram pavedienam. Å is režīms ļauj labÄk izplatÄ«t ligzdotÄs cilpas ar @spawn un @threads.
- Jaunas bibliotÄkas funkcijas
- everysplit(str), lai izpildÄ«tu split(str) vairÄkas reizes.
- allequal(itr), lai pÄrbaudÄ«tu, vai visi iteratora elementi ir vienÄdi.
- hardlink(src, dst) var izmantot, lai izveidotu cietÄs saites.
- setcpuaffinity(cmd, cpus), lai iestatÄ«tu procesora kodola afinitÄti pret palaistajiem procesiem.
- diskstat(path=pwd()), lai iegūtu diska statistiku.
- Jauns @showtime makro, lai parÄdÄ«tu gan novÄrtÄto rindu, gan @time atskaiti.
- LazyString un lazy"str" makro ir pievienoti, lai atbalstÄ«tu kļūdu ziÅojumu slinku veidoÅ”anu kļūdu ceļos.
- NovÄrsta vienlaicÄ«bas problÄma programmÄ Dict un citos atvasinÄtos objektos, piemÄram, taustiÅos (::Dict), vÄrtÄ«bÄs (::Dict) un Set. IterÄcijas metodes tagad var izsaukt vÄrdnÄ«cÄ vai kopÄ, ja vien nav izsaukumu, kas modificÄ vÄrdnÄ«cu vai kopu.
- @time un @timev tagad ir neobligÄts apraksts, kas, piemÄram, ļauj anotÄt laika atskaites avotu. @time "NovÄrtÄjot foo" foo().
- diapazons kÄ vienÄ«go atslÄgvÄrda argumentu izmanto stopu vai garumu.
- precizitÄte un setprecision tagad pieÅem bÄzi kÄ atslÄgvÄrdu
- TCP ligzdas objekti tagad nodroÅ”ina closewrite metodi un atbalsta pusatvÄrtÄ režīma izmantoÅ”anu.
- extrema tagad pieÅem init argumentu.
- Iterators.countfrom tagad pieÅem jebkuru veidu, kas definÄ + metodi.
- @time tagad pieŔķir % laika, kas pavadÄ«ts metožu pÄrkompilÄÅ”anai ar mainÄ«tiem veidiem.
- Standarta bibliotÄkas izmaiÅas
- AtslÄgas ar vÄrtÄ«bu Nekas tagad tiek noÅemtas no vides programmÄ addenv.
- Iterators.reverse (un tÄpÄc pÄdÄjais) atbalsta katru rindiÅu.
- Garuma funkcija noteiktu veidu diapazoniem vairs nepÄrbauda veselu skaitļu pÄrpildÄ«Å”anu. Ir pieejama jauna funkcija checked_length; tÄ satur bitu pÄrsÅ«tÄ«Å”anas vadÄ«bas loÄ£iku. Ja nepiecieÅ”ams, izmantojiet SaferIntegers.jl, lai izveidotu diapazona veidu.
- Iterators.Reverse iterators Ä«steno katru indeksa apvÄrÅ”anu, ja iespÄjams.
- Iepakojuma pÄrvaldnieks
- Jauni ā un ā indikatori blakus pakotnÄm statusÄ āpkg>ā, kurÄm ir pieejamas jaunas versijas. ā norÄda, ka nevar instalÄt jaunas versijas.
- Jauns novecojis::Bool arguments Pkg.status (--novecojis vai -o REPL režīmÄ), lai parÄdÄ«tu informÄciju par pakotnÄm no iepriekÅ”ÄjÄm versijÄm.
- Jauns compat::Bool arguments Pkg.status (--compat vai -c REPL režīmÄ), lai parÄdÄ«tu visus [compat] ierakstus Project.toml.
- Jauns "pkg>compat" (un Pkg.compat) režīms projektu saderÄ«bas ierakstu iestatÄ«Å”anai. NodroÅ”ina interaktÄ«vu redaktoru, izmantojot "pkg> compat", vai tieÅ”u ierakstu vadÄ«bu, izmantojot "pkg> Foo 0.4,0.5, 0.4,0.5", kas var ielÄdÄt paÅ”reizÄjos ierakstus, aizpildot cilni. Tas nozÄ«mÄ, ka "pkg> compat Fo" tiek automÄtiski atjauninÄts uz "pkg> Foo XNUMX", lai varÄtu rediÄ£Ät esoÅ”o ierakstu.
- Pkg tagad tikai mÄÄ£ina lejupielÄdÄt pakotnes no pakotÅu servera, ja serveris uzrauga reÄ£istru, kurÄ ir pakotne.
- Pkg.instantiate tagad izdos brÄ«dinÄjumu, kad Project.toml nav sinhronizÄts ar Manifest.toml. Tas tiek darÄ«ts, pamatojoties uz projekta deps un compat ierakstu jaukÅ”anu (citi lauki tiek ignorÄti) manifestÄ, to atrisinot, lai visas Project.toml deps vai compat ierakstu izmaiÅas varÄtu noteikt bez atkÄrtotas atrisinÄÅ”anas.
- Ja "pkg>add" nevar atrast pakotni ar norÄdÄ«to nosaukumu, tÄ tagad ieteiks pakotnes ar lÄ«dzÄ«giem nosaukumiem, kuras var pievienot.
- ManifestÄ saglabÄtajÄ julia versijÄ vairs nav iekļauts bÅ«vÄjuma numurs, kas nozÄ«mÄ, ka galvenÄ versija tagad tiks rakstÄ«ta kÄ 1.9.0-DEV.
- PÄrbaudes pÄrtraukums "pkg>" tagad tiks noteikts konsekventÄk un tiks pareizi atgriezts REPL.
- InteractiveUtils
- Jauns @time_imports makro, lai ziÅotu par laiku, kas pavadÄ«ts, importÄjot pakotnes un to atkarÄ«bas, izceļot kompilÄÅ”anas un atkÄrtotas kompilÄÅ”anas laiku kÄ importa procentuÄlo daļu.
- LineÄrÄ algebra
- BLAS apakÅ”modulis tagad atbalsta 2. lÄ«meÅa BLAS spr! funkcijas.
- LinearAlgebra.jl standarta bibliotÄka tagad ir pilnÄ«bÄ neatkarÄ«ga no SparseArrays.jl gan no pirmkoda, gan no vienÄ«bu testÄÅ”anas viedokļa. LÄ«dz ar to retie masÄ«vi vairs netiek atgriezti (netieÅ”i) ar LinearAlgebra metodÄm, kas tiek lietotas Base vai LinearAlgebra objektiem. Tas jo Ä«paÅ”i izraisa Å”Ädas bÅ«tiskas izmaiÅas:
- Savienojumi, izmantojot Ä«paÅ”as "retÄs" matricas (piemÄram, diagonÄles), tagad atgriež blÄ«vas matricas; TÄ rezultÄtÄ SVD objektu lauki D1 un D2, kas izveidoti ar getproperty izsaukumiem, tagad ir blÄ«vas matricas.
- LÄ«dzÄ«gÄ (::SpecialSparseMatrix, ::Type, ::Dims) metode atgriež blÄ«vu nulles matricu. TÄ rezultÄtÄ divu, trÄ«s un simetrisku trÄ«sdiagonÄlu matricu produkti savÄ starpÄ rada blÄ«vu matricu. TurklÄt lÄ«dzÄ«gu matricu izveidoÅ”ana ar trim argumentiem no Ä«paÅ”Äm "retÄm" matricÄm no (nestatiskÄm) matricÄm tagad neizdodas "zero(::Type{Matrix{T}})" dÄļ.
- Printf
- %s un %c tagad izmanto teksta platuma argumentu, lai formatÄtu platumu.
- Profils
- CPU slodzes profilÄÅ”ana tagad reÄ£istrÄ metadatus, tostarp pavedienus un uzdevumus. Profile.print() ir jauns arguments groupby, kas ļauj grupÄt pavedienus, uzdevumus vai apakÅ”pavedienus/uzdevumus, uzdevumus/pavedienus un pavedienu un uzdevumu argumentus, lai nodroÅ”inÄtu filtrÄÅ”anu. TurklÄt izmantoÅ”anas procenti tagad tiek ziÅoti vai nu kÄ kopÄjais, vai pa pavedienam atkarÄ«bÄ no tÄ, vai pavediens ir dÄ«kstÄvÄ vai nav katrÄ paraugÄ. Profile.fetch() pÄc noklusÄjuma ietver jaunos metadatus. Lai nodroÅ”inÄtu atpakaļsaderÄ«bu ar profilÄÅ”anas datu ÄrÄjiem patÄrÄtÄjiem, to var izslÄgt, nododot parametru include_meta=false.
- Jaunais Profile.Allocs modulis ļauj profilÄt atmiÅas sadalÄ«jumu. Tiek reÄ£istrÄts katras atmiÅas sadalÄ«juma veida un lieluma steka izsekoÅ”ana, un arguments sample_rate ļauj izlaist konfigurÄjamu pieŔķīrumu skaitu, samazinot veiktspÄjas izmaksas.
- FiksÄta ilguma CPU profilÄÅ”anu tagad lietotÄjs var palaist uzdevumu izpildes laikÄ, iepriekÅ” neielÄdÄjot profilu, un darbÄ«bas laikÄ tiks parÄdÄ«ts pÄrskats. OperÄtÄjsistÄmÄ MacOS un FreeBSD nospiediet ctrl-t vai zvaniet SIGINFO. CitÄm platformÄm aktivizÄjiet SIGUSR1, t.i. % kill -USR1 $julia_pid. Tas nav pieejams operÄtÄjsistÄmÄ Windows.
- REPL
- RadioMenu tagad atbalsta papildu Ä«sinÄjumtaustiÅus tieÅ”ai opciju izvÄlei.
- SecÄ«ba "?(x, y" un pÄc tam nospiežot TAB tiek parÄdÄ«tas visas metodes, kuras var izsaukt ar argumentiem x, y, .... (SÄkoÅ”Ä atstarpe neļauj pÄriet palÄ«dzÄ«bas režīmÄ.) "MyModule.?(x, y " ierobežo meklÄÅ”anu ar "MyModule". Nospiežot TAB, ir nepiecieÅ”ams, lai vismaz vienam argumentam ir jÄbÅ«t specifiskÄkam nekÄ Any. Vai arÄ« izmantojiet SHIFT-TAB, nevis TAB, lai atļautu saderÄ«gas metodes.
- Jaunais globÄlais mainÄ«gais err ļauj iegÅ«t jaunÄko izÅÄmumu, lÄ«dzÄ«gi kÄ ans ar pÄdÄjo atbildi. Ievadot kļūdu, tiek atkÄrtoti izdrukÄta informÄcija par izÅÄmumu.
- SparseArrays
- PÄrvietoja SparseArrays kodu no Julia repozitorija uz ÄrÄjo SparseArrays.jl repozitoriju.
- JaunÄs savienoÅ”anas funkcijas sparse_hcat, sparse_vcat un sparse_hvcat atgriež SparseMatrixCSC tipu neatkarÄ«gi no ievades argumentu veidiem. Tas kļuva nepiecieÅ”ams, lai unificÄtu matricu lÄ«mÄÅ”anas mehÄnismu pÄc LinearAlgebra.jl un SparseArrays.jl koda atdalÄ«Å”anas.
- MežizstrÄde
- Standarta reÄ£istrÄÅ”anas lÄ«meÅi BelowMinLevel, Debug, Info, Warn, Error un AboveMaxLevel tagad tiek eksportÄti no standarta reÄ£istrÄÅ”anas bibliotÄkas.
- Unikode
- Pievienota funkcija isequal_normalized, lai pÄrbaudÄ«tu unikoda ekvivalenci, nepÄrprotami neveidojot normalizÄtas virknes.
- Funkcija Unicode.normalize tagad pieÅem atslÄgvÄrdu charttransform, ko var izmantot, lai nodroÅ”inÄtu pielÄgotus rakstzÄ«mju kartÄjumus, un funkcija Unicode.julia_chartransform tiek nodroÅ”inÄta arÄ«, lai reproducÄtu kartÄjumu, ko izmanto, kad Julia parsÄtÄjs normalizÄ identifikatorus.
- PÄrbaude
- '@test_throws "some message" triggers_error()' tagad var izmantot, lai pÄrbaudÄ«tu, vai parÄdÄ«tajÄ kļūdas tekstÄ ir kļūda "dažs ziÅojums" neatkarÄ«gi no konkrÄtÄ izÅÄmuma veida. Tiek atbalstÄ«tas arÄ« regulÄrÄs izteiksmes, virkÅu saraksti un atbilstÄ«bas funkcijas.
- @testset foo() tagad var izmantot, lai izveidotu testa kopu no noteiktas funkcijas. Testa gadÄ«juma nosaukums ir izsauktÄs funkcijas nosaukums. IzsauktajÄ funkcijÄ var bÅ«t ietvertas @test un citas @testset definÄ«cijas, tostarp citu funkciju izsaukumiem, vienlaikus ierakstot visus starpposma testa rezultÄtus.
- TestLogger un LogRecord tagad tiek eksportÄti no standarta testa bibliotÄkas.
- Sadalīts
- SSHManager tagad atbalsta darbinieku pavedienus ar csh/tcsh iesaiÅojumu, izmantojot metodi addprocs() un parametru shell=:csh.
- Citas izmaiÅas
- GC.enable_logging(true) var izmantot, lai reÄ£istrÄtu katru atkritumu savÄkÅ”anas darbÄ«bu, norÄdot savÄktÄs atmiÅas laiku un apjomu.
Avots: opennet.ru