Ukukhishwa kolimi lokuhlela lwe-Julia 1.8

Ukukhululwa kolimi lokuhlela lwe-Julia 1.8 kuyatholakala, okuhlanganisa izimfanelo ezifana nokusebenza okuphezulu, ukusekelwa kokuthayipha okunamandla namathuluzi akhelwe ngaphakathi ohlelo olufanayo. I-syntax ka-Julia iseduze ne-MATLAB, iboleka izakhi ezithile ku-Ruby no-Lisp. Indlela yokukhohlisa iyunithi yezinhlamvu ikhumbuza i-Perl. Ikhodi yephrojekthi isatshalaliswa ngaphansi kwelayisensi ye-MIT.

Izici ezibalulekile zolimi:

  • Ukusebenza okuphezulu: enye yezinhloso ezibalulekile zephrojekthi ukufeza ukusebenza eduze nezinhlelo ze-C. I-Julia compiler isekelwe kuphrojekthi ye-LLVM futhi ikhiqiza ikhodi yomshini yomdabu ephumelelayo yamapulatifomu amaningi okuhlosiwe;
  • Ukusekelwa kwama-paradigm ohlelo ahlukahlukene, okuhlanganisa izici zohlelo olugxile entweni nokusebenza. Umtapo wolwazi ojwayelekile uhlinzeka ngemisebenzi ye-I/O engavumelanisi, ukuphathwa kwenqubo, ukugawulwa kwemithi, ukwenza iphrofayela, nokuphathwa kwephakheji, phakathi kwezinye izinto;
  • Ukuthayipha okunamandla: Ulimi aludingi incazelo ecacile yezinhlobo zezinto eziguquguqukayo, ngokufanisa nezilimi zohlelo lokubhala. Isekela imodi interactive;
  • Ikhono lokuzikhethela lokucacisa izinhlobo ngokusobala;
  • I-syntax ehamba phambili ekubalweni kwezinombolo, izibalo zesayensi, izinhlelo zokufunda ngomshini nokubonwa kwedatha. Ukusekelwa kwezinhlobo eziningi zedatha yezinombolo namathuluzi okubala okuhambisanayo.
  • Amandla okushayela ngokuqondile imisebenzi kusuka kumalabhulali e-C ngaphandle kwezendlalelo ezengeziwe.

Izinguquko ezinkulu ku-Julia 1.8:

  • Izici zolimi olusha
    • Izinkambu zesakhiwo esiguquguqukayo manje zingachasiselwa njengezigxili ukuze zivinjwe ukuthi zingashintshwa futhi zivumele ukwenziwa ngokugcwele.
    • Izichasiselo zohlobo zingangezwa kokuguquguqukayo komhlaba.
    • Amalungu afanayo e-n-dimensional angenalutho angadalwa kusetshenziswa amasemikholoni amaningi ngaphakathi kubakaki abayisikwele, isibonelo "[;;;]" idala amalungu afanayo angu-0x0x0.
    • Zama amabhulokhi manje angakhetha ukuba nelinye ibhulokhi, elisetshenziswa ngokushesha ngemva kwendikimba eyinhloko uma kungekho amaphutha aphonsiwe.
    • @inline kanye ne-@noinline zingafakwa ngaphakathi kwendikimba yomsebenzi, okukuvumela ukuthi uchaze umsebenzi ongaziwa.
    • U-@inline kanye no-@noinline manje ungasetshenziswa kumsebenzi osendaweni yocingo noma ukuvimbela ukuze kuphoqelelwe izingcingo zokusebenza ezihambisanayo ukuthi zifakwe (noma zingafakwa).
    • ∀, ∃ kanye no-∄ kuvunyelwe njengezinhlamvu zenkomba.
    • Kungezwe ukusekelwa kokucaciswa kwe-Unicode 14.0.0.
    • Indlela ye-Module(:igama, amanga, amanga) ingasetshenziswa ukwakha imojuli engaqukethe amagama, ayingenisi i-Base noma i-Core, futhi ayinayo ireferensi ngokwayo.
  • Ulimi luyashintsha
    • Izinto Zomsebenzi ezisanda kwakhiwa (@spawn, @async, njll.) manje sezine-world_age yezindlela ezivela Kumsebenzi womzali lapho zidaliwe, okuvumela ukusetshenziswa okuthuthukisiwe. Inketho yokuvula yangaphambilini iyatholakala kusetshenziswa indlela ye-Base.invokelatest.
    • Iziqondiso zokufometha kwe-bidirectional ezingalinganiselwe ze-Unicode manje sezinqatshelwe kuyunithi yezinhlamvu namazwana ukuze kugwenywe imijovo.
    • I-Base.ifelse manje isichazwa njengomsebenzi ojwayelekile esikhundleni se-builtin, okuvumela amaphakheji ukuba andise incazelo yawo.
    • Wonke umsebenzi ozokwenziwa kokuguquguquka komhlaba wonke manje kuqala udlula obizweni lokuguqula(Noma yikuphi, x) noma ukuguqula(T, x) uma ukuguquguquka komhlaba kumenyezelwe njengohlobo T. Ngaphambi kokusebenzisa okuguquguqukayo komhlaba, qinisekisa ukuthi ukuguqula okungaguquki(Noma yikuphi , x) === x ihlale iyiqiniso, ngaphandle kwalokho ingase iholele ekuziphatheni okungalindelekile.
    • Imisebenzi eyakhelwe ngaphakathi manje isifana nemisebenzi ejwayelekile futhi ingabalwa ngokohlelo kusetshenziswa izindlela.
  • I-Compiler/Ukuthuthukiswa Kwesikhathi Sokusebenza
    • Isikhathi sokuqalisa sehliswe cishe ngo-25%.
    • I-LLVM-based compiler ihlukaniswe kusukela kulabhulali yesikhathi sokusebenza yafakwa kulabhulali entsha, i-libjulia-codegen. Ilayishwa ngokuzenzakalelayo, ngakho-ke akufanele kube nezinguquko phakathi nokusetshenziswa okuvamile. Ekusetshenzisweni okungadingi isihlanganisi (isibonelo, izithombe zesistimu lapho yonke ikhodi edingekayo ihlanganiswe ngaphambili), le labhulali (kanye nokuncika kwayo kwe-LLVM) ingamane ishiywe.
    • Ukuchazwa kohlobo olunemibandela manje sekungenzeka ngokudlulisela impikiswano endleleni. Isibonelo, kwe-Base.ifelse(isa(x, Int), x, 0) ibuyisela ::Int noma uhlobo luka x lungaziwa.
    • I-SROA (I-Scalar Replacement of Aggregates) ithuthukisiwe: iqeda izingcingo ze-getfield ngezinkambu zomhlaba wonke eziqhubekayo, iqeda izakhiwo eziguquguqukayo ezinezinkambu ezingakaqalwa, ithuthukisa ukusebenza kanye nokuphathwa kwezingcingo ezitholakala esidlekeni.
    • Uhlobo lokucabanga lulandelela imiphumela ehlukahlukene—imiphumela engemihle kanye nokungawisi. Ukusabalalisa njalo kuyacatshangelwa, okuthuthukisa kakhulu ukusebenza kwesikhathi sokuhlanganisa. Kwezinye izimo, isibonelo, izingcingo eziya emisebenzini engakwazi ukufakwa kulayini kodwa ezingawuthinti umphumela zizolahlwa ngesikhathi sokusebenza. Imithetho yemiphumela ingabhalwa phezu ngesandla kusetshenziswa i-Base.@assume_effects macro.
    • Ukuhlanganisa kusengaphambili (neziqondiso ezicacile zokuhlanganisa noma umthwalo oshiwo) manje kulondoloza ikhodi echazwe ngohlobo oluningi, okuholela ekusebenzeni ngokushesha kokuqala. Noma iyiphi indlela entsha/inhlanganisela yohlobo oludingwa iphakheji yakho, kungakhathaliseki ukuthi lezo zindlela zazichazwe kuphi, manje zingagcinwa kunqolobane efayeleni lokuhlanganiswa uma zibizwa ngendlela yephakeji lakho.
  • Izinguquko zepharamitha yomugqa womyalo
    • Ukuziphatha okuzenzakalelayo kokuqapha @inbounds declarations manje inketho ezenzakalelayo kokuthi "--check-bounds=yes|no|auto".
    • Inketho entsha "--strip-metadata" yokukhipha ama-docstrings, ulwazi lwendawo yomthombo, namagama ahlukahlukene endawo lapho udala isithombe sesistimu.
    • Inketho entsha "--strip-ir" ukuze uvumele umhlanganisi ukuthi asuse ukumelwa kwekhodi yomthombo omaphakathi lapho akha isithombe sohlelo. Isithombe esiphumayo sizosebenza kuphela uma "--compile=all" kusetshenziswa noma uma yonke ikhodi edingekayo isiqoqwe kusengaphambili.
    • Uma uhlamvu oluthi "-" lucacisiwe esikhundleni segama lefayela, ikhodi esebenzisekayo ifundwa ekusakazweni kokufaka okujwayelekile.
  • Izinguquko zokusekela ukufunda okuningi
    • I-Threads.@threads ngokuzenzakalelayo isebenzisa inketho entsha yokushejula :i-dynamic, ehlukile kumodi yangaphambilini ngokuthi iziphindaphindo zizohlelwa ngokuguquguqukayo kuzo zonke izintambo zesisebenzi ezitholakalayo kunokuba zinikezwe uchungechunge ngalunye. Le modi ivumela ukusatshalaliswa okungcono kwamaluphu afakwe esidlekeni nge-@spawn kanye ne-@threads.
  • Imisebenzi emisha yelabhulali
    • eachsplit(str) ukuze usebenzise ukuhlukaniswa(str) izikhathi eziningi.
    • allequal(itr) ukuhlola ukuthi zonke izici ku-iterator ziyalingana.
    • i-hardlink(src, dst) ingasetshenziswa ukwakha izixhumanisi eziqinile.
    • setcpuaffinity(cmd, cpus) ukuze usethe ukuhambisana kwe-processor core kuzinqubo eziqalisiwe.
    • diskstat(path=pwd()) ukuze uthole izibalo zediski.
    • I-@showtime macro entsha yokubonisa kokubili ulayini ohlolwayo kanye nombiko we-@time.
    • I-LazyString kanye ne-lazy"str" ​​​​macro yengeziwe ukusekela ukwakhiwa okuvilaphayo kwemilayezo yephutha ezindleleni zamaphutha.
    • Kulungiswe inkinga yemali ku-Dict nakwezinye izinto ezitholiwe njengokhiye(::Dict), amanani(::Dict) kanye ne-Set. Izindlela zokuphindaphinda manje zingabizwa kusichazamazwi noma isethi, inqobo nje uma zingekho izingcingo ezishintsha isichazamazwi noma isethi.
    • U-@time kanye no-@timev manje banencazelo oyikhethayo, ekuvumela ukuthi uchaze umthombo wemibiko yesikhathi, isibonelo. @time "Evaluating foo" foo().
    • ububanzi buthatha ukuma noma ubude njengokuphikisana kwegama elingukhiye kuphela.
    • ukunemba nokunemba manje kwamukela isisekelo njengegama elingukhiye
    • Izinto zesokhethi ye-TCP manje zinikeza indlela yokubhala eduze futhi zisekela ukusetshenziswa kwemodi evulekile uhhafu.
    • I-extrema manje yamukela impikiswano ye-init.
    • I-Iterators.countfrom manje yamukela noma yiluphi uhlobo oluchaza indlela +.
    • U-@time manje unikeza i-% yesikhathi esichithwe kuhlanganisa izindlela ezinezinhlobo ezishintshiwe.
  • Izinguquko Ezijwayelekile Zelabhulali
    • Okhiye abanenani Akukho manje okususiwe endaweni ezungezile ku-addenv.
    • I-Iterators.reverse (ngakho-ke okokugcina) isekela umugqa ngamunye.
    • Umsebenzi wobude wobubanzi bezinhlobo ezithile awusahloli ukuchichima okuphelele. Umsebenzi omusha, u-checked_length, uyatholakala; uqukethe ingqondo yokulawula ukudluliswa kancane. Uma kudingeka, sebenzisa i-SaferIntegers.jl ukuze wakhe uhlobo lobubanzi.
    • I-Iterators.Reverse iterator isebenzisa ukuhlehla kwenkomba ngayinye uma kungenzeka.
  • Umphathi Wephakheji
    • Izinkomba ezintsha ⌃ kanye nezingu-⌅ eduze kwamaphakheji kusimo se-“pkg>” lapho izinguqulo ezintsha zitholakala khona. ⌅ ibonisa ukuthi izinguqulo ezintsha azikwazi ukufakwa.
    • Okusha okuphelelwe yisikhathi::Impikiswano ye-Bool ku-Pkg.status (--iphelelwe yisikhathi noma -o kumodi ye-REPL) ukuze kuboniswe ulwazi mayelana namaphakheji ezinguqulo zangaphambilini.
    • Ukuhambisana okusha::Impikiswano ye-Bool ku-Pkg.status (--compat noma -c kumodi ye-REPL) ukukhombisa noma yikuphi okufakiwe [okuhambisanayo] ku-Project.toml.
    • Imodi entsha ye-"pkg>compat" (kanye ne-Pkg.compat) yokusetha okufakiwe okuhambisana nephrojekthi. Ihlinzeka ngomhleli osebenzisanayo nge-"pkg>compat" noma ukulawula okuqondile kwerekhodi nge-"pkg>Foo 0.4,0.5", engalayisha amarekhodi amanje ngokuqedela ithebhu. Okusho ukuthi, "pkg> compat Fo " ibuyekezwa ngokuzenzakalelayo ukuze ibe "pkg>Foo 0.4,0.5" ukuze ivumele ukuhlelwa kokufakiwe okukhona.
    • I-Pkg manje izama kuphela ukulanda amaphakheji kusuka kuseva yephakheji uma iseva iqapha ukubhaliswa okuqukethe iphakheji.
    • I-Pkg.instantiate manje izokhipha isexwayiso uma i-Project.toml ingavumelanisi ne-Manifest.toml. Lokhu ikwenza ngokusekelwe ku-hash yama-deps ephrojekthi kanye namarekhodi e-comat (ezinye izinkambu azinakwa) ku-manifest lapho iyixazulula, ukuze noma iluphi ushintsho ku-Project.toml deps noma amarekhodi e-comat akwazi ukutholwa ngaphandle kokuphinda kuxazululwe.
    • Uma okuthi "pkg>add" ingakwazi ukuthola iphakheji enegama elinikeziwe, manje izophakamisa amaphakheji anamagama afanayo angengezwa.
    • Inguqulo ye-julia egcinwe ku-manifest ayisafaki inombolo yokwakha, okusho ukuthi okuyinhloko manje kuzobhalwa ngokuthi 1.9.0-DEV.
    • Ukuhlola kokukhipha isisu "pkg>" manje kuzotholwa ngokungaguquki, futhi kuzobuyiselwa kahle ku-REPL.
  • InteractiveUtils
    • I-@time_imports macro entsha ukubika isikhathi esichithwe kungenisa amaphakheji nezinto ezincike kuwo, kugqanyiswe ukuhlanganisa kanye nesikhathi sokubuyisela njengephesenti lokungeniswa kwamanye amazwe.
  • I-algebra yomugqa
    • I-BLAS submodule manje isekela imisebenzi yeleveli-2 ye-BLAS spr!.
    • Umtapo wolwazi ojwayelekile we-LinearAlgebra.jl manje uzimele ngokuphelele ku-SparseArrays.jl, kokubili kusuka kukhodi yomthombo kanye nombono wokuhlola iyunithi. Ngenxa yalokho, amalungu afanayo angahlanganyeli awasabuyiswa (ngokucacile) ngezindlela ezisuka ku-LinearAlgebra ezisetshenziswa ku-Base noma ezintweni ze-LinearAlgebra. Ikakhulukazi, lokhu kuholela ezinguqukweni ezilandelayo:
      • Ukuhlanganisa kusetshenziswa omatikuletsheni "abancane" abakhethekile (isb. i-diagonal) manje kubuyisela omatikuletsheni abaminyene; Njengomphumela, izinkambu ze-D1 kanye ne-D2 zezinto ze-SVD ezidalwe izingcingo ze-getproperty manje sezingamatrices aminyene.
      • Indlela efanayo(::SpecialSparseMatrix, ::Type, ::Dims) ibuyisela i-matrix engenalutho eminyene. Njengomphumela, imikhiqizo ka-matrix we-two-, XNUMX-, kanye ne-symmetric tridiagonal iholela ekukhiqizeni i-matrix eminyene. Ukwengeza, ukwakha omatikuletsheni abafanayo ngama-agumenti amathathu avela kumatrices "abancane" akhethekile asuka kumatikuletsheni (angamile) manje kwehlulekile ngenxa yokuthi "ziro(::Type{Matrix{T}})".
  • Printf
    • I-%s kanye ne-%c manje zisebenzisa i-agumenti yobubanzi bombhalo ukuze ifomethe ububanzi.
  • Profile
    • Iphrofayili yokulayisha kwe-CPU manje irekhoda imethadatha efaka imicu nemisebenzi. I-Profile.print() ine-agumenti entsha yeqembu ekuvumela ukuthi uqoqe izintambo, imisebenzi noma imicu engaphansi/imisebenzi, imisebenzi/imicu, nemicu kanye nama-agumenti wemisebenzi ukuze unikeze ukuhlunga. Ukwengeza, amaphesenti okusetshenziswa manje abikwa njengengqikithi noma intambo ngayinye, kuye ngokuthi uchungechunge alusebenzi noma cha kusampula ngayinye. I-Profile.fetch() ihlanganisa imethadatha entsha ngokuzenzakalelayo. Ukuze uhambisane nokubuyela emuva nabasebenzisi bangaphandle bemininingwane yokuphrofayilila, ingakhishwa ngokudlula ku- include_meta=false.
    • Imojula entsha ye-Profile.Allocs ikuvumela ukuthi uphrofayili yokwabiwa kwememori. Ukulandelela isitaki sohlobo nosayizi wokwabiwa kwememori ngayinye kuyarekhodwa, futhi i-agumenti yesampula_rate ivumela inombolo elungisekayo yokwabiwa ukuthi yeqiwe, okunciphise ukusebenza okuphezulu.
    • Iphrofayili ye-CPU yesikhathi esimisiwe manje ingaqhutshwa umsebenzisi ngenkathi imisebenzi isebenza ngaphandle kokulayisha kuqala iphrofayela, futhi umbiko uzovezwa ngenkathi isebenza. Ku-MacOS naku-FreeBSD, cindezela u-ctrl-t noma ushayele SIGINFO. Kwezinye izinkundla, vula i-SIGUSR1, i.e. % bulala -USR1 $julia_pid. Lokhu akutholakali ku-Windows.
  • I-REPL
    • I-RadioMenu manje isekela izinqamuleli zekhibhodi ezengeziwe zokukhethwa okuqondile kwezinketho.
    • Uchungechunge oluthi "?(x, y" olulandelwa ngokucindezela u-TAB lubonisa zonke izindlela ezingabizwa ngezimpikiswano x, y, .... (Isikhala esiholayo sikuvimbela ukuthi ungene kumodi yosizo.) "MyModule.?(x, y " ikhawulela ukusesha ku-"MyModule". Ukucindezela i-TAB kudinga ukuthi okungenani i-agumenti eyodwa ibe yohlobo olucace kakhulu kunanoma iyiphi. Noma sebenzisa i-SHIFT-TAB esikhundleni se-TAB ukuze uvumele noma yiziphi izindlela ezihambisanayo.
    • Iphutha elisha elishintshayo lomhlaba likuvumela ukuthi uthole okuhlukile kwakamuva, okufana nokuziphatha kwe-ns ngempendulo yokugcina. Ukufaka iphutha kuphrinta kabusha ulwazi oluhlukile.
  • I-SparseArrays
    • Kuhanjiswe ikhodi ye-SparseArrays endaweni yokugcina ka-Julia yayisa endaweni yokugcina yakwa-SparseArrays.jl yangaphandle.
    • Imisebenzi emisha yokuhlanganisa okuthi sparse_hcat, sparse_vcat, kanye ne-sparse_hvcat ibuyisela uhlobo lwe-SparseMatrixCSC kungakhathaliseki ukuthi yiziphi izinhlobo zokuphikisana okokufaka. Lokhu kube kudingekile ukuze kuhlanganiswe indlela yokunamathisela kumatikuletsheni ngemva kokuhlukanisa ikhodi ye-LinearAlgebra.jl ne-SparseArrays.jl.
  • Imithi
    • Amazinga ajwayelekile okuloga Ngezansi kweMinLevel, Debug, Info, Isexwayiso, Iphutha kanye ne-AboveMaxLevel manje athunyelwa kusukela kulabhulali yokuloga esezingeni.
  • Unicode
    • Kwengezwe umsebenzi we-isequal_normalized ukuze kuhlolwe ukulingana kwe-Unicode ngaphandle kokwakha ngokusobala amayunithi ezinhlamvu ajwayelekile.
    • Umsebenzi we-Unicode.normalize manje wamukela igama elingukhiye le-charttransform, elingasetshenziswa ukuze kuhlinzekwe amamephu ezinhlamvu ngokwezifiso, kanye nomsebenzi we-Unicode.julia_chartransform nawo unikelwe ukuze kukhiqizwe imephu esetshenziswa lapho umhlaseli ka-Julia enza izihlonzi zibe jwayelekile.
  • test
    • I-'@test_throws "omunye umlayezo" triggers_error()' manje ingasetshenziswa ukuhlola ukuthi umbhalo wephutha obonisiwe uqukethe iphutha elithi "umlayezo othile", kungakhathaliseki uhlobo oluthile oluhlukile. Izisho ezivamile, izinhlu zezintambo, nemisebenzi efanayo nayo iyasekelwa.
    • @testset foo() manje ingasetshenziswa ukudala isethi yokuhlola kusukela kumsebenzi othile. Igama lecala lokuhlola igama lomsebenzi obizwayo. Umsebenzi obizwayo ungase uqukathe @test nezinye izincazelo ze-@testset, okuhlanganisa nezingcingo eziya kweminye imisebenzi, kuyilapho kuqoshwa yonke imiphumela yokuhlolwa emaphakathi.
    • I-TestLogger ne-LogRecord manje zithunyelwa zisuka kulabhulali yokuhlola evamile.
  • Kusatshalaliswa
    • I-SSHManager manje isekela imicu yesisebenzi nge-csh/tcsh wrapper ngendlela ye-adddprocs() kanye nepharamitha ye-shell=:csh.
  • Ezinye izinguquko
    • I-GC.enable_logging(iqiniso) ingasetshenziswa ukuze ubhale umsebenzi ngamunye wokuqoqwa kukadoti ngesikhathi kanye nenani lememori eqoqwe.

Source: opennet.ru

Engeza amazwana