Julia forritunarmál 1.8 útgáfa

Útgáfa Julia 1.8 forritunarmálsins er fáanleg, sem sameinar eiginleika eins og mikil afköst, stuðning við kraftmikla vélritun og innbyggð verkfæri fyrir samhliða forritun. Setningafræði Juliu er nálægt MATLAB, með nokkra þætti að láni frá Ruby og Lisp. Strengjameðferðaraðferðin minnir á Perl. Verkefniskóðanum er dreift undir MIT leyfinu.

Helstu eiginleikar tungumálsins:

  • Mikill árangur: eitt af lykilmarkmiðum verkefnisins er að ná frammistöðu nálægt C forritum. Julia þýðandinn er byggður á vinnu LLVM verkefnisins og býr til skilvirkan innfæddan vélkóða fyrir marga markvettvanga;
  • Styður ýmsar forritunarhugmyndir, þar á meðal hluti af hlutbundinni og hagnýtri forritun. Staðlaða bókasafnið býður meðal annars upp á aðgerðir fyrir ósamstillt I/O, ferlistýringu, skráningu, prófílgreiningu og pakkastjórnun;
  • Dynamic vélritun: tungumálið krefst ekki skýrrar skilgreiningar á gerðum fyrir breytur, svipað og forskriftarforritunarmál. Gagnvirk stilling studd;
  • Valfrjáls hæfileiki til að tilgreina gerðir sérstaklega;
  • Setningafræði tilvalin fyrir tölulega tölvuvinnslu, vísindalega tölvuvinnslu, vélanám og sjónræn gögn. Stuðningur við margar tölulegar gagnategundir og verkfæri fyrir samhliða útreikninga.
  • Hæfni til að hringja beint í aðgerðir úr C bókasöfnum án viðbótarlaga.

Helstu breytingar á Julia 1.8:

  • Nýir tungumálaeiginleikar
    • Nú er hægt að merkja reiti með breytilegri uppbyggingu sem fasta til að koma í veg fyrir að þeim sé breytt og leyfa hagræðingu.
    • Hægt er að bæta tegundaskýringum við alþjóðlegar breytur.
    • Hægt er að búa til tómar n-víddar fylki með því að nota margar semíkommur innan hornklofa, til dæmis "[;;;]" býr til 0x0x0 fylki.
    • Reyndu blokkir geta nú valfrjálst haft else blokk, sem er keyrð strax á eftir meginmálinu ef engum villum var kastað.
    • Hægt er að setja @inline og @noinline inni í meginhluta aðgerða, sem gerir þér kleift að skrifa athugasemdir við nafnlausa aðgerð.
    • Nú er hægt að nota @inline og @noinline á aðgerð á símtalssíðu eða blokk til að þvinga samsvarandi fallsímtöl til að vera með (eða ekki innifalin).
    • ∀, ∃ og ∄ eru leyfðar sem auðkennisstafir.
    • Bætti við stuðningi við Unicode 14.0.0 forskrift.
    • Module(:name, false, false) aðferðin er hægt að nota til að búa til einingu sem inniheldur ekki nöfn, flytur ekki inn grunn eða kjarna og inniheldur ekki tilvísun í sjálfa sig.
  • Breytingar á tungumáli
    • Nýlega búnir verkefnahlutir (@spawn, @async, osfrv.) hafa nú world_age fyrir aðferðir frá móðurverkefninu þegar þeir eru búnir til, sem gerir kleift að framkvæma bjartsýni. Fyrri virkjunarvalkosturinn er fáanlegur með því að nota Base.invokelatest aðferðina.
    • Unicode ójafnvægi tvíátta sniðtilskipanir eru nú bannaðar í strengjum og athugasemdum til að forðast inndælingar.
    • Base.ifelse er nú skilgreint sem almenn aðgerð frekar en innbyggð, sem gerir pökkum kleift að útvíkka skilgreiningu þess.
    • Sérhver úthlutun á hnattræna breytu fer nú fyrst í gegnum símtal til að umbreyta(Any, x) eða convert(T, x) ef lýst var yfir að hnattræna breytan væri af gerðinni T. Áður en hnattrænar breytur eru notaðar skaltu ganga úr skugga um að óbreytilegur convert(Any) , x) === x er alltaf satt, annars getur það leitt til óvæntrar hegðunar.
    • Innbyggðar aðgerðir eru nú svipaðar almennum aðgerðum og hægt er að telja upp forritunarlega með aðferðum.
  • Umbætur á þýðanda/keyrslutíma
    • Ræsingartími styttist um það bil 25%.
    • LLVM-undirstaða þýðandinn hefur verið aðskilinn frá keyrslusafninu í nýtt bókasafn, libjulia-codegen. Það er sjálfgefið hlaðið, þannig að engar breytingar ættu að verða við venjulega notkun. Í dreifingum sem þurfa ekki þýðanda (til dæmis kerfismyndir þar sem allur nauðsynlegur kóði er forsaminn), er einfaldlega hægt að sleppa þessu bókasafni (og LLVM háð þess).
    • Skilyrt gerð ályktun er nú möguleg með því að senda rök til aðferðar. Til dæmis, fyrir Base.ifelse(isa(x, Int), x, 0) skilar ::Int jafnvel þótt tegund x sé óþekkt.
    • SROA (Scalar Replacement of Aggregates) hefur verið endurbætt: útrýma getfield símtölum með viðvarandi alþjóðlegum sviðum, útrýma breytilegum byggingum með óinitialized reiti, bætir afköst og meðhöndlun hreiðra getfield símtölum.
    • Tegund ályktunar fylgist með ýmsum áhrifum - aukaverkunum og því að það sleppi ekki. Tekið er tillit til stöðugrar útbreiðslu, sem bætir verulega frammistöðu á samantektartíma. Í sumum tilfellum, til dæmis, verður símtöl í aðgerðir sem ekki er hægt að setja inn en hafa ekki áhrif á niðurstöðuna hent á keyrslutíma. Reglur fyrir áhrif er hægt að skrifa yfir handvirkt með því að nota Base.@assume_effects fjölva.
    • Forsamsetning (með skýrum forsamsetningartilskipunum eða tilteknu vinnuálagi) vistar nú tegundarskilgreindan kóða, sem leiðir til hraðari framkvæmdar í fyrsta skipti. Allar nýjar aðferða/tegundasamsetningar sem pakkinn þinn þarfnast, óháð því hvar þessar aðferðir voru skilgreindar, er nú hægt að vista í skyndiminni í forsamsetningarskránni ef kallað er á þær með aðferð sem tilheyrir pakkanum þínum.
  • Breytingar á stjórnlínuvalkostum
    • Sjálfgefin hegðun fyrir eftirlit með @inbounds yfirlýsingum er nú sjálfvirk valkostur í "--check-bounds=yes|no|auto".
    • Nýr „--strip-lýsigögn“ valkostur til að fjarlægja docstrings, upprunastaðsetningarupplýsingar og staðbundin breytuheiti þegar kerfismynd er búin til.
    • Nýr valmöguleiki "--strip-ir" til að leyfa þýðandanum að fjarlægja frumkóðaframsetninguna þegar kerfismyndin er byggð. Myndin sem myndast mun aðeins virka ef "--compile=all" er notað eða ef allur nauðsynlegur kóði er forsaminn.
    • Ef „-“ stafurinn er tilgreindur í stað skráarnafns, þá er keyrslukóði lesinn úr venjulegu inntaksstraumnum.
  • Stuðningsbreytingar fyrir fjölþráða
    • Threads.@threads notar sjálfgefið nýja tímasetningarvalmöguleikann :dynamic, sem er frábrugðinn fyrri stillingu að því leyti að endurtekningar verða áætlaðar á kraftmikinn hátt yfir tiltæka vinnuþræði frekar en að vera úthlutað á hvern þráð. Þessi háttur gerir ráð fyrir betri dreifingu á hreiðri lykkjum með @spawn og @threads.
  • Nýjar aðgerðir bókasafns
    • eachsplit(str) til að framkvæma skipt(str) mörgum sinnum.
    • allequal(itr) til að prófa hvort allir þættir í endurtekningu séu jafnir.
    • hardlink(src, dst) er hægt að nota til að búa til harða tengla.
    • setcpuaffinity(cmd, örgjörvi) til að stilla sækni örgjörvakjarna við ræst ferli.
    • diskstat(path=pwd()) til að fá tölfræði diska.
    • Nýtt @showtime fjölvi til að sýna bæði línuna sem verið er að meta og @time skýrsluna.
    • LazyString og lazy "str" ​​fjölva hefur verið bætt við til að styðja við lata smíði villuboða í villuleiðum.
    • Lagaði samhliða vandamál í Dict og öðrum afleiddum hlutum eins og lyklum(::Dict), gildi(::Dict) og Set. Nú er hægt að kalla á endurtekningaraðferðir í orðabók eða mengi, svo framarlega sem það eru engin símtöl sem breyta orðabókinni eða menginu.
    • @time og @timev hafa nú valfrjálsa lýsingu, sem gerir þér kleift að skrifa athugasemdir við uppruna tímaskýrslna, til dæmis. @time "Evaluating foo" foo().
    • bilið tekur annað hvort stopp eða lengd sem eina lykilorðarrök.
    • nákvæmni og setprecision samþykkir nú grunn sem lykilorð
    • TCP falshlutir bjóða nú upp á lokaskrifunaraðferð og styðja notkun á hálfopnum ham.
    • Extrema samþykkir nú frumrök.
    • Iterators.countfrom samþykkir nú hvaða tegund sem er sem skilgreinir + aðferð.
    • @time úthlutar nú % tímans sem fer í að endursafna aðferðum með breyttum gerðum.
  • Hefðbundnar bókasafnsbreytingar
    • Lyklar með gildi Ekkert er nú fjarlægt úr umhverfinu í addenv.
    • Iterators.reverse (og þar af leiðandi síðast) styður hverja línu.
    • Lengdaraðgerðin fyrir svið af ákveðnum gerðum athugar ekki lengur hvort heiltöluflæði sé. Ný aðgerð, checked_length, er fáanleg; hún inniheldur bitaflutningsstýringarfræði. Ef nauðsyn krefur, notaðu SaferIntegers.jl til að búa til sviðsgerðina.
    • Iterators.Reverse iteratorinn útfærir hverja vísitöluviðsnúningu ef mögulegt er.
  • Pakkastjóri
    • Nýir ⌃ og ⌅ vísbendingar við hliðina á pakka í „pkg>“ stöðunni sem nýjar útgáfur eru fáanlegar fyrir. ⌅ gefur til kynna að ekki sé hægt að setja upp nýjar útgáfur.
    • Ný úrelt::Bool rök til Pkg.status (--outdated eða -o í REPL ham) til að sýna upplýsingar um pakka frá fyrri útgáfum.
    • Ný compat::Bool rök til Pkg.status (--compat eða -c í REPL ham) til að sýna allar [compat] færslur í Project.toml.
    • Nýr „pkg>compat“ (og Pkg.compat) háttur til að stilla færslur um samhæfni verkefna. Býður upp á gagnvirkan ritstjóra í gegnum „pkg>compat“ eða beina skráastýringu í gegnum „pkg>Foo 0.4,0.5“, sem getur hlaðið núverandi færslum með flipaútfyllingu. Það er, "pkg> compat Fo " er sjálfkrafa uppfærð í "pkg>Foo 0.4,0.5" til að leyfa breytingar á núverandi færslu.
    • Pkg reynir nú aðeins að hlaða niður pakka af pakkaþjóni ef þjónninn er að fylgjast með skránni sem inniheldur pakkann.
    • Pkg.instantiate mun nú gefa út viðvörun þegar Project.toml er ekki samstillt við Manifest.toml. Það gerir þetta byggt á kjötkássa af deps og compat færslum verkefnisins (aðrir reitir eru hunsaðir) í upplýsingaskránni þegar það er leyst, þannig að allar breytingar á Project.toml deps eða compat færslum er hægt að greina án þess að leysa aftur.
    • Ef "pkg>add" finnur ekki pakka með uppgefnu nafni mun það nú stinga upp á pakka með svipuðum nöfnum sem hægt er að bæta við.
    • Útgáfan af Julia sem er geymd í upplýsingaskránni inniheldur ekki lengur byggingarnúmerið, sem þýðir að master verður nú skrifað sem 1.9.0-DEV.
    • Hættu við prófun "pkg>" mun nú finnast meira stöðugt og verður rétt skilað til REPL.
  • InteractiveUtils
    • Nýr @time_imports fjölvi til að tilkynna tíma sem varið er í að flytja inn pakka og ósjálfstæði þeirra, með áherslu á samantekt og endursamsetningu tíma sem hlutfall af innflutningi.
  • Línuleg algebru
    • BLAS undireiningin styður nú 2. stigs BLAS spr! aðgerðir.
    • LinearAlgebra.jl staðalsafnið er nú algjörlega óháð SparseArrays.jl, bæði frá frumkóða og einingaprófunarsjónarmiði. Þar af leiðandi eru dreifðar fylki ekki lengur skilað (óbeint) með aðferðum frá LinearAlgebru sem er beitt á Base eða LinearAlgebru hluti. Sérstaklega leiðir þetta til eftirfarandi brotabreytinga:
      • Samtengingar þar sem notuð eru sérstök "dreifð" fylki (td ská) skila nú þéttum fylkjum; Þar af leiðandi eru D1 og D2 reitir SVD hluta sem eru búnir til með getproperty símtölum nú þétt fylki.
      • Svipuð(::SpecialSparseMatrix, ::Type, ::Dims) aðferð skilar þéttri núllfylki. Þar af leiðandi leiða afurðir tveggja, þriggja og samhverfra þríhyrndra fylkja innbyrðis til myndunar þéttrar fylkis. Að auki mistekst að smíða svipuð fylki með þremur rökum úr sérstökum „dreifum“ fylkjum úr (óstatískum) fylkjum núna vegna „núll(::Type{Fylki{T}})“.
  • Prentf
    • %s og %c nota nú textwidth rökin til að forsníða breiddina.
  • Profile
    • Örgjörvaálagssnið skráir nú lýsigögn þar á meðal þræði og verkefni. Profile.print() er með nýja groupby rök sem gerir þér kleift að flokka þræði, verkefni eða undirþræði/verkefni, verkefni/þræði og þræði og verkefni rök til að veita síun. Að auki er nýtingarprósenta nú tilkynnt annað hvort sem heildar eða á hvern þráð, allt eftir því hvort þráðurinn er aðgerðalaus eða ekki í hverju sýni. Profile.fetch() inniheldur nýju lýsigögnin sjálfgefið. Fyrir afturábak samhæfni við utanaðkomandi notendur prófílgagna er hægt að útiloka þau með því að senda include_meta=false.
    • Nýja Profile.Allocs einingin gerir þér kleift að setja upp minnisúthlutun. Staflaspor af gerð og stærð hverrar minnisúthlutunar er skráð og sample_rate röksemdin gerir kleift að sleppa stillanlegum fjölda úthlutana, sem dregur úr kostnaði við afköst.
    • Notandinn getur nú keyrt örgjörvasnið með fastri lengd á meðan verkefni eru í gangi án þess að hlaða sniðinu fyrst og skýrslan birtist á meðan hún er í gangi. Á MacOS og FreeBSD, ýttu á ctrl-t eða hringdu í SIGINFO. Fyrir aðra vettvang, virkjaðu SIGUSR1, þ.e. % drepa -USR1 $julia_pid. Þetta er ekki í boði á Windows.
  • SVARA
    • RadioMenu styður nú viðbótarlyklaborðsflýtivísa fyrir beint val á valkostum.
    • Röðin "?(x, y" sem fylgt er eftir með því að ýta á TAB sýnir allar aðferðir sem hægt er að kalla með rökum x, y, .... (Blás fyrir framan kemur í veg fyrir að þú farir í hjálparstillingu.) "MyModule.?(x, y " takmarkar leitina við "MyModule". Að ýta á TAB krefst þess að að minnsta kosti ein frumbreyta sé af gerðinni sem er sértækari en Any. Eða notaðu SHIFT-TAB í stað TAB til að leyfa allar samhæfðar aðferðir.
    • Nýja alþjóðlega breytuvillan gerir þér kleift að fá nýjustu undantekninguna, svipað og hegðun ans með síðasta svari. Ef þú slærð inn villu eru undantekningarupplýsingarnar endurprentaðar.
  • SparseArrays
    • Færði SparseArrays kóðann úr Julia geymslunni í ytri SparseArrays.jl geymsluna.
    • Nýju samtengingaraðgerðirnar sparse_hcat, sparse_vcat og sparse_hvcat skila SparseMatrixCSC gerð óháð tegundum inntaksrafstæðna. Þetta varð nauðsynlegt til að sameina vélbúnaðinn til að líma fylki eftir að hafa aðskilið LinearAlgebra.jl og SparseArrays.jl kóðann.
  • Annálar
    • Stöðluðu skráningarstigin BelowMinLevel, Debug, Info, Warn, Error og AboveMaxLevel eru nú flutt út úr venjulegu Logging bókasafninu.
  • Unicode
    • Bætti við isequal_normalized falli til að athuga hvort Unicode jafngildi sé án þess að smíða beinlínis eðlilega strengi.
    • Unicode.normalize aðgerðin tekur nú við leitarorðinu charttransform, sem hægt er að nota til að útvega sérsniðna stafi vörp, og Unicode.julia_chartransform aðgerðin er einnig til staðar til að endurskapa vörpun sem notuð er þegar Julia parser staðlar auðkenni.
  • Próf
    • Nú er hægt að nota '@test_throws "sum skilaboð" triggers_error()' til að prófa hvort villutextinn sem birtist innihaldi "einhver skilaboð" villu, óháð tiltekinni undantekningartegund. Regluleg tjáning, strengjalistar og samsvarandi aðgerðir eru einnig studdar.
    • @testset foo() er nú hægt að nota til að búa til prófunarsett úr tilteknu falli. Nafn prófunartilviks er heiti fallsins sem kallað er á. Hið kallaða fall getur innihaldið @test og aðrar @testset skilgreiningar, þar á meðal fyrir símtöl í aðrar aðgerðir, á meðan allar milliprófunarniðurstöður eru skráðar.
    • TestLogger og LogRecord eru nú flutt út úr venjulegu prófasafninu.
  • Dreift
    • SSHManager styður nú starfsþræði með csh/tcsh umbúðum í gegnum addprocs() aðferðina og shell=:csh færibreytuna.
  • Aðrar breytingar
    • GC.enable_logging(true) er hægt að nota til að skrá hverja sorphirðuaðgerð með tíma og magni af minni sem safnað er.

Heimild: opennet.ru

Bæta við athugasemd