Kutolewa kwa lugha ya programu ya Julia 1.8

Kutolewa kwa lugha ya programu ya Julia 1.8 kunapatikana, ikichanganya sifa kama vile utendakazi wa hali ya juu, usaidizi wa kuandika kwa nguvu na zana zilizojumuishwa za upangaji programu sambamba. Sintaksia ya Julia iko karibu na MATLAB, ikikopa baadhi ya vipengele kutoka kwa Ruby na Lisp. Njia ya kudanganya kamba inawakumbusha Perl. Nambari ya mradi inasambazwa chini ya leseni ya MIT.

Vipengele muhimu vya lugha:

  • Utendaji wa juu: mojawapo ya malengo muhimu ya mradi ni kufikia utendaji karibu na programu za C. Mkusanyaji wa Julia unategemea kazi ya mradi wa LLVM na hutoa msimbo wa mashine asilia wa majukwaa mengi lengwa;
  • Inasaidia dhana mbalimbali za programu, ikiwa ni pamoja na vipengele vya upangaji unaolenga kitu na utendakazi. Maktaba ya kawaida hutoa, miongoni mwa mambo mengine, utendakazi kwa I/O isiyolingana, udhibiti wa mchakato, ukataji miti, uwekaji wasifu, na usimamizi wa vifurushi;
  • Kuandika kwa nguvu: lugha haihitaji ufafanuzi wazi wa aina za vigeu, sawa na lugha za kupanga programu. Hali ya mwingiliano inayoungwa mkono;
  • Uwezo wa hiari wa kubainisha aina kwa uwazi;
  • Sintaksia bora kwa kompyuta ya nambari, kompyuta ya kisayansi, kujifunza kwa mashine, na taswira ya data. Usaidizi wa aina nyingi za data za nambari na zana za kusawazisha mahesabu.
  • Uwezo wa kupiga simu moja kwa moja kazi kutoka kwa maktaba za C bila tabaka za ziada.

Mabadiliko makubwa katika Julia 1.8:

  • Vipengele vya lugha mpya
    • Sehemu za muundo unaoweza kubadilika sasa zinaweza kubainishwa kama vidhibiti ili kuzizuia zisibadilishwe na kuruhusu uboreshaji.
    • Ufafanuzi wa aina unaweza kuongezwa kwa vigezo vya kimataifa.
    • Safu tupu za n-dimensional zinaweza kuundwa kwa kutumia nusukoloni nyingi ndani ya mabano ya mraba, kwa mfano "[;;;]" huunda safu 0x0x0.
    • Jaribu vizuizi sasa vinaweza kuwa na kizuizi kingine kwa hiari, ambacho hutekelezwa mara tu baada ya chombo kikuu ikiwa hakuna hitilafu zilizotupwa.
    • @inline na @noinline zinaweza kuwekwa ndani ya chombo cha utendaji, kukuruhusu kufafanua kipengele cha kukokotoa kisichojulikana.
    • @inline na @noinline sasa zinaweza kutumika kwa chaguo za kukokotoa katika tovuti ya simu au kuzuia ili kulazimisha simu zinazolingana za utendakazi kujumuishwa (au zisijumuishwe).
    • βˆ€, βˆƒ na βˆ„ zinaruhusiwa kama vibambo vitambulisho.
    • Usaidizi ulioongezwa kwa vipimo vya Unicode 14.0.0.
    • Mbinu ya Moduli(:jina, si kweli, si kweli) inaweza kutumika kuunda sehemu ambayo haina majina, haiingizii Msingi au Msingi, na haina marejeleo yenyewe.
  • Mabadiliko ya lugha
    • Vipengee vya Jukumu vipya vilivyoundwa (@spawn, @async, n.k.) sasa vina umri wa ulimwengu kwa mbinu kutoka kwa Jukumu kuu linapoundwa, hivyo basi kuruhusu utekelezaji ulioboreshwa. Chaguo la awali la kuwezesha linapatikana kwa kutumia mbinu ya Base.invokelatest.
    • Maagizo ya uumbizaji wa mwelekeo wa Unicode yasiyosawazishwa sasa yamepigwa marufuku katika mifuatano na maoni ili kuepuka kudungwa.
    • Base.ifelse sasa inafafanuliwa kama chaguo la kukokotoa la jumla badala ya kijenzi, ikiruhusu vifurushi kupanua ufafanuzi wake.
    • Kila mgawo wa kibadilishaji cha kimataifa sasa kwanza hupitia wito wa kubadilisha(Yoyote, x) au kubadilisha(T, x) ikiwa utofauti wa kimataifa ulitangazwa kuwa wa aina T. Kabla ya kutumia vigeu vya kimataifa, hakikisha kwamba kigeuzi kisichobadilika(Chochote , x) === x daima ni kweli, vinginevyo inaweza kusababisha tabia isiyotarajiwa.
    • Vitendaji vilivyojumuishwa sasa vinafanana na vitendaji vya kawaida na vinaweza kuorodheshwa kiprogramu kwa kutumia mbinu.
  • Maboresho ya mkusanyaji/wakati wa utekelezaji
    • Muda wa kuwasha ulipunguzwa kwa takriban 25%.
    • Kikusanyaji cha msingi wa LLVM kimetenganishwa kutoka kwa maktaba ya wakati wa utekelezaji hadi maktaba mpya, libjulia-codegen. Imepakiwa na chaguo-msingi, kwa hiyo haipaswi kuwa na mabadiliko wakati wa matumizi ya kawaida. Katika utumaji ambao hauitaji mkusanyaji (kwa mfano, picha za mfumo ambamo msimbo wote muhimu umetungwa), maktaba hii (na utegemezi wake wa LLVM) inaweza kuachwa tu.
    • Uelekezaji wa aina ya masharti sasa unawezekana kwa kupitisha hoja kwa njia. Kwa mfano, kwa Base.ifelse(isa(x, Int), x, 0) inarejesha ::Int hata kama aina ya x haijulikani.
    • SROA (Scalar Replacement of Aggregates) imeboreshwa: huondoa simu za getfield na uga zinazoendelea za kimataifa, huondoa miundo inayoweza kubadilika yenye sehemu ambazo hazijaanzishwa, inaboresha utendakazi na ushughulikiaji wa simu zilizowekwa.
    • Maelekezo ya aina hufuatilia athari mbalimbali-madhara na yasiyo ya kuacha. Uenezi wa mara kwa mara huzingatiwa, ambayo inaboresha kwa kiasi kikubwa utendaji wa wakati wa kukusanya. Katika baadhi ya matukio, kwa mfano, simu za kukokotoa ambazo haziwezi kuandikwa lakini haziathiri matokeo zitatupwa wakati wa utekelezaji. Sheria za madoido zinaweza kuandikwa upya kwa kutumia Base.@assume_effects macro.
    • Ukusanyaji mapema (pamoja na maagizo mahususi ya utungaji mapema au mzigo maalum wa kazi) sasa huhifadhi msimbo uliobainishwa zaidi wa aina, na hivyo kusababisha utekelezaji wa haraka wa mara ya kwanza. Michanganyiko yoyote mpya ya njia/aina inayohitajika na kifurushi chako, bila kujali ni wapi njia hizo zilifafanuliwa, sasa inaweza kuhifadhiwa kwenye faili ya ujumuishaji ikiwa itaitwa na njia ya kifurushi chako.
  • Mabadiliko kwa Chaguzi za Mstari wa Amri
    • Tabia chaguo-msingi ya ufuatiliaji wa matamko ya @inbounds sasa ni chaguo otomatiki katika "--check-bounds=yes|no|auto".
    • Chaguo jipya la "--strip-metadata" la kuondoa hati, maelezo ya eneo la chanzo, na majina tofauti ya ndani wakati wa kuunda picha ya mfumo.
    • Chaguo jipya "--strip-ir" ili kuruhusu mkusanyaji kuondoa uwakilishi wa kati wa msimbo wa chanzo wakati wa kuunda picha ya mfumo. Picha inayotokana itafanya kazi tu ikiwa "--compile=all" itatumika au ikiwa nambari zote zinazohitajika zimekusanywa mapema.
    • Ikiwa herufi "-" imebainishwa badala ya jina la faili, basi nambari inayoweza kutekelezeka inasomwa kutoka kwa mkondo wa kawaida wa ingizo.
  • Mabadiliko ya usaidizi wa usomaji mwingi
    • Threads.@threads kwa chaguo-msingi hutumia chaguo jipya la kuratibu :dynamic, ambalo ni tofauti na hali ya awali kwa kuwa marudio yataratibiwa kwa nguvu kwenye nyuzi za kifanyi kazi zinazopatikana badala ya kugawiwa kwa kila mazungumzo. Hali hii inaruhusu usambazaji bora wa vitanzi vilivyowekwa na @spawn na @threads.
  • Vipengele vipya vya maktaba
    • eachsplit(str) kutekeleza split(str) mara nyingi.
    • allequal(itr) ili kujaribu kama vipengele vyote katika kirudishio ni sawa.
    • hardlink(src, dst) inaweza kutumika kutengeneza viungo ngumu.
    • setcpuaffinity(cmd, cpus) ili kuweka mshikamano wa msingi wa kichakataji kwa michakato iliyozinduliwa.
    • diskstat(path=pwd()) kupata takwimu za diski.
    • New @showtime macro ili kuonyesha laini inayotathminiwa na ripoti ya @time.
    • LazyString na wavivu"str" ​​​​macro wameongezwa ili kusaidia ujenzi wa uvivu wa ujumbe wa makosa katika njia za makosa.
    • Imerekebisha suala la upatanishi katika Dict na vitu vingine vilivyotolewa kama vile vitufe(::Dict), thamani(::Dict) na Set. Mbinu za marudio sasa zinaweza kuitwa kwenye kamusi au seti, mradi tu hakuna simu zinazorekebisha kamusi au seti.
    • @time na @timev sasa wana maelezo ya hiari, yanayokuruhusu kufafanua chanzo cha ripoti za muda, kwa mfano. @time "Kutathmini foo" foo().
    • safu huchukua ama kusimama au urefu kama hoja yake pekee ya neno msingi.
    • usahihi na usanidi sasa unakubali msingi kama neno kuu
    • Vitu vya soketi vya TCP sasa vinatoa mbinu ya kuandika kwa karibu na kusaidia matumizi ya hali ya nusu-wazi.
    • extrema sasa anakubali hoja ya init.
    • Iterators.countfrom sasa inakubali aina yoyote inayofafanua njia ya +.
    • @time sasa inatenga % ya muda unaotumika kurejesha mbinu na aina zilizobadilishwa.
  • Mabadiliko ya Maktaba ya Kawaida
    • Vifunguo vyenye thamani Hakuna kitu sasa kimeondolewa kutoka kwa mazingira katika addenv.
    • Iterators.reverse (na kwa hivyo ya mwisho) inasaidia kila mstari.
    • Utendakazi wa urefu wa safu za aina fulani hauangalii tena kufurika kamili. Chaguo mpya ya kukokotoa, checked_length, inapatikana; ina mantiki ya udhibiti kidogo wa uhamishaji. Ikihitajika, tumia SaferIntegers.jl kuunda aina ya masafa.
    • Kirudishio cha Kurudisha nyuma hutekeleza ugeuzaji wa kila kielezo ikiwezekana.
  • Meneja wa kifurushi
    • Viashiria vipya βŒƒ na βŒ… karibu na vifurushi katika hali ya "pkg>" ambayo matoleo mapya yanapatikana. βŒ… inaonyesha kuwa matoleo mapya hayawezi kusakinishwa.
    • Mpya iliyopitwa na wakati::Hoja ya Bool kwa Pkg.status (--iliyopitwa na wakati au -o katika modi ya REPL) ili kuonyesha taarifa kuhusu vifurushi kutoka matoleo ya awali.
    • Ulinganifu mpya::Hoja ya Bool kwa Pkg.status (--compat au -c katika modi ya REPL) ili kuonyesha maingizo yoyote ya [compat] katika Project.toml.
    • Hali mpya ya "pkg>compat" (na Pkg.compat) ya kuweka maingizo ya uoanifu wa mradi. Hutoa kihariri shirikishi kupitia "pkg>compat" au udhibiti wa rekodi moja kwa moja kupitia "pkg>Foo 0.4,0.5", ambayo inaweza kupakia rekodi za sasa kupitia ukamilishaji wa kichupo. Hiyo ni, "pkg> compat Fo" inasasishwa kiotomatiki hadi "pkg> Foo 0.4,0.5" ili ingizo lililopo liweze kuhaririwa.
    • Pkg sasa inajaribu tu kupakua vifurushi kutoka kwa seva ya kifurushi ikiwa seva inafuatilia sajili iliyo na kifurushi.
    • Pkg.instantiate sasa itatoa onyo wakati Project.toml haijasawazishwa na Manifest.toml. Inafanya hivi kulingana na heshi ya deps za mradi na rekodi za compat (sehemu zingine hazizingatiwi) katika faili ya maelezo wakati wa kuisuluhisha, ili mabadiliko yoyote kwenye mradi wa Project.toml deps au rekodi za compat ziweze kutambuliwa bila kusuluhishwa tena.
    • Ikiwa "pkg>add" haiwezi kupata kifurushi chenye jina ulilopewa, sasa itapendekeza vifurushi vyenye majina sawa yanayoweza kuongezwa.
    • Toleo la julia lililohifadhiwa kwenye faili ya maelezo halijumuishi tena nambari ya muundo, kumaanisha kuwa bwana sasa itaandikwa kama 1.9.0-DEV.
    • Jaribio la kuacha "pkg>" sasa litatambuliwa mara kwa mara, na litarejeshwa kwa usahihi kwa REPL.
  • InteractiveUtils
    • New @time_imports macro ili kuripoti muda uliotumika kuagiza vifurushi na utegemezi wao, ikiangazia muda wa kukusanya na kukusanya tena kama asilimia ya uagizaji.
  • Algebra ya mstari
    • Moduli ndogo ya BLAS sasa inaauni vitendaji vya level-2 BLAS spr!.
    • Maktaba ya kawaida ya LinearAlgebra.jl sasa haitegemei kabisa SparseArrays.jl, kutoka kwa msimbo wa chanzo na mtazamo wa upimaji wa kitengo. Kwa hivyo, safu chache hazirudishwi tena (bila uwazi) kwa mbinu kutoka LinearAlgebra inayotumika kwa vitu vya Msingi au LinearAlgebra. Hasa, hii inasababisha mabadiliko yafuatayo ya kuvunja:
      • Miunganisho kwa kutumia matrices maalum "sparse" (mfano diagonal) sasa inarudisha matrices mnene; Kwa hivyo, sehemu za D1 na D2 za vitu vya SVD zilizoundwa na simu za getproperty sasa ni matiti mnene.
      • Njia sawa (::SpecialSparseMatrix, ::Aina, ::Dims) hurejesha tumbo mnene batili. Kama matokeo, bidhaa za matrices ya tridiagonal mbili, tatu, na ulinganifu kwa kila mmoja husababisha kizazi cha matrix mnene. Zaidi ya hayo, kuunda matrices sawa na hoja tatu kutoka kwa matrices maalum "sparse" kutoka (zisizo tuli) sasa haifaulu kutokana na "zero(::Type{Matrix{T}})".
  • Chapisha
    • %s na %c sasa hutumia hoja ya upana wa maandishi kufomati upana.
  • Profile
    • Uwekaji wasifu wa upakiaji wa CPU sasa unarekodi metadata ikijumuisha mazungumzo na kazi. Profile.print() ina hoja mpya ya kikundi ambayo inakuruhusu kupanga nyuzi, kazi au vichwa vidogo/kazi, kazi/nyuzi, na mijadala na hoja za kazi ili kutoa uchujaji. Zaidi ya hayo, asilimia ya utumiaji sasa inaripotiwa ama kama jumla au kwa kila uzi, kulingana na ikiwa nyuzi haijatumika au la katika kila sampuli. Profile.fetch() inajumuisha metadata mpya kwa chaguomsingi. Kwa upatanifu wa nyuma na watumiaji wa nje wa data ya wasifu, inaweza kutengwa kwa kupitisha include_meta=false.
    • Moduli mpya ya Profaili.Allocs hukuruhusu kuweka wasifu mgao wa kumbukumbu. Ufuatiliaji wa rafu ya aina na ukubwa wa kila mgao wa kumbukumbu hurekodiwa, na hoja ya sample_rate inaruhusu idadi inayoweza kusanidiwa ya mgao kurukwa, na hivyo kupunguza utendakazi.
    • Muda uliowekwa wasifu wa CPU sasa unaweza kuendeshwa na mtumiaji wakati kazi zinaendelea bila kupakia wasifu kwanza, na ripoti itaonyeshwa wakati unaendeshwa. Kwenye MacOS na FreeBSD, bonyeza ctrl-t au piga simu SIGINFO. Kwa majukwaa mengine, washa SIGUSR1, i.e. % kill -USR1 $julia_pid. Hii haipatikani kwenye Windows.
  • REPL
    • RadioMenu sasa inasaidia mikato ya ziada ya kibodi kwa uteuzi wa moja kwa moja wa chaguo.
    • Mfuatano "?(x, y" unaofuatwa na kubonyeza TAB huonyesha mbinu zote zinazoweza kuitwa kwa hoja x, y, .... (Nafasi inayoongoza hukuzuia kuingia katika hali ya usaidizi.) "Module yangu.?(x, y " huzuia utafutaji kwa "MyModule". Kubonyeza TAB kunahitaji kwamba angalau hoja moja iwe ya aina mahususi zaidi kuliko Yoyote. Au tumia SHIFT-TAB badala ya TAB ili kuruhusu mbinu zozote zinazooana.
    • Hitilafu mpya ya kutofautisha ya kimataifa hukuruhusu kupata ubaguzi wa hivi punde, sawa na tabia ya ans na jibu la mwisho. Kuingiza kosa huchapisha tena maelezo ya ubaguzi.
  • SparseArrays
    • Umehamisha msimbo wa SparseArrays kutoka hazina ya Julia hadi hazina ya nje ya SparseArrays.jl.
    • Uunganisho mpya hutenda kazi sparse_hcat, sparse_vcat, na sparse_hvcat hurejesha aina ya SparseMatrixCSC bila kujali aina za hoja za ingizo. Hii ikawa muhimu ili kuunganisha utaratibu wa gluing matrices baada ya kutenganisha LinearAlgebra.jl na SparseArrays.jl msimbo.
  • Logging
    • Viwango vya kawaida vya ukataji miti Chini yaMinLevel, Debug, Info, Onya, Hitilafu na AboveMaxLevel sasa vinasafirishwa kutoka kwa maktaba ya kawaida ya Kuweka kumbukumbu.
  • Unicode
    • Imeongeza chaguo za kukokotoa za isequal_normalized ili kuangalia usawa wa Unicode bila kuunda mifuatano iliyosawazishwa kwa uwazi.
    • Chaguo za kukokotoa za Unicode.normalize sasa zinakubali neno kuu la charttransform, ambalo linaweza kutumika kutoa upangaji wa herufi maalum, na chaguo za kukokotoa za Unicode.julia_chartransform pia hutolewa ili kuzalisha tena ramani inayotumiwa wakati kichanganuzi cha Julia kinarekebisha vitambulishi.
  • Mtihani
    • '@test_throws "baadhi ya ujumbe" triggers_error()' sasa inaweza kutumika kupima kama maandishi ya hitilafu yaliyoonyeshwa yana hitilafu ya "baadhi ya ujumbe", bila kujali aina maalum ya ubaguzi. Semi za kawaida, orodha za kamba, na vitendaji vinavyolingana pia vinatumika.
    • @testset foo() sasa inaweza kutumika kuunda seti ya jaribio kutoka kwa chaguo maalum la kukokotoa. Jina la kesi ya jaribio ni jina la chaguo la kukokotoa linaloitwa. Chaguo la kukokotoa linaloitwa linaweza kuwa na @test na ufafanuzi mwingine wa @testset, ikiwa ni pamoja na kupiga simu kwa vitendaji vingine, huku kurekodi matokeo yote ya kati ya majaribio.
    • TestLogger na LogRecord sasa zimesafirishwa kutoka kwa maktaba ya kawaida ya Jaribio.
  • Iligawanywa
    • SSHManager sasa inasaidia nyuzi za wafanyikazi na kanga ya csh/tcsh kupitia njia ya addprocs() na shell=:csh parameta.
  • Mabadiliko mengine
    • GC.enable_logging(true) inaweza kutumika kuweka kumbukumbu kwa kila operesheni ya kukusanya taka kwa muda na kiasi cha kumbukumbu iliyokusanywa.

Chanzo: opennet.ru

Kuongeza maoni