Liberasyon langaj pwogram Julia 1.8

Liberasyon langaj pwogram Julia 1.8 la disponib, li konbine kalite tankou pèfòmans segondè, sipò pou sezisman dinamik ak zouti entegre pou pwogramasyon paralèl. Sentaks Julia a se tou pre MATLAB, prete kèk eleman nan Ruby ak Lisp. Metòd manipilasyon fisèl la se okoumansman de Perl. Kòd pwojè a distribye anba lisans MIT.

Karakteristik kle nan lang nan:

  • Segondè pèfòmans: youn nan objektif kle pwojè a se reyalize pèfòmans tou pre pwogram C yo. Konpilateur Julia a baze sou pwojè LLVM epi li jenere kòd machin natif natal efikas pou anpil platfòm sib;
  • Sipò pou plizyè paradigm pwogramasyon, ki gen ladan eleman nan pwogram oryante objè ak fonksyonèl. Bibliyotèk estanda a bay fonksyon pou I/O asynchrone, jesyon pwosesis, anrejistreman, profilage, ak jesyon pake, pami lòt bagay;
  • Sezisman dinamik: Langaj la pa mande pou definisyon klè nan kalite pou varyab, pa analoji ak langaj pwogramasyon scripting. Sipòte mòd entèaktif;
  • Kapasite opsyonèl pou presize kalite yo klèman;
  • Sentaks ki ekselan pou kalkil nimerik, kalkil syantifik, sistèm aprantisaj machin ak vizyalizasyon done. Sipò pou anpil kalite done nimerik ak zouti pou paralelize kalkil yo.
  • Kapasite dirèkteman rele fonksyon nan bibliyotèk C san kouch adisyonèl.

Gwo chanjman nan Julia 1.8:

  • Nouvo karakteristik lang
    • Jaden nan yon struct mutable kapab kounye a dwe anote kòm konstan pou anpeche yo chanje epi pèmèt optimize.
    • Kalite anotasyon yo ka ajoute nan varyab mondyal yo.
    • Ou ka kreye yon etalaj vid n-dimansyon lè l sèvi avèk plizyè pwen-virkil andedan parantèz kare, pou egzanp "[;;;]" kreye yon etalaj 0x0x0.
    • Eseye blòk kapab kounye a opsyonèlman gen yon lòt blòk, ki se egzekite imedyatman apre kò prensipal la si pa gen okenn erè yo te jete.
    • @inline ak @noinline ka mete andedan yon kò fonksyon, ki pèmèt ou fè anote yon fonksyon anonim.
    • Kounye a, @inline ak @noinline kapab aplike nan yon fonksyon nan yon sit apèl oswa bloke pou fòse apèl fonksyon korespondan yo dwe enkli (oswa pa enkli).
    • ∀, ∃ ak ∄ gen dwa kòm karaktè idantifyan.
    • Te ajoute sipò pou spesifikasyon Unicode 14.0.0 la.
    • Metòd Modil(:non, fo, fo) ka itilize pou kreye yon modil ki pa gen non, ki pa enpòte Base oswa Nwayo, epi ki pa gen referans sou tèt li.
  • Chanjman lang
    • Objè Task ki fèk kreye (@spawn, @async, elatriye) kounye a gen world_age pou metòd ki soti nan Task paran yo lè yo kreye, sa ki pèmèt ekzekisyon optimize. Opsyon deklanchman anvan an disponib lè l sèvi avèk metòd Base.invokelatest la.
    • Direktiv Unicode dezekilib fòma bidireksyon yo kounye a entèdi nan fisèl ak kòmantè pou evite piki.
    • Base.ifelse defini kounye a kòm yon fonksyon jenerik olye ke yon entegre, ki pèmèt pakè yo pwolonje definisyon li yo.
    • Chak plasman nan yon varyab mondyal kounye a premye ale nan yon apèl pou konvèti (Nenpòt ki, x) oswa konvèti (T, x) si yo te deklare varyab mondyal la yo dwe nan kalite T. , x) === x toujou vre, sinon li ka mennen nan konpòtman inatandi.
    • Fonksyon entegre yo kounye a sanble ak fonksyon jenerik epi yo ka pwograme enimere lè l sèvi avèk metòd.
  • Amelyorasyon konpilatè / Runtime
    • Tan bòt redwi pa apeprè 25%.
    • Konpilatè ki baze sou LLVM la separe ak bibliyotèk la nan yon nouvo bibliyotèk, libjulia-codegen. Li chaje pa default, kidonk pa ta dwe gen okenn chanjman pandan itilizasyon nòmal. Nan deplwaman ki pa bezwen yon konpile (pa egzanp, imaj sistèm kote tout kòd ki nesesè yo prekonpile), bibliyotèk sa a (ak depandans LLVM li yo) ka tou senpleman omisyon.
    • Enferans kalite kondisyonèl se kounye a posib lè w pase yon agiman nan yon metòd. Pou egzanp, pou Base.ifelse(isa(x, Int), x, 0) retounen ::Int menm si kalite x la pa konnen.
    • SROA (Scalar Replacement of Aggregates) te amelyore: elimine apèl getfield ak jaden mondyal ki pèsistan, elimine estrikti mitab ak jaden ki pa inisyalize, amelyore pèfòmans ak manyen apèl getfield ki anbrike.
    • Kalite enferans swiv divès efè-efè segondè ak ki pa jete. Se pwopagasyon konstan pran an kont, ki amelyore siyifikativman konpile-tan pèfòmans. Nan kèk ka, pou egzanp, apèl nan fonksyon ki pa ka aliye men ki pa afekte rezilta a pral jete nan ègzekutabl. Règ pou efè yo ka ranplase manyèlman lè l sèvi avèk makro Base.@assume_effects.
    • Prekonpilasyon (avèk direktiv prekonpilasyon eksplisit oswa kantite travay espesifye) kounye a sove plis kòd ki defini kalite, sa ki lakòz ekzekisyon premye fwa pi rapid. Nenpòt nouvo metòd/tip konbinezon pakè w la bezwen, kèlkeswa kote metòd sa yo te defini, kapab kounye a kache nan fichye prekonpilasyon an si yo rele yo pa yon metòd ki fè pati pakè w la.
  • Chanjman paramèt liy lòd
    • Konpòtman defo pou kontwole @inbounds deklarasyon se kounye a opsyon oto nan "--check-bounds=yes|no|auto".
    • Nouvo opsyon "--strip-metadata" pou retire docstrings, enfòmasyon kote sous yo, ak non varyab lokal yo lè w ap kreye yon imaj sistèm.
    • Nouvo opsyon "--strip-ir" pou pèmèt du a retire reprezantasyon kòd sous entèmedyè lè bati imaj sistèm lan. Imaj ki kapab lakòz la ap travay sèlman si yo itilize "--compile=all" oswa si tout kòd ki nesesè yo pre-konpile.
    • Si yo espesifye karaktè "-" olye pou yo non fichye a, Lè sa a, kòd la ègzèkutabl li nan kouran an opinyon estanda.
  • Chanjman sipò multithreading
    • Threads.@threads pa default sèvi ak nouvo opsyon orè: dinamik, ki diferan de mòd anvan an nan ke iterasyon yo pral pwograme dinamik atravè fil travayè ki disponib olye ke yo te asiyen nan chak fil. Mòd sa a pèmèt pou pi bon distribisyon bouk enbrike ak @spawn ak @threads.
  • Nouvo fonksyon bibliyotèk
    • eachsplit(str) pou egzekite split(str) plizyè fwa.
    • allequal(itr) pou teste si tout eleman nan yon iteratè yo egal.
    • hardlink(src, dst) ka itilize pou kreye lyen difisil.
    • setcpuaffinity(cmd, cpus) pou mete afinite nwayo processeur a ak pwosesis lanse yo.
    • diskstat(chemen=pwd()) pou jwenn estatistik disk.
    • Nouvo makro @showtime pou montre tou de liy yo ap evalye ak rapò @time.
    • LazyString ak makro "str" ​​parese yo te ajoute pou sipòte konstriksyon parese mesaj erè nan chemen erè.
    • Fikse yon pwoblèm konkou nan Dict ak lòt objè ki sòti tankou kle(::Dict), valè (::Dict) ak Set. Metòd iterasyon kapab kounye a rele sou yon diksyonè oswa seri, osi lontan ke pa gen okenn apèl ki modifye diksyonè a oswa seri.
    • @time ak @timev kounye a gen yon deskripsyon opsyonèl, ki pèmèt ou anote sous rapò tan yo, pou egzanp. @time "Evalyasyon foo" foo().
    • ranje pran swa stop oswa longè kòm sèl agiman mo kle li yo.
    • presizyon ak setprecision kounye a aksepte baz kòm yon mo kle
    • TCP priz objè kounye a bay yon metòd closewrite ak sipòte itilizasyon mòd mwatye louvri.
    • extrema kounye a aksepte yon agiman init.
    • Iterators.countfrom kounye a aksepte nenpòt kalite ki defini yon metòd +.
    • @time kounye a distribye % tan ki pase pou rekonpile metòd ak kalite ki chanje yo.
  • Chanjman Estanda Bibliyotèk
    • Kle ki gen valè Pa gen anyen yo retire kounye a nan anviwònman an nan addenv.
    • Iterators.reverse (ak Se poutèt sa dènye) sipòte chak liy.
    • Fonksyon longè pou seri sèten kalite pa tcheke ankò pou debòde nonb antye relatif. Yon nouvo fonksyon, checked_length, disponib; li genyen lojik kontwòl transfè ti jan. Si sa nesesè, sèvi ak SaferIntegers.jl pou konstwi kalite seri a.
    • Iteratè a Iterators.Reverse aplike chak ranvèsman endèks si sa posib.
  • Manadjè pake
    • Nouvo endikatè ⌃ ak ⌅ akote pakè nan estati "pkg>" pou ki nouvo vèsyon ki disponib. ⌅ endike ke nouvo vèsyon pa ka enstale.
    • Nouvo demode::Bool agiman nan Pkg.status (--demode oswa -o nan mòd REPL) pou montre enfòmasyon sou pakè ki soti nan vèsyon anvan yo.
    • Nouvo konpat::Bool agiman nan Pkg.status (--compat oswa -c nan mòd REPL) pou montre nenpòt antre [compat] nan Project.toml.
    • Nouvo "pkg> compat" (ak Pkg.compat) mòd pou mete pwojè konpatibilite antre yo. Bay yon editè entèaktif atravè "pkg> konpa" oswa kontwòl dirèk dosye atravè "pkg> Foo 0.4,0.5, 0.4,0.5", ki ka chaje dosye aktyèl yo atravè onglet fini. Sa vle di, "pkg> konpat Fo" otomatikman mete ajou nan "pkg> Foo XNUMX" pou yon antre ki egziste deja ka modifye.
    • Pkg kounye a sèlman eseye telechaje pakè nan yon sèvè pake si sèvè a ap kontwole rejis ki gen pake a.
    • Pkg.instantiate pral kounye a bay yon avètisman lè Project.toml pa senkronize ak Manifest.toml. Li fè sa ki baze sou yon hash nan deps pwojè a ak dosye konpat (yo inyore lòt jaden) nan manifest la lè rezoud li, se konsa ke nenpòt chanjman nan Project.toml deps oswa dosye konpat yo ka detekte san yo pa re-rezoud.
    • Si "pkg>add" pa ka jwenn yon pake ki gen non yo bay la, li pral kounye a sijere pakè ki gen non menm jan yo ka ajoute.
    • Vèsyon Julia ki estoke nan manifest la pa gen ladan nimewo konstriksyon an ankò, sa vle di mèt pral kounye a ekri kòm 1.9.0-DEV.
    • Tès abort "pkg>" pral kounye a detekte pi konsistan, epi yo pral kòrèkteman retounen nan REPL la.
  • InteractiveUtils
    • Nouvo @time_imports macro pou rapòte tan ki pase enpòte pakè ak depandans yo, mete aksan sou tan konpile ak rekonpile kòm yon pousantaj de enpòtasyon.
  • Aljèb lineyè
    • Soumodil BLAS la kounye a sipòte fonksyon BLAS spr! nivo-2.
    • Bibliyotèk estanda LinearAlgebra.jl la kounye a konplètman endepandan de SparseArrays.jl, tou de nan yon kòd sous ak pèspektiv tès inite. Kòm yon konsekans, etalaj ra yo pa tounen ankò (enplisite) pa metòd ki soti nan LinearAlgebra aplike nan objè Baz oswa LinearAlgebra. An patikilye, sa a mennen nan chanjman sa yo kraze:
      • Konkatènasyon lè l sèvi avèk matris espesyal "esparse" (egzanp dyagonal) kounye a retounen matris dans; Kòm yon konsekans, jaden D1 ak D2 nan objè SVD ki te kreye pa apèl getproperty yo kounye a se matris dans.
      • Metòd ki sanble(::SpecialSparseMatrix, ::Type, ::Dims) retounen yon matris nul dans. Kòm yon konsekans, pwodwi de-, twa-, ak simetrik matris tridyagonal youn ak lòt mennen nan jenerasyon an nan yon matris dans. Anplis de sa, konstwi matris ki sanble ak twa agiman ki soti nan matris espesyal "esparse" soti nan matris (ki pa estatik) kounye a echwe akòz "zewo (:: Kalite{Matrix{T}})".
  • Printf
    • %s ak %c kounye a sèvi ak agiman textwidth la pou fòme lajè a.
  • Profile
    • CPU chaj pwofil kounye a anrejistre metadata ki gen ladan fil ak travay. Profile.print() gen yon nouvo agiman groupby ki pèmèt ou gwoup fil, travay oswa subthreads/travay, travay/fil, ak fil ak agiman travay pou bay filtraj. Anplis de sa, pousantaj itilizasyon kounye a rapòte swa kòm yon jeneral oswa pou chak fil, tou depann de si wi ou non fil la san fè anyen konsa nan chak echantiyon. Profile.fetch() gen ladan nouvo metadata yo pa default. Pou konpatibilite bak ak konsomatè ekstèn nan done pwofil, li ka eskli lè w pase include_meta=false.
    • Nouvo Modil Profile.Allocs pèmèt ou pwofite alokasyon memwa. Yo anrejistre yon pil sou kalite ak gwosè chak alokasyon memwa, epi agiman sample_rate pèmèt yo sote yon kantite alokasyon configurable, sa ki redui pèfòmans anlè.
    • Itilizatè a kapab kounye a dirije pwofil CPU dire fiks pandan travay yo ap kouri san yo pa premye chaje pwofil la, epi rapò a pral parèt pandan y ap kouri. Sou MacOS ak FreeBSD, peze ctrl-t oswa rele SIGINFO. Pou lòt platfòm, aktive SIGUSR1, i.e. % touye -USR1 $julia_pid. Sa a pa disponib sou Windows.
  • REPL
    • RadioMenu kounye a sipòte rakoursi klavye adisyonèl pou seleksyon dirèk opsyon.
    • Sekans "?(x, y" ki te swiv pa peze TAB montre tout metòd yo ka rele ak agiman x, y, .... (Yon espas dirijan anpeche w antre nan mòd èd.) "MyModule.?(x, y " limite rechèch la sou "MyModule". Lè w peze TAB, sa mande pou omwen yon agiman gen yon kalite ki pi espesifik pase Any. Oswa itilize SHIFT-TAB olye de TAB pou pèmèt nenpòt metòd konpatib.
    • Nouvo global varyab err pèmèt ou jwenn dènye eksepsyon an, menm jan ak konpòtman ans ak dènye repons lan. Lè w antre nan err, reimprime enfòmasyon eksepsyon an.
  • SparseArrays
    • Deplase kòd SparseArrays soti nan depo Julia a nan depo ekstèn SparseArrays.jl.
    • Nouvo fonksyon konkatènasyon sparse_hcat, sparse_vcat, ak sparse_hvcat retounen yon kalite SparseMatrixCSC kèlkeswa kalite agiman antre yo. Sa a te vin nesesè pou inifye mekanis pou kole matris apre yo fin separe kòd LinearAlgebra.jl ak SparseArrays.jl.
  • Antre
    • Nivo estanda anrejistreman BelowMinLevel, Debug, Info, Warn, Error ak AboveMaxLevel yo kounye a ekspòte soti nan bibliyotèk Logging estanda.
  • Unikod
    • Te ajoute fonksyon isequal_normalized pou tcheke ekivalans Unicode san yo pa konstwi klèman fisèl nòmalize.
    • Fonksyon Unicode.normalize la kounye a aksepte mo kle charttransform, ki ka itilize pou bay kat karaktè koutim, epi fonksyon Unicode.julia_chartransform yo bay tou pou repwodui kat yo itilize lè parser Julia nòmalize idantifyan yo.
  • Tès
    • '@test_throws "kèk mesaj" triggers_error()' kapab kounye a itilize pou teste si tèks erè ki parèt la gen yon erè "kèk mesaj", kèlkeswa kalite eksepsyon espesifik la. Ekspresyon regilye, lis fisèl, ak fonksyon matche yo sipòte tou.
    • Yo ka itilize @testset foo() kounye a pou kreye yon seri tès ki soti nan yon fonksyon bay yo. Non ka tès la se non fonksyon yo rele a. Fonksyon ki rele a ka genyen @test ak lòt definisyon @testset, ki enkli pou apèl nan lòt fonksyon, pandan y ap anrejistre tout rezilta tès entèmedyè yo.
    • TestLogger ak LogRecord yo kounye a ekspòte soti nan bibliyotèk tès estanda a.
  • Distribiye
    • SSHManager kounye a sipòte fil travayè ak yon wrapper csh/tcsh atravè metòd addprocs() ak paramèt shell=:csh.
  • Lòt chanjman
    • GC.enable_logging(true) ka itilize pou konekte chak operasyon koleksyon fatra ak tan ak kantite memwa kolekte.

Sous: opennet.ru

Add nouvo kòmantè