Julia 1.8 programavimo kalbos išleidimas

Yra Julia 1.8 programavimo kalbos išleidimas, kuriame derinamos tokios savybės kaip didelis našumas, dinaminio spausdinimo palaikymas ir integruoti lygiagretaus programavimo įrankiai. Julijos sintaksė artima MATLAB, kai kuriuos elementus pasiskolinanti iš Ruby ir Lisp. Stygų manipuliavimo metodas primena Perl. Projekto kodas platinamas pagal MIT licenciją.

Pagrindinės kalbos savybės:

  • Didelis našumas: vienas iš pagrindinių projekto tikslų yra pasiekti C programoms artimą našumą. Julia kompiliatorius yra pagrįstas LLVM projekto darbu ir generuoja efektyvų vietinį mašininį kodą daugeliui tikslinių platformų;
  • Palaiko įvairias programavimo paradigmas, įskaitant objektinio ir funkcinio programavimo elementus. Standartinė biblioteka, be kita ko, suteikia asinchroninio įvesties/išvesties, procesų valdymo, registravimo, profiliavimo ir paketų valdymo funkcijas;
  • Dinaminis spausdinimas: kalba nereikalauja aiškaus kintamųjų tipų apibrėžimo, panašiai kaip scenarijų programavimo kalbose. Palaikomas interaktyvus režimas;
  • Neprivaloma galimybė aiškiai nurodyti tipus;
  • Sintaksė idealiai tinka skaitmeniniam skaičiavimui, moksliniam skaičiavimui, mašininiam mokymuisi ir duomenų vizualizavimui. Daugelio skaitmeninių duomenų tipų ir skaičiavimų lygiagretinimo įrankių palaikymas.
  • Galimybė tiesiogiai iškviesti funkcijas iš C bibliotekų be papildomų sluoksnių.

Pagrindiniai Julijos 1.8 pakeitimai:

  • Naujos kalbos funkcijos
    • Keičiamos struktūros laukus dabar galima anotuoti kaip konstantas, kad jie nebūtų keičiami ir būtų galima optimizuoti.
    • Tipo komentarus galima pridėti prie visuotinių kintamųjų.
    • Tuščius n matmenų masyvus galima sukurti naudojant kelis kabliataškius laužtiniuose skliaustuose, pavyzdžiui, „[;;;]“ sukuria 0x0x0 masyvą.
    • Išbandyti blokai dabar pasirinktinai gali turėti else bloką, kuris vykdomas iškart po pagrindinio turinio, jei nebuvo išmestų klaidų.
    • @inline ir @noinline gali būti patalpintos funkcijos korpuse, todėl galite komentuoti anoniminę funkciją.
    • @inline ir @noinline dabar gali būti pritaikytos funkcijai iškvietimo svetainėje arba bloke, kad būtų įtraukti (arba neįtraukti) atitinkami funkcijų iškvietimai.
    • ∀, ∃ ir ∄ leidžiami kaip identifikavimo simboliai.
    • Pridėtas Unicode 14.0.0 specifikacijos palaikymas.
    • Metodą Module(:name, false, false) galima naudoti norint sukurti modulį, kuriame nėra pavadinimų, neimportuojama Base ar Core ir nėra nuorodos į save.
  • Kalbos pokyčiai
    • Naujai sukurti užduočių objektai (@spawn, @async ir t. t.) dabar turi world_age metodams iš pirminės užduoties, kai jie buvo sukurti, kad būtų galima optimizuoti vykdymą. Ankstesnė aktyvinimo parinktis galima naudojant Base.invokelatest metodą.
    • Unikodo nesubalansuotos dvikrypčio formatavimo direktyvos dabar yra uždraustos eilutėse ir komentaruose, kad būtų išvengta injekcijų.
    • Base.ifelse dabar apibrėžiamas kaip bendroji funkcija, o ne įmontuota, leidžianti paketams išplėsti jos apibrėžimą.
    • Kiekvienas priskyrimas visuotiniam kintamajam dabar pirmiausia iškviečiamas konvertuoti (Any, x) arba konvertuoti (T, x), jei pasaulinis kintamasis buvo deklaruotas kaip T tipo. Prieš naudodami visuotinius kintamuosius įsitikinkite, kad nekintamasis konvertuoti (Any , x) === x visada teisingas, kitaip jis gali sukelti netikėtą elgesį.
    • Integruotos funkcijos dabar yra panašios į bendrąsias funkcijas ir gali būti programiškai išvardytos naudojant metodus.
  • Kompiliatoriaus / vykdymo laiko patobulinimai
    • Įkrovos laikas sutrumpėjo maždaug 25%.
    • LLVM pagrįstas kompiliatorius buvo atskirtas nuo vykdymo bibliotekos į naują biblioteką libjulia-codegen. Jis įkeliamas pagal numatytuosius nustatymus, todėl įprasto naudojimo metu neturėtų būti jokių pakeitimų. Diegiant, kuriems nereikia kompiliatoriaus (pavyzdžiui, sistemos atvaizdai, kuriuose iš anksto sukompiliuotas visas reikalingas kodas), šią biblioteką (ir jos priklausomybę nuo LLVM) galima tiesiog praleisti.
    • Sąlyginio tipo išvada dabar įmanoma perduodant argumentą metodui. Pavyzdžiui, Base.ifelse(isa(x, Int), x, 0) grąžina ::Int, net jei x tipas nežinomas.
    • SROA (Scalar Replacement of Aggregates) buvo patobulintas: pašalina getfield skambučius su nuolatiniais globaliais laukais, pašalina kintamas struktūras su neinicijuotais laukais, pagerina įdėtųjų getfield skambučių našumą ir valdymą.
    • Tipo išvada seka įvairius efektus – šalutinį poveikį ir nenukritimą. Atsižvelgiama į nuolatinį sklidimą, o tai žymiai pagerina kompiliavimo laiką. Kai kuriais atvejais, pavyzdžiui, iškvietimai į funkcijas, kurių negalima įtraukti, bet neturi įtakos rezultatui, vykdymo metu bus atmesti. Efektų taisykles galima perrašyti rankiniu būdu naudojant makrokomandą Base.@assume_effects.
    • Išankstinis kompiliavimas (su aiškiomis išankstinio kompiliavimo direktyvomis arba nurodytais darbo krūviais) dabar išsaugo daugiau tipo apibrėžto kodo, todėl pirmą kartą vykdomas greičiau. Bet kokie nauji metodų/tipų deriniai, kurių reikia jūsų paketui, neatsižvelgiant į tai, kur tie metodai buvo apibrėžti, dabar gali būti saugomi išankstinio kompiliavimo faile, jei juos iškviečia jūsų paketui priklausantis metodas.
  • Komandinės eilutės parinkčių pakeitimai
    • Numatytoji @inbounds deklaracijų stebėjimo elgsena dabar yra automatinė parinktis „--check-bounds=yes|no|auto“.
    • Nauja parinktis „-- Strip-metadata“, skirta pašalinti dokumentų eilutes, šaltinio vietos informaciją ir vietinių kintamųjų pavadinimus kuriant sistemos vaizdą.
    • Nauja parinktis "--strip-ir", leidžianti kompiliatoriui pašalinti tarpinį šaltinio kodo atvaizdą kuriant sistemos vaizdą. Gautas vaizdas veiks tik tuo atveju, jei bus naudojamas "--compile=all" arba jei visas reikalingas kodas bus iš anksto sukompiliuotas.
    • Jei vietoj failo pavadinimo nurodomas simbolis „-“, vykdomasis kodas nuskaitomas iš standartinio įvesties srauto.
  • Kelių gijų palaikymo pakeitimai
    • Threads.@threads pagal numatytuosius nustatymus naudoja naują planavimo parinktį :dynamic, kuri skiriasi nuo ankstesnio režimo tuo, kad iteracijos bus suplanuotos dinamiškai visose pasiekiamose darbuotojo gijose, o ne priskirtos kiekvienai gijai. Šis režimas leidžia geriau paskirstyti įdėtas kilpas su @spawn ir @threads.
  • Naujos bibliotekos funkcijos
    • everysplit(str), kad būtų galima atlikti split(str) kelis kartus.
    • allequal(itr), kad patikrintų, ar visi iteratoriaus elementai yra lygūs.
    • hardlink(src, dst) gali būti naudojamas kuriant kietąsias nuorodas.
    • setcpuaffinity(cmd, cpus), kad nustatytumėte procesoriaus branduolio giminingumą paleistiems procesams.
    • diskstat(path=pwd()), kad gautumėte disko statistiką.
    • Nauja @showtime makrokomanda, kad būtų rodoma vertinama eilutė ir @time ataskaita.
    • LazyString ir lazy"str" makrokomandos buvo pridėtos, kad palaikytų tingų klaidų pranešimų kūrimą klaidų keliuose.
    • Ištaisyta Dict ir kitų išvestinių objektų, tokių kaip raktai (:: Dict), reikšmės (:: Dict) ir rinkinys, lygiagretumo problema. Iteracijos metodus dabar galima iškviesti žodyne arba rinkinyje, jei nėra iškvietimų, modifikuojančių žodyną ar rinkinį.
    • @time ir @timev dabar turi pasirenkamą aprašą, leidžiantį, pavyzdžiui, komentuoti laiko ataskaitų šaltinį. @time "Vertinant foo" foo().
    • diapazonas yra vienintelis raktinio žodžio argumentas arba sustojimas, arba ilgis.
    • precision ir setprecision dabar priima bazę kaip raktinį žodį
    • TCP lizdo objektai dabar suteikia uždaro rašymo metodą ir palaiko pusiau atviro režimo naudojimą.
    • extrema dabar priima pradinį argumentą.
    • Iterators.countfrom dabar priima bet kokį tipą, kuris apibrėžia + metodą.
    • @time dabar paskirsto % laiko, praleisto perkompiliuojant metodus su pakeistais tipais.
  • Standartiniai bibliotekos pakeitimai
    • Raktai su verte Nieko dabar pašalinami iš aplinkos Addenv.
    • Iterators.reverse (ir todėl paskutinis) palaiko kiekvieną eilutę.
    • Tam tikrų tipų diapazonų ilgio funkcija nebetikrina sveikųjų skaičių perpildymo. Yra nauja funkcija checked_length; joje yra bitų perdavimo valdymo logika. Jei reikia, naudokite SaferIntegers.jl, kad sukurtumėte diapazono tipą.
    • Iterators.Reverse iterator įgyvendina kiekvieną indekso apvertimą, jei įmanoma.
  • Paketo valdytojas
    • Nauji ⌃ ir ⌅ indikatoriai šalia paketų, kurių būsena yra „pkg>“, kuriems galimos naujos versijos. ⌅ rodo, kad negalima įdiegti naujų versijų.
    • Naujas pasenęs::Bool argumentas Pkg.status (--pasenęs arba -o REPL režimu), kad būtų rodoma informacija apie ankstesnių versijų paketus.
    • Naujas compat::Bool argumentas Pkg.status (--compat arba -c REPL režimu), kad būtų rodomi visi [compat] įrašai Project.toml.
    • Naujas „pkg>compat“ (ir Pkg.compat) režimas, skirtas projekto suderinamumo įrašams nustatyti. Teikia interaktyvų rengyklę per „pkg>compat“ arba tiesioginį įrašų valdymą per „pkg>Foo 0.4,0.5“, kuris gali įkelti esamus įrašus užbaigus skirtuką. Tai reiškia, kad „pkg> compat Fo“ automatiškai atnaujinamas į „pkg> Foo 0.4,0.5“, kad būtų galima redaguoti esamą įrašą.
    • Pkg dabar bando atsisiųsti paketus iš paketų serverio tik tuo atveju, jei serveris stebi registrą, kuriame yra paketas.
    • Pkg.instantiate dabar pateiks įspėjimą, kai Project.toml nebus sinchronizuotas su Manifest.toml. Tai daroma remdamasi projekto deps ir suderinamų įrašų maiša (kiti laukai yra nepaisomi) apraše jį sprendžiant, kad bet kokie Project.toml deps arba suderinamų įrašų pakeitimai būtų aptikti be sprendimo iš naujo.
    • Jei "pkg>add" negali rasti paketo su nurodytu pavadinimu, dabar jis pasiūlys paketus panašiais pavadinimais, kuriuos galima pridėti.
    • Apraše saugomoje „julia“ versijoje nebėra versijos numerio, o tai reiškia, kad pagrindinė versija dabar bus parašyta kaip 1.9.0-DEV.
    • Bandomasis nutraukimas „pkg>“ dabar bus aptiktas nuosekliau ir bus tinkamai grąžintas į REPL.
  • InteractiveUtils
    • Nauja @time_imports makrokomanda, skirta pranešti apie laiką, praleistą importuojant paketus ir jų priklausomybes, paryškinant kompiliavimo ir perkompiliavimo laiką kaip importo procentą.
  • Tiesinė algebra
    • BLAS submodulis dabar palaiko 2 lygio BLAS spr! funkcijas.
    • Standartinė LinearAlgebra.jl biblioteka dabar yra visiškai nepriklausoma nuo SparseArrays.jl tiek šaltinio kodo, tiek vienetų testavimo požiūriu. Dėl to reti masyvai nebegrąžinami (netiesiogiai) naudojant „LinearAlgebra“ metodus, taikomus baziniams arba „LinearAlgebra“ objektams. Visų pirma, tai lemia šiuos lūžtančius pakeitimus:
      • Sujungimai naudojant specialias „retas“ matricas (pvz., įstrižainės) dabar grąžina tankias matricas; Dėl to SVD objektų D1 ir D2 laukai, sukurti naudojant getproperty iškvietimus, dabar yra tankios matricos.
      • Panašus (::SpecialSparseMatrix, ::Type, ::Dims) metodas grąžina tankią nulinę matricą. Dėl to dviejų, trijų ir simetriškų trikampių matricų sandaugos viena su kita sukuria tankią matricą. Be to, sukurti panašias matricas su trimis argumentais iš specialių "retų" matricų iš (nestatinių) matricų dabar nepavyksta dėl "zero(::Type{Matrix{T}})".
  • Printf
    • %s ir %c dabar naudoja teksto pločio argumentą pločiui formatuoti.
  • Profilis
    • CPU apkrovos profiliavimas dabar įrašo metaduomenis, įskaitant gijas ir užduotis. Profile.print() turi naują groupby argumentą, kuris leidžia grupuoti gijas, užduotis arba pogijas / užduotis, užduotis / gijas ir gijų bei užduočių argumentus, kad būtų galima filtruoti. Be to, dabar nurodomas panaudojimo procentas arba kaip bendras skaičius, arba kiekvienai gijai, atsižvelgiant į tai, ar gija neveikia, ar ne kiekviename pavyzdyje. Profile.fetch() pagal numatytuosius nustatymus apima naujus metaduomenis. Siekiant atgalinio suderinamumo su išoriniais profiliavimo duomenų vartotojais, jie gali būti neįtraukti, išduodant include_meta=false.
    • Naujasis Profile.Allocs modulis leidžia profiliuoti atminties paskirstymą. Įrašoma kiekvieno atminties paskirstymo tipo ir dydžio kamino pėdsakas, o argumentas sample_rate leidžia praleisti konfigūruojamą paskirstymų skaičių, sumažinant našumo išlaidas.
    • Fiksuotos trukmės procesoriaus profiliavimą dabar gali vykdyti vartotojas, kai vykdomos užduotys, prieš tai neįkeldamas profilio, o ataskaita bus rodoma vykdant. „MacOS“ ir „FreeBSD“ sistemose paspauskite ctrl-t arba skambinkite SIGINFO. Kitoms platformoms aktyvuokite SIGUSR1, t.y. % nužudyti -USR1 $julia_pid. Tai nepasiekiama sistemoje „Windows“.
  • ATSAKYTI
    • „RadioMenu“ dabar palaiko papildomus sparčiuosius klavišus, leidžiančius tiesiogiai pasirinkti parinktis.
    • Seka "?(x, y" ir paspaudus TAB rodo visus metodus, kuriuos galima iškviesti su argumentais x, y, .... (Tarpas priekyje neleidžia įjungti pagalbos režimo.) "MyModule.?(x, y " apriboja paiešką iki "MyModule". Paspaudus TAB reikia, kad bent vienas argumentas būtų konkretesnio tipo nei Any. Arba vietoj TAB naudokite SHIFT-TAB, kad būtų galima naudoti bet kokius suderinamus metodus.
    • Naujasis visuotinis kintamasis err leidžia gauti naujausią išimtį, panašią į ans elgesį su paskutiniu atsakymu. Įvedus err, išimties informacija išspausdinama iš naujo.
  • SparseArrays
    • Perkėlė SparseArrays kodą iš Julia saugyklos į išorinę SparseArrays.jl saugyklą.
    • Naujos sujungimo funkcijos sparse_hcat, sparse_vcat ir sparse_hvcat grąžina SparseMatrixCSC tipą, neatsižvelgiant į įvesties argumentų tipus. Tai tapo būtina norint suvienodinti matricų klijavimo mechanizmą, atskyrus LinearAlgebra.jl ir SparseArrays.jl kodus.
  • Miško ruoša
    • Standartiniai registravimo lygiai BelowMinLevel, Debug, Info, Warn, Error ir AboveMaxLevel dabar eksportuojami iš standartinės registravimo bibliotekos.
  • Unicode
    • Pridėta isequal_normalized funkcija, skirta patikrinti unikodo lygiavertiškumą, nekuriant normalizuotų eilučių.
    • Funkcija Unicode.normalize dabar priima raktinį žodį charttransform, kurį galima naudoti norint pateikti pasirinktinius simbolių susiejimus, o funkcija Unicode.julia_chartransform taip pat pateikiama atvaizduoti atvaizdavimą, naudojamą, kai Julia analizatorius normalizuoja identifikatorius.
  • testas
    • „@test_throws“ „kažkoks pranešimas“ triggers_error()“ dabar gali būti naudojamas norint patikrinti, ar rodomame klaidos tekste yra „tam tikro pranešimo“ klaida, neatsižvelgiant į konkretų išimties tipą. Taip pat palaikomos reguliarios išraiškos, eilučių sąrašai ir atitikimo funkcijos.
    • @testset foo() dabar gali būti naudojamas kuriant testų rinkinį iš nurodytos funkcijos. Bandymo atvejo pavadinimas yra iškviečiamos funkcijos pavadinimas. Iškviestoje funkcijoje gali būti @test ir kitų @testset apibrėžimų, įskaitant iškvietimus į kitas funkcijas, tuo pačiu įrašant visus tarpinius testo rezultatus.
    • „TestLogger“ ir „LogRecord“ dabar eksportuojami iš standartinės testavimo bibliotekos.
  • Platinama
    • SSHManager dabar palaiko darbininkų gijas su csh/tcsh įpakavimu naudojant addprocs() metodą ir parametrą shell=:csh.
  • Kiti pakeitimai
    • GC.enable_logging(true) gali būti naudojamas registruojant kiekvieną šiukšlių surinkimo operaciją, nurodant surinktos atminties laiką ir kiekį.

Šaltinis: opennet.ru

Добавить комментарий