ProgrammēŔanas valodas Julia 1.8 izlaiŔana

Ir pieejams Julia 1.8 programmÄ“Å”anas valodas izlaidums, kas apvieno tādas Ä«paŔības kā augsta veiktspēja, atbalsts dinamiskai rakstÄ«Å”anai un iebÅ«vēti rÄ«ki paralēlai programmÄ“Å”anai. JÅ«lijas sintakse ir tuva MATLAB, dažus elementus aizņemoties no Ruby un Lisp. StÄ«gu manipulācijas metode atgādina Perl. Projekta kods tiek izplatÄ«ts saskaņā ar MIT licenci.

Galvenās valodas iezīmes:

  • Augsta veiktspēja: viens no galvenajiem projekta mērÄ·iem ir sasniegt C programmām tuvu veiktspēju. Julia kompilators ir balstÄ«ts uz LLVM projektu un Ä£enerē efektÄ«vu vietējo maŔīnkodu daudzām mērÄ·a platformām;
  • Atbalsts dažādām programmÄ“Å”anas paradigmām, ieskaitot objektorientētas un funkcionālās programmÄ“Å”anas elementus. Standarta bibliotēka nodroÅ”ina funkcijas asinhronai ievadei/izvadÄ«Å”anai, procesu pārvaldÄ«bai, reÄ£istrÄ“Å”anai, profilÄ“Å”anai un pakotņu pārvaldÄ«bai, cita starpā;
  • Dinamiskā rakstÄ«Å”ana: valodai nav nepiecieÅ”ama precÄ«za mainÄ«go tipu definÄ«cija pēc analoÄ£ijas ar skriptu programmÄ“Å”anas valodām. Atbalsta interaktÄ«vo režīmu;
  • Pēc izvēles iespēja skaidri norādÄ«t veidus;
  • Sintakse, kas ir lieliski piemērota skaitliskiem aprēķiniem, zinātniskiem aprēķiniem, maŔīnmācÄ«Å”anās sistēmām un datu vizualizācijai. Atbalsts daudziem skaitliskiem datu tipiem un rÄ«kiem aprēķinu paralēlināŔanai.
  • Iespēja tieÅ”i izsaukt funkcijas no C bibliotēkām bez papildu slāņiem.

Galvenās izmaiņas Jūlijā 1.8:

  • Jaunas valodas funkcijas
    • Maināmās struktÅ«ras laukus tagad var anotēt kā konstantes, lai novērstu to mainÄ«Å”anu un nodroÅ”inātu optimizāciju.
    • Tipa anotācijas var pievienot globālajiem mainÄ«gajiem.
    • TukÅ”us n-dimensiju masÄ«vus var izveidot, izmantojot vairākus semikolus kvadrātiekavās, piemēram, "[;;;]" izveido 0x0x0 masÄ«vu.
    • IzmēģināŔanas blokiem tagad pēc izvēles var bÅ«t cits bloks, kas tiek izpildÄ«ts uzreiz aiz galvenās daļas, ja nav izmestas kļūdas.
    • @inline un @noinline var ievietot funkcijas pamattekstā, ļaujot anotēt anonÄ«mu funkciju.
    • @inline un @noinline tagad var lietot funkcijai izsaukuma vietnē vai blokā, lai piespiestu iekļaut (vai neiekļaut) atbilstoÅ”os funkciju izsaukumus.
    • āˆ€, āˆƒ un āˆ„ ir atļauti kā identifikācijas rakstzÄ«mes.
    • Pievienots Unicode 14.0.0 specifikācijas atbalsts.
    • Metodi Module(:name, false, false) var izmantot, lai izveidotu moduli, kas nesatur nosaukumus, neimportē Base vai Core un nesatur atsauci uz sevi.
  • Valodas izmaiņas
    • Jaunizveidotajiem uzdevumu objektiem (@spawn, @async u.c.) tagad ir world_age metodēm no vecākuzdevuma izveides, kas ļauj optimizēt izpildi. IepriekŔējā aktivizācijas opcija ir pieejama, izmantojot metodi Base.invokelatest.
    • Unikoda nelÄ«dzsvarotās divvirzienu formatÄ“Å”anas direktÄ«vas tagad ir aizliegtas virknēs un komentāros, lai izvairÄ«tos no injekcijām.
    • Base.ifelse tagad ir definēta kā vispārÄ«ga funkcija, nevis iebÅ«vēta funkcija, kas ļauj pakotnēm paplaÅ”ināt tās definÄ«ciju.
    • Katra globālā mainÄ«gā pieŔķirÅ”ana tagad vispirms tiek aicināta konvertēt(JebkurÅ”, x) vai konvertēt(T, x), ja globālajam mainÄ«gajam tika deklarēts T tipa. Pirms globālo mainÄ«go izmantoÅ”anas pārliecinieties, vai nemainÄ«gais mainÄ«gais konvertē(Any , x) === x vienmēr ir patiess, pretējā gadÄ«jumā tas var izraisÄ«t neparedzētu uzvedÄ«bu.
    • IebÅ«vētās funkcijas tagad ir lÄ«dzÄ«gas vispārÄ«gajām funkcijām, un tās var programmatiski uzskaitÄ«t, izmantojot metodes.
  • Kompilatora/izpildlaika uzlabojumi
    • SāknÄ“Å”anas laiks samazināts par aptuveni 25%.
    • Uz LLVM balstÄ«tais kompilators ir atdalÄ«ts no izpildlaika bibliotēkas jaunā bibliotēkā libjulia-codegen. Tas tiek ielādēts pēc noklusējuma, tāpēc parastas lietoÅ”anas laikā nevajadzētu bÅ«t izmaiņām. Izvietojumos, kuriem nav nepiecieÅ”ams kompilators (piemēram, sistēmas attēli, kuros ir iepriekÅ” kompilēts viss nepiecieÅ”amais kods), Å”o bibliotēku (un tās LLVM atkarÄ«bu) var vienkārÅ”i izlaist.
    • NosacÄ«tā tipa secinājumi tagad ir iespējami, nododot argumentu metodei. Piemēram, Base.ifelse(isa(x, Int), x, 0) atgriež ::Int pat tad, ja x veids nav zināms.
    • SROA (agregātu skalārā aizstāŔana) ir uzlabota: novērÅ” getfield zvanus ar pastāvÄ«giem globāliem laukiem, novērÅ” mainÄ«gas struktÅ«ras ar neinicializētiem laukiem, uzlabo veiktspēju un ligzdotu getfield zvanu apstrādi.
    • Tipa secinājumi izseko dažādus efektus ā€” blakusparādÄ«bas un nenokriÅ”anu. Tiek ņemta vērā pastāvÄ«ga izplatÄ«Å”ana, kas ievērojami uzlabo kompilÄ“Å”anas laika veiktspēju. Dažos gadÄ«jumos, piemēram, izsaukumi uz funkcijām, kuras nevar iekļaut, bet neietekmē rezultātu, izpildes laikā tiks atmesti. Efektu noteikumus var pārrakstÄ«t manuāli, izmantojot makro Base.@assume_effects.
    • IepriekŔēja kompilācija (ar precÄ«zām pirmskompilācijas direktÄ«vām vai noteiktām darba slodzēm) tagad ietaupa vairāk tipa definēta koda, tādējādi nodroÅ”inot ātrāku pirmo izpildi. Visas jaunas metodes/tipu kombinācijas, kas nepiecieÅ”amas jÅ«su pakotnei, neatkarÄ«gi no tā, kur Ŕīs metodes tika definētas, tagad var tikt saglabātas keÅ”atmiņā pirmskompilācijas failā, ja tās izsauc jÅ«su pakotnei piederoÅ”a metode.
  • Komandrindas parametru izmaiņas
    • Noklusējuma darbÄ«ba @inbounds deklarāciju pārraudzÄ«bai tagad ir automātiskā opcija sadaļā "--check-bounds=yes|no|auto".
    • Jauna opcija "--strip-metadata", lai, veidojot sistēmas attēlu, noņemtu dokumentu virknes, avota atraÅ”anās vietas informāciju un vietējo mainÄ«go nosaukumus.
    • Jauna opcija "--strip-ir", lai ļautu kompilatoram noņemt starpposma pirmkoda attēlojumu, veidojot sistēmas attēlu. IegÅ«tais attēls darbosies tikai tad, ja tiks izmantots "--compile=all" vai arÄ« viss nepiecieÅ”amais kods ir iepriekÅ” kompilēts.
    • Ja faila nosaukuma vietā ir norādÄ«ta rakstzÄ«me "-", izpildāmais kods tiek nolasÄ«ts no standarta ievades straumes.
  • Daudzpavedienu atbalsta izmaiņas
    • Threads.@threads pēc noklusējuma izmanto jauno plānoÅ”anas opciju :dynamic, kas atŔķiras no iepriekŔējā režīma ar to, ka iterācijas tiks dinamiski ieplānotas pieejamos darbinieka pavedienos, nevis pieŔķirtas katram pavedienam. Å is režīms ļauj labāk izplatÄ«t ligzdotās cilpas ar @spawn un @threads.
  • Jaunas bibliotēkas funkcijas
    • everysplit(str), lai izpildÄ«tu split(str) vairākas reizes.
    • allequal(itr), lai pārbaudÄ«tu, vai visi iteratora elementi ir vienādi.
    • hardlink(src, dst) var izmantot, lai izveidotu cietās saites.
    • setcpuaffinity(cmd, cpus), lai iestatÄ«tu procesora kodola afinitāti pret palaistajiem procesiem.
    • diskstat(path=pwd()), lai iegÅ«tu diska statistiku.
    • Jauns @showtime makro, lai parādÄ«tu gan novērtēto rindu, gan @time atskaiti.
    • LazyString un lazy"str" makro ir pievienoti, lai atbalstÄ«tu kļūdu ziņojumu slinku veidoÅ”anu kļūdu ceļos.
    • Novērsta vienlaicÄ«bas problēma programmā Dict un citos atvasinātos objektos, piemēram, taustiņos (::Dict), vērtÄ«bās (::Dict) un Set. Iterācijas metodes tagad var izsaukt vārdnÄ«cā vai kopā, ja vien nav izsaukumu, kas modificē vārdnÄ«cu vai kopu.
    • @time un @timev tagad ir neobligāts apraksts, kas, piemēram, ļauj anotēt laika atskaites avotu. @time "Novērtējot foo" foo().
    • diapazons kā vienÄ«go atslēgvārda argumentu izmanto stopu vai garumu.
    • precizitāte un setprecision tagad pieņem bāzi kā atslēgvārdu
    • TCP ligzdas objekti tagad nodroÅ”ina closewrite metodi un atbalsta pusatvērtā režīma izmantoÅ”anu.
    • extrema tagad pieņem init argumentu.
    • Iterators.countfrom tagad pieņem jebkuru veidu, kas definē + metodi.
    • @time tagad pieŔķir % laika, kas pavadÄ«ts metožu pārkompilÄ“Å”anai ar mainÄ«tiem veidiem.
  • Standarta bibliotēkas izmaiņas
    • Atslēgas ar vērtÄ«bu Nekas tagad tiek noņemtas no vides programmā addenv.
    • Iterators.reverse (un tāpēc pēdējais) atbalsta katru rindiņu.
    • Garuma funkcija noteiktu veidu diapazoniem vairs nepārbauda veselu skaitļu pārpildÄ«Å”anu. Ir pieejama jauna funkcija checked_length; tā satur bitu pārsÅ«tÄ«Å”anas vadÄ«bas loÄ£iku. Ja nepiecieÅ”ams, izmantojiet SaferIntegers.jl, lai izveidotu diapazona veidu.
    • Iterators.Reverse iterators Ä«steno katru indeksa apvērÅ”anu, ja iespējams.
  • Iepakojuma pārvaldnieks
    • Jauni āŒƒ un āŒ… indikatori blakus pakotnēm statusā ā€œpkg>ā€, kurām ir pieejamas jaunas versijas. āŒ… norāda, ka nevar instalēt jaunas versijas.
    • Jauns novecojis::Bool arguments Pkg.status (--novecojis vai -o REPL režīmā), lai parādÄ«tu informāciju par pakotnēm no iepriekŔējām versijām.
    • Jauns compat::Bool arguments Pkg.status (--compat vai -c REPL režīmā), lai parādÄ«tu visus [compat] ierakstus Project.toml.
    • Jauns "pkg>compat" (un Pkg.compat) režīms projektu saderÄ«bas ierakstu iestatÄ«Å”anai. NodroÅ”ina interaktÄ«vu redaktoru, izmantojot "pkg> compat", vai tieÅ”u ierakstu vadÄ«bu, izmantojot "pkg> Foo 0.4,0.5, 0.4,0.5", kas var ielādēt paÅ”reizējos ierakstus, aizpildot cilni. Tas nozÄ«mē, ka "pkg> compat Fo" tiek automātiski atjaunināts uz "pkg> Foo XNUMX", lai varētu rediģēt esoÅ”o ierakstu.
    • Pkg tagad tikai mēģina lejupielādēt pakotnes no pakotņu servera, ja serveris uzrauga reÄ£istru, kurā ir pakotne.
    • Pkg.instantiate tagad izdos brÄ«dinājumu, kad Project.toml nav sinhronizēts ar Manifest.toml. Tas tiek darÄ«ts, pamatojoties uz projekta deps un compat ierakstu jaukÅ”anu (citi lauki tiek ignorēti) manifestā, to atrisinot, lai visas Project.toml deps vai compat ierakstu izmaiņas varētu noteikt bez atkārtotas atrisināŔanas.
    • Ja "pkg>add" nevar atrast pakotni ar norādÄ«to nosaukumu, tā tagad ieteiks pakotnes ar lÄ«dzÄ«giem nosaukumiem, kuras var pievienot.
    • Manifestā saglabātajā julia versijā vairs nav iekļauts bÅ«vējuma numurs, kas nozÄ«mē, ka galvenā versija tagad tiks rakstÄ«ta kā 1.9.0-DEV.
    • Pārbaudes pārtraukums "pkg>" tagad tiks noteikts konsekventāk un tiks pareizi atgriezts REPL.
  • InteractiveUtils
    • Jauns @time_imports makro, lai ziņotu par laiku, kas pavadÄ«ts, importējot pakotnes un to atkarÄ«bas, izceļot kompilÄ“Å”anas un atkārtotas kompilÄ“Å”anas laiku kā importa procentuālo daļu.
  • Lineārā algebra
    • BLAS apakÅ”modulis tagad atbalsta 2. lÄ«meņa BLAS spr! funkcijas.
    • LinearAlgebra.jl standarta bibliotēka tagad ir pilnÄ«bā neatkarÄ«ga no SparseArrays.jl gan no pirmkoda, gan no vienÄ«bu testÄ“Å”anas viedokļa. LÄ«dz ar to retie masÄ«vi vairs netiek atgriezti (netieÅ”i) ar LinearAlgebra metodēm, kas tiek lietotas Base vai LinearAlgebra objektiem. Tas jo Ä«paÅ”i izraisa Ŕādas bÅ«tiskas izmaiņas:
      • Savienojumi, izmantojot Ä«paÅ”as "retās" matricas (piemēram, diagonāles), tagad atgriež blÄ«vas matricas; Tā rezultātā SVD objektu lauki D1 un D2, kas izveidoti ar getproperty izsaukumiem, tagad ir blÄ«vas matricas.
      • LÄ«dzÄ«gā (::SpecialSparseMatrix, ::Type, ::Dims) metode atgriež blÄ«vu nulles matricu. Tā rezultātā divu, trÄ«s un simetrisku trÄ«sdiagonālu matricu produkti savā starpā rada blÄ«vu matricu. Turklāt lÄ«dzÄ«gu matricu izveidoÅ”ana ar trim argumentiem no Ä«paŔām "retām" matricām no (nestatiskām) matricām tagad neizdodas "zero(::Type{Matrix{T}})" dēļ.
  • Printf
    • %s un %c tagad izmanto teksta platuma argumentu, lai formatētu platumu.
  • Profils
    • CPU slodzes profilÄ“Å”ana tagad reÄ£istrē metadatus, tostarp pavedienus un uzdevumus. Profile.print() ir jauns arguments groupby, kas ļauj grupēt pavedienus, uzdevumus vai apakÅ”pavedienus/uzdevumus, uzdevumus/pavedienus un pavedienu un uzdevumu argumentus, lai nodroÅ”inātu filtrÄ“Å”anu. Turklāt izmantoÅ”anas procenti tagad tiek ziņoti vai nu kā kopējais, vai pa pavedienam atkarÄ«bā no tā, vai pavediens ir dÄ«kstāvē vai nav katrā paraugā. Profile.fetch() pēc noklusējuma ietver jaunos metadatus. Lai nodroÅ”inātu atpakaļsaderÄ«bu ar profilÄ“Å”anas datu ārējiem patērētājiem, to var izslēgt, nododot parametru include_meta=false.
    • Jaunais Profile.Allocs modulis ļauj profilēt atmiņas sadalÄ«jumu. Tiek reÄ£istrēts katras atmiņas sadalÄ«juma veida un lieluma steka izsekoÅ”ana, un arguments sample_rate ļauj izlaist konfigurējamu pieŔķīrumu skaitu, samazinot veiktspējas izmaksas.
    • Fiksēta ilguma CPU profilÄ“Å”anu tagad lietotājs var palaist uzdevumu izpildes laikā, iepriekÅ” neielādējot profilu, un darbÄ«bas laikā tiks parādÄ«ts pārskats. Operētājsistēmā MacOS un FreeBSD nospiediet ctrl-t vai zvaniet SIGINFO. Citām platformām aktivizējiet SIGUSR1, t.i. % kill -USR1 $julia_pid. Tas nav pieejams operētājsistēmā Windows.
  • REPL
    • RadioMenu tagad atbalsta papildu Ä«sinājumtaustiņus tieÅ”ai opciju izvēlei.
    • SecÄ«ba "?(x, y" un pēc tam nospiežot TAB tiek parādÄ«tas visas metodes, kuras var izsaukt ar argumentiem x, y, .... (SākoŔā atstarpe neļauj pāriet palÄ«dzÄ«bas režīmā.) "MyModule.?(x, y " ierobežo meklÄ“Å”anu ar "MyModule". Nospiežot TAB, ir nepiecieÅ”ams, lai vismaz vienam argumentam ir jābÅ«t specifiskākam nekā Any. Vai arÄ« izmantojiet SHIFT-TAB, nevis TAB, lai atļautu saderÄ«gas metodes.
    • Jaunais globālais mainÄ«gais err ļauj iegÅ«t jaunāko izņēmumu, lÄ«dzÄ«gi kā ans ar pēdējo atbildi. Ievadot kļūdu, tiek atkārtoti izdrukāta informācija par izņēmumu.
  • SparseArrays
    • Pārvietoja SparseArrays kodu no Julia repozitorija uz ārējo SparseArrays.jl repozitoriju.
    • Jaunās savienoÅ”anas funkcijas sparse_hcat, sparse_vcat un sparse_hvcat atgriež SparseMatrixCSC tipu neatkarÄ«gi no ievades argumentu veidiem. Tas kļuva nepiecieÅ”ams, lai unificētu matricu lÄ«mÄ“Å”anas mehānismu pēc LinearAlgebra.jl un SparseArrays.jl koda atdalÄ«Å”anas.
  • Mežizstrāde
    • Standarta reÄ£istrÄ“Å”anas lÄ«meņi BelowMinLevel, Debug, Info, Warn, Error un AboveMaxLevel tagad tiek eksportēti no standarta reÄ£istrÄ“Å”anas bibliotēkas.
  • Unikode
    • Pievienota funkcija isequal_normalized, lai pārbaudÄ«tu unikoda ekvivalenci, nepārprotami neveidojot normalizētas virknes.
    • Funkcija Unicode.normalize tagad pieņem atslēgvārdu charttransform, ko var izmantot, lai nodroÅ”inātu pielāgotus rakstzÄ«mju kartējumus, un funkcija Unicode.julia_chartransform tiek nodroÅ”ināta arÄ«, lai reproducētu kartējumu, ko izmanto, kad Julia parsētājs normalizē identifikatorus.
  • Pārbaude
    • '@test_throws "some message" triggers_error()' tagad var izmantot, lai pārbaudÄ«tu, vai parādÄ«tajā kļūdas tekstā ir kļūda "dažs ziņojums" neatkarÄ«gi no konkrētā izņēmuma veida. Tiek atbalstÄ«tas arÄ« regulārās izteiksmes, virkņu saraksti un atbilstÄ«bas funkcijas.
    • @testset foo() tagad var izmantot, lai izveidotu testa kopu no noteiktas funkcijas. Testa gadÄ«juma nosaukums ir izsauktās funkcijas nosaukums. Izsauktajā funkcijā var bÅ«t ietvertas @test un citas @testset definÄ«cijas, tostarp citu funkciju izsaukumiem, vienlaikus ierakstot visus starpposma testa rezultātus.
    • TestLogger un LogRecord tagad tiek eksportēti no standarta testa bibliotēkas.
  • SadalÄ«ts
    • SSHManager tagad atbalsta darbinieku pavedienus ar csh/tcsh iesaiņojumu, izmantojot metodi addprocs() un parametru shell=:csh.
  • Citas izmaiņas
    • GC.enable_logging(true) var izmantot, lai reÄ£istrētu katru atkritumu savākÅ”anas darbÄ«bu, norādot savāktās atmiņas laiku un apjomu.

Avots: opennet.ru

Pievieno komentāru