Forritunarmál Julia 1.9 í boði

Útgáfa Julia 1.9 forritunarmálsins hefur verið gefin út, 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.9:

  • Nýir tungumálaeiginleikar
    • Leyfa að úthlutanir séu gerðar í annarri einingu með því að nota "setproperty!(::Module, ::Symbol, x)".
    • Mörg verkefni sem ekki eru í lokastöðu eru leyfð. Til dæmis verður strengurinn „a, b…, c = 1, 2, 3, 4“ unnin sem „a = 1; b…, = 2, 3; c = 4". Þetta er meðhöndlað í gegnum Base.split_rest.
    • Einstakir bókstafir styðja nú sömu setningafræði og strengjabókstafir; þeim. Setningafræðin getur táknað ógildar UTF-8 raðir, eins og Char gerð leyfir.
    • Bætti við stuðningi við Unicode 15 forskrift.
    • Nú er hægt að nota hreiðraða samsetningar af túllum og nafngreindum stafatúplum sem tegundarfæribreytur.
    • Nýjar innbyggðar aðgerðir "getglobal(::Module, ::Tákn[, röð])" og "setglobal!(::Module, ::Tákn, x[, röð])" til að lesa og skrifa eingöngu á alþjóðlegar breytur. Getglobal aðferðin ætti nú að vera valin yfir getfield aðferðina til að fá aðgang að alþjóðlegum breytum.
  • Breytingar á tungumáli
    • „@invoke“ fjölvi sem kynnt var í útgáfu 1.7 er nú flutt út og tiltæk til notkunar. Að auki notar það nú "Core.Typeof(x)" aðferðina frekar en "Any" í því tilviki þar sem tegundarskýringunni er sleppt fyrir "x" rökin. Þetta er nauðsynlegt til að tryggja að gerðir sem sendar eru sem rök séu unnar á réttan hátt.
    • Virkjað útflutning á „invokelatest“ aðgerðinni og „@invokelatest“ fjölva, kynnt í útgáfu 1.7.
  • Umbætur á þýðanda/keyrslutíma
    • Verulega styttur tími til fyrstu framkvæmdar (TTFX - Tími til fyrstu framkvæmdar). Forsamsetning pakka geymir nú innfæddan kóða í "pkgimage", sem þýðir að kóða sem myndaður er með forsamsetningarferlinu þarf ekki að setja saman aftur eftir að pakkinn er hlaðinn. Hægt er að slökkva á notkun pkgimages ham með því að nota "--pkgimages=no" valkostinn.
    • Hið þekkta fjórðungsflækjuvandamál við gerð ályktunar hefur verið lagað og ályktun notar minna minni í heildina. Sum jaðartilvik með sjálfvirkum löngum aðgerðum (svo sem ModelingToolkit.jl með hlutadiffurjöfnum og stórum orsakalíkönum) safna miklu hraðar saman.
    • Símtöl með rökum án steyputegunda geta nú verið bjartsýni í sambandsskiptingu fyrir inndælingu eða kyrrstöðuupplausn, jafnvel þó að það séu margir mismunandi gerðir umsækjendur til sendingar. Þetta getur bætt afköst í ákveðnum aðstæðum þar sem gerðir hlutar eru ekki að fullu kyrrstæður leystar, með því að leysa „@nospecialize-d“ kallasíður með kyrrstöðu og forðast endursamsetningu.
    • Allri notkun @pure fjölva í grunneiningunni hefur verið skipt út fyrir Base.@assume_effects.
    • Símtöl til að kalla fram (f, invokesig, args...) með minna sértækum gerðum en venjulega er notað fyrir f(args...) valda ekki lengur því að pakkinn sé endursafnaður.
  • Breytingar á stjórnlínuvalkostum
    • Í Linux og Windows, "--threads=auto" valmöguleikinn reynir nú að ákvarða tiltækan fjölda örgjörva byggt á CPU sækni, grímu sem venjulega er sett í HPC og skýjaumhverfi.
    • „--math-mode=fast“ færibreytan er óvirk, í stað hennar er mælt með því að nota „@fastmath“ fjölva, sem hefur skýrt skilgreinda merkingarfræði.
    • Valmöguleikinn "--threads" er nú á sniðinu "auto | N[,auto|M]", þar sem M gefur til kynna fjölda gagnvirkra þráða sem á að búa til (nú þýðir sjálfvirkt 1).
    • Bætt við valkostinum „—heap-size-hint=“ “, sem setur þröskuldinn eftir að virk sorphirða hefst. Hægt er að tilgreina stærðina í bætum, kílóbætum (1000 KB), megabæti (300 MB) eða gígabætum (1,5 GB).
  • Breytingar á fjölþráðum
    • „Threads.@spawn“ hefur nú valfrjálsa fyrstu röksemd með gildinu „:default“ eða „:interactive“. Gagnvirkt verkefni krefst lítillar svartöf og er hannað til að vera stutt eða framkvæma oft. Gagnvirk verkefni munu keyra á gagnvirkum þráðum ef þeir eru tilgreindir þegar Julia er ræst.
    • Þræðir sem keyra utan Julia keyrslutímans (eins og frá C eða Java) geta nú kallað Julia kóða með því að nota "jl_adopt_thread". Þetta gerist sjálfkrafa þegar Julia kóða er slegið inn í gegnum „cfunction“ eða „@ccallable“ inngangspunktinn. Þar af leiðandi getur fjöldi þráða nú breyst meðan á framkvæmd stendur.
  • Nýjar aðgerðir bókasafns
    • Ný aðgerð "Iterators.flatmap".
    • Ný aðgerð "pkgversion(m::Module)" til að fá útgáfu pakkans sem hlaðið var tiltekinni einingu, svipað og "pkgdir(m::Module)".
    • Ný aðgerð „stack(x)“ sem alhæfir „reduce(hcat, x::Vector{<:Vector})“ yfir í hvaða vídd sem er og leyfir hvaða endurtekningu sem er. "Stack(f, x)" aðferðin alhæfir "mapreduce(f, hcat, x)" og er skilvirkari.
    • Ný fjölvi til að greina úthlutað minni „@úthlutanir“, svipað og „@úthlutað“, nema að það skilar fjölda minnisúthlutana frekar en heildarstærð úthlutaðs minnis.
  • Nýir eiginleikar bókasafnsins
    • „RoundFromZero“ virkar nú fyrir aðrar tegundir en „BigFloat“.
    • "Dict" er nú hægt að minnka handvirkt með því að nota "sizehint!"
    • „@tími“ tilgreinir nú sérstaklega hlutfall tímans sem fer í að endursafna ógildum aðferðum.
  • Breytingar á venjulegu bókasafni
    • Lagaði samhliða vandamál í endurtekningaraðferðum fyrir Dict og aðra afleidda hluti eins og lykla(::Dict), gildi(::Dict) og Set. Þessar endurtekningaraðferðir er nú hægt að kalla á Dict eða Set samhliða fyrir ótakmarkaðan fjölda þráða, svo framarlega sem engar aðgerðir eru til sem breyta orðabókinni eða menginu.
    • Að neita fallfalli "!f" skilar nú samsettu falli "(!) ∘ f" í stað nafnlauss falls.
    • Aðgerðir víddarsneiða virka nú í mörgum víddum: „eachslice“, „eachrow“ og „eachcol“ skila „Slices“ hlut sem gerir sendingu kleift að bjóða upp á skilvirkari aðferðir.
    • Bætti "@kwdef" fjölva við opinbera API.
    • Lagaði vandamál með röð aðgerða í "fld1".
    • Flokkun er nú alltaf stöðug í tíma (QuickSort hefur verið endurhannað).
    • „Base.splat“ er nú flutt út. Skilagildið er "Base.Splat" gerð frekar en nafnlaus fall, sem gerir það kleift að gefa það út á fallegan hátt.
  • Pakkastjóri
    • „Package Extensions“: Stuðningur við að hlaða kóðabút úr öðrum pakka sem hlaðið er í Julia lotu. Forritið er svipað og „Requires.jl“ pakkann, en forsamsetning og samhæfni stillinga er studd.
  • Línuleg algebru bókasafn
    • Vegna hættu á ruglingi við frumefnaskiptingu, fjarlægðu "a/b" og "b\a" aðferðirnar með mælikvarða "a" og vektor "b", sem jafngiltu "a * pinv(b)".
    • Að hringja í BLAS og LAPACK notar nú "libblastrampoline (LBT)". OpenBLAS er sjálfgefið, en það er ekki stutt að byggja kerfismyndina með öðrum BLAS/LAPACK bókasöfnum. Þess í stað er mælt með því að nota LBT vélbúnaðinn til að skipta út BLAS/LAPACK fyrir annað núverandi safn af bókasöfnum.
    • "lu" styður nýja fylkis snúningsstefnu, "RowNonZero()", sem velur fyrsta snúningsþáttinn sem ekki er núll til notkunar með nýjum reiknitegundum og í þjálfunarskyni.
    • „normalize(x, p=2)“ styður nú hvaða staðlaða vektorrými „x“, þar með talið stigstærðir.
    • Sjálfgefinn fjöldi BLAS þráða er nú jöfn fjölda CPU þráða á ARM arkitektúr og helmingi fjölda CPU þráða á öðrum arkitektúrum.
  • Printf: Endurunnin villuskilaboð fyrir rangt sniðna strengi fyrir betri læsileika.
  • Prófíll: Ný aðgerð "Profile.take_heap_snapshot(file)", sem skrifar skrá á JSON-undirstaða ".heapsnapshot" sniði sem studd er í Chrome.
  • Random: randn og randexp virka nú fyrir hvaða AbstractFloat tegund sem er sem skilgreinir rand.
  • SVARA
    • Með því að ýta á "Alt-e" takkasamsetningu opnast nú núverandi inntak í ritlinum. Innihaldið (ef því er breytt) verður keyrt þegar þú hættir í ritlinum.
    • Núverandi einingarsamhengi sem er virkt í REPL er hægt að breyta (Aðal sjálfgefið) með því að nota aðgerðina "REPL.activate(::Module)" eða með því að slá inn eininguna í REPL og ýta á takkasamsetninguna "Alt-m".
    • Hægt er að virkja „númeraða kvaðningu“ stillingu, sem prentar tölur fyrir hvert inntak og úttak og geymir stigin í Out, með því að nota „REPL.numbered_prompt!()“.
    • Útfylling flipa sýnir tiltæk leitarorðsrök.
  • SuiteSparse: Kóði fyrir „SuiteSparse“ leysirinn flutti í „SparseArrays.jl“. Leysitæki eru nú flutt út aftur af "SuiteSparse.jl".
  • SparseArrays
    • „SuiteSparse“ leysir eru nú fáanlegir sem „SparseArrays“ undireiningar.
    • UMFPACK og CHOLMOD þráðaverndarstillingar hafa verið endurbættar með því að útrýma alþjóðlegum breytum og nota læsingar. Margþráður "ldiv!" Nú er hægt að keyra UMFPACK hluti á öruggan hátt.
    • Tilraunaaðgerðin „SparseArrays.allowscalar(::Bool)“ gerir þér kleift að slökkva á eða virkja stigstærðskráningu á dreifðum fylkjum. Þessi aðgerð er hönnuð til að greina tilviljunarkennda stigstærðskráningu á „SparseMatrixCSC“ hlutum, sem er algeng uppspretta frammistöðuvandamála.
  • Nýr bilunarhamur fyrir prófunarsvítur sem slítur prufukeyrslu snemma ef bilun eða villa kemur upp. Stilltu annað hvort með „@testset kwarg failfast=true“ eða „export JULIA_TEST_FAILFAST=true“. Þetta er stundum nauðsynlegt í CI keyrslum til að fá villuboð snemma.
  • Dagsetningar: Tómir strengir eru ekki lengur ranglega flokkaðir sem gild „DateTime“, „Dates“ eða „Times“ gildi og í staðinn henda „ArgumentError“ í smiði og þáttun, á meðan „tryparse“ skilar engu.
  • Pakki dreift
    • Pakkastillingin (virkt verkefni, "LOAD_PATH", "DEPOT_PATH") er nú dreift þegar staðbundnum vinnuferlum er bætt við (t.d. með því að nota "addprocs(N::Int)" eða nota skipanalínufánann "--procs=N").
    • „addprocs“ fyrir staðbundin vinnuferla samþykkir nú rök sem heitir „env“ til að senda umhverfisbreytur til vinnuferla.
  • Unicode: "graphemes(s, m:n)" skilar undirstrengnum frá mth til nth grafemunum í "s".
  • DelimitedFiles pakkinn hefur verið fjarlægður úr kerfissöfnunum og er nú dreift sem sérstakur pakki sem þarf að vera sérstaklega settur upp til að hægt sé að nota.
  • Ytri ósjálfstæði
    • Í Linux er útgáfan af libstdc++ kerfissafninu sjálfkrafa greind og ef hún er nýrri er hún hlaðin. Gamla libstdc++ innbyggða hleðsluhegðun, óháð kerfisútgáfu, er hægt að endurheimta með því að stilla umhverfisbreytuna „JULIA_PROBE_LIBSTDCXX=0“.
    • Fjarlægði „RPATH“ úr Julia binary, sem getur brotið söfn á Linux sem mistekst að skilgreina „RUNPATH“ breytuna.
    • Umbætur á verkfærum: Úttakið á "MethodError" og aðferðum (til dæmis frá "methods(my_func)") er nú sniðið og litað í samræmi við meginregluna um úttak aðferða í staflaspori.

    Heimild: opennet.ru

Bæta við athugasemd