Julia 1.8 programazio-lengoaia kaleratzea

Julia 1.8 programazio hizkuntzaren bertsioa eskuragarri dago, errendimendu handia, idazketa dinamikorako euskarria eta programazio paralelorako tresna integratuak bezalako ezaugarriak konbinatuz. Juliaren sintaxia MATLABetik hurbil dago, Ruby eta Lisp-en elementu batzuk mailegatuz. Kateak manipulatzeko metodoak Perl gogorarazten du. Proiektuaren kodea MIT lizentziapean banatzen da.

Hizkuntzaren ezaugarri nagusiak:

  • Errendimendu handia: proiektuaren funtsezko helburuetako bat C programetatik gertuko errendimendua lortzea da. Julia konpilatzailea LLVM proiektuaren lanean oinarritzen da eta jatorrizko makina-kode eraginkorra sortzen du helburu-plataforma askorentzat;
  • Programazio-paradigma desberdinak onartzen ditu, objektuetara bideratutako eta programazio funtzionalaren elementuak barne. Liburutegi estandarrak, besteak beste, I/O asinkronoak, prozesuen kontrola, erregistroa, profilak eta paketeak kudeatzeko funtzioak eskaintzen ditu;
  • Idazketa dinamikoa: hizkuntzak ez du aldagaietarako moten definizio esplizitua eskatzen, scripting programazio lengoaien antzera. Modu interaktiboa onartzen da;
  • Motak esplizituki zehazteko aukerako gaitasuna;
  • Zenbakizko konputaziorako, konputazio zientifikorako, ikaskuntza automatikorako eta datuak bistaratzeko sintaxia aproposa. Zenbakizko datu mota asko eta kalkuluak paralelizatzeko tresnak onartzen ditu.
  • C liburutegietako funtzioak zuzenean deitzeko gaitasuna geruza gehigarririk gabe.

Aldaketa nagusiak Julia 1.8-n:

  • Hizkuntza ezaugarri berriak
    • Egitura aldagarri baten eremuak konstante gisa oharta daitezke orain, alda ez daitezen eta optimizazioa ahalbidetzeko.
    • Aldagai globaletan motako oharrak gehi daitezke.
    • N-dimentsioko matrize hutsak kortxeteen barruan hainbat puntu eta koma erabiliz sor daitezke, adibidez "[;;;]" 0x0x0 matrizea sortzen du.
    • Saiatu blokeek orain, aukeran, else bloke bat izan dezakete, gorputz nagusiaren ondoren berehala exekutatzen dena akatsik bota ez bada.
    • @inline eta @noinline funtzioaren gorputz baten barruan jar daitezke, funtzio anonimo bati oharrak egiteko aukera emanez.
    • @inline eta @noinline orain dei-gune batean edo bloke batean funtzio bati aplika dakizkioke dagozkion funtzio-deiak sartzera (edo sartu gabe) behartzeko.
    • βˆ€, βˆƒ eta βˆ„ karaktere identifikatzaile gisa onartzen dira.
    • Unicode 14.0.0 zehaztapenerako euskarria gehitu da.
    • Module(:izena, false, false) metodoa izenik ez duen, Base edo Core inportatzen ez duen eta bere buruari erreferentziarik ez duen modulu bat sortzeko erabil daiteke.
  • Hizkuntza aldaketak
    • Sortu berri diren Task objektuek (@spawn, @async, etab.) orain Task gurasoaren metodoetarako world_age dute sortzen direnean, exekuzio optimizatua ahalbidetuz. Aurreko aktibazio aukera Base.invokelatest metodoa erabiliz dago eskuragarri.
    • Unicode desorekatua den bi norabideko formatearen zuzentarauak debekatuta daude kateetan eta iruzkinetan injekzioak saihesteko.
    • Base.ifelse funtzio generiko gisa definitzen da, integrazio gisa baino, paketeei bere definizioa zabaltzeko aukera emanez.
    • Aldagai global bati egindako esleipen bakoitza lehenik bihurtzeko (Edozein, x) edo bihurtzeko (T, x) dei baten bidez pasatzen da aldagai globala T motakoa dela deklaratu bazen. , x) === x beti da egia, bestela ustekabeko portaera ekar dezake.
    • Funtzio integratuak funtzio generikoen antzekoak dira eta metodoen bidez programatikoki zenbatu daitezke.
  • Konpiladore/exekuzio-denbora hobekuntzak
    • Abiarazteko denbora gutxi gorabehera % 25 murriztu da.
    • LLVM-n oinarritutako konpilatzailea exekuzio-liburutegitik bereizi da liburutegi berri batean, libjulia-codegen. Lehenespenez kargatuta dago, beraz, erabilera arruntean ez da aldaketarik egon behar. Konpilatzailerik behar ez duten inplementazioetan (adibidez, beharrezko kode guztia aurrez konpilatuta dagoen sistemako irudietan), liburutegi hau (eta bere LLVM menpekotasuna) besterik gabe ezabatu egin daiteke.
    • Mota baldintzapeko inferentzia posible da metodo bati argumentu bat pasatuz. Adibidez, Base.ifelse(isa(x, Int), x, 0)-k ::Int itzultzen du, nahiz eta x mota ezezaguna izan.
    • SROA (Scalar Replacement of Aggregates) hobetu da: eremu global iraunkorrak dituzten getfield deiak ezabatzen ditu, hasieratu gabeko eremuak dituzten egitura aldagarriak ezabatzen ditu, errendimendua eta habiaratu diren getfield deien kudeaketa hobetzen ditu.
    • Mota inferentziak hainbat efektu jarraitzen ditu: bigarren mailako efektuak eta erorketarik gabekoak. Etengabeko hedapena hartzen da kontuan, eta horrek nabarmen hobetzen du konpilazio garaiko errendimendua. Zenbait kasutan, adibidez, lerrokatu ezin diren baina emaitzan eragiten ez duten funtzioetarako deiak baztertu egingo dira exekuzioan. Efektuen arauak eskuz gainidatzi daitezke Base.@assume_effects makroa erabiliz.
    • Aurrekonpilazioak (aurrekonpilazio zuzentarau esplizituekin edo zehaztutako lan-kargarekin) orain motako definitutako kode gehiago gordetzen du, eta ondorioz, lehen aldiz exekuzioa azkarragoa da. Zure paketeak behar dituen metodo/mota konbinazio berri guztiak, metodo horiek non definitu ziren kontuan hartu gabe, orain aurrekonpilazio fitxategian gorde daitezke zure paketearen metodo batek deitzen baditu.
  • Komando-lerroko aukeretan aldaketak
    • @inbounds adierazpenak monitorizatzeko portaera lehenetsia "--check-bounds=yes|no|auto"-n aukera automatikoa da orain.
    • "--strip-metadata" aukera berria dokumentu-kateak, iturburu-kokapenaren informazioa eta aldagai lokalen izenak kentzeko sistemaren irudi bat sortzean.
    • "--strip-ir" aukera berria sistemaren irudia eraikitzean tarteko iturburu-kodearen irudikapena ken dezan konpilatzaileak. Sortutako irudiak "--compile=all" erabiltzen bada edo beharrezko kode guztia aurrez konpilatuta badago soilik funtzionatuko du.
    • Fitxategiaren izenaren ordez "-" karakterea zehazten bada, kode exekutagarria sarrerako korronte estandarretik irakurtzen da.
  • Hari anitzeko euskarriaren aldaketak
    • Threads.@threads-ek lehenespenez: dynamic antolamendu-aukera berria erabiltzen du, aurreko modutik ezberdina dena, iterazioak dinamikoki programatuko baitira erabilgarri dauden langile-harien artean, hari bakoitzari esleitu beharrean. Modu honek @spawn eta @threads-ekin habiatutako begiztak hobeto banatzeko aukera ematen du.
  • Liburutegiko funtzio berriak
    • eachsplit(str) split(str) hainbat aldiz exekutatzeko.
    • allequal(itr) iteragailu bateko elementu guztiak berdinak diren ala ez probatzeko.
    • hardlink(src, dst) esteka gogorrak sortzeko erabil daiteke.
    • setcpuaffinity(cmd, cpus) prozesadorearen nukleoaren afinitatea abiarazitako prozesuekin ezartzeko.
    • diskstat(path=pwd()) diskoaren estatistikak lortzeko.
    • @showtime makro berria ebaluatzen ari den lerroa eta @time txostena bistaratzeko.
    • LazyString eta lazy"str" ​​makroa gehitu dira errore-bideetan errore-mezuen eraikuntza alferra laguntzeko.
    • Dict-en eta eratorritako beste objektu batzuetan aldibereko arazo bat konpondu da, hala nola gakoak (:: Dict), balioak (:: Dict) eta Set. Iterazio-metodoak orain hiztegi edo multzo batean dei daitezke, baldin eta hiztegia edo multzoa aldatzen duen deirik ez badago.
    • @time eta @timev-ek aukerako deskribapen bat dute orain, denbora-txostenen iturria ohartaraz dezazun, adibidez. @time "Foo ebaluatzen" foo().
    • barrutiak stop edo luzera hartzen ditu gako-argumentu bakarra gisa.
    • zehaztasuna eta setprecision-ek orain onartzen dute base gako-hitz gisa
    • TCP socket-objektuek idazketa hurbileko metodoa eskaintzen dute eta erdi-ireki moduaren erabilera onartzen dute.
    • extrema-k orain init argumentua onartzen du.
    • Iterators.countfrom orain + metodo bat definitzen duen edozein mota onartzen du.
    • @timek orain aldatutako metodoak birkonpilatzen emandako denboraren % esleitzen du.
  • Liburutegiaren aldaketa estandarrak
    • Balioa duten gakoak Ez da ezer kendu ingurunetik addenv-n.
    • Iteratzaileak.alderantzizkoa (eta, beraz, azkena) lerro bakoitza onartzen du.
    • Mota jakin batzuen barrutietarako luzera-funtzioak jada ez du egiaztatzen zenbaki osoen gainezkatzea. Funtzio berri bat, checked_length, eskuragarri dago; bit transferentzia kontrolatzeko logika dauka. Beharrezkoa bada, erabili SaferIntegers.jl barruti mota eraikitzeko.
    • Iteratzaileak. Alderantzizko iteratzaileak indizearen alderantzikadura bakoitza inplementatzen du, ahal bada.
  • Paketeen kudeatzailea
    • Bertsio berriak eskuragarri dauden "pkg>" egoeran dauden paketeen βŒƒ eta βŒ… adierazle berriak. βŒ…-k bertsio berriak ezin direla instalatu adierazten du.
    • Zaharkituta::Bool argumentu berria Pkg.status-erako (-- zaharkitua edo -o REPL moduan) aurreko bertsioetako paketeei buruzko informazioa erakusteko.
    • Compat::Bool argumentu berria Pkg.status-erako (--compat edo -c REPL moduan) Project.toml-en edozein [compat] sarrera erakusteko.
    • Proiektuaren bateragarritasun-sarrerak ezartzeko "pkg>compat" (eta Pkg.compat) modu berria. Editore interaktibo bat eskaintzen du "pkg>compat" bidez edo zuzeneko erregistro-kontrola "pkg>Foo 0.4,0.5" bidez, eta horrek uneko erregistroak karga ditzake fitxa osatzearen bidez. Hau da, "pkg> compat Fo " automatikoki eguneratzen da "pkg>Foo 0.4,0.5" lehendik dagoen sarrera bat editatzeko.
    • Orain Pkg paketeak pakete zerbitzari batetik deskargatzen saiatzen da zerbitzariak paketea duen erregistroa kontrolatzen badu.
    • Pkg.instantiate-k abisua emango du orain Project.toml Manifest.toml-ekin sinkronizatuta dagoenean. Proiektuaren deps eta konpat-erregistroen hash batean oinarrituta egiten du (beste eremu batzuk ez ikusi egiten dira) manifestuan ebaztean, Project.toml deps-en edo konpat-erregistroen edozein aldaketa berriro ebatzi gabe detektatu ahal izateko.
    • "pkg>add"-ek ezin badu aurkitu emandako izena duen paketerik, orain gehitu daitezkeen antzeko izenak dituzten paketeak proposatuko ditu.
    • Manifestuan gordetako julia-ren bertsioak jada ez du konpilazio-zenbakia jasotzen, hau da, maisua 1.9.0-DEV gisa idatziko da.
    • "pkg>" probaren etenaldia modu koherenteagoan detektatuko da, eta behar bezala itzuliko da REPLra.
  • InteractiveUtils
    • @time_imports makro berria paketeak eta haien mendekotasunak inportatzen emandako denboraren berri emateko, konpilazio eta birkonpilazio denbora inportazioen ehuneko gisa nabarmenduz.
  • Aljebra lineala
    • BLAS azpimoduluak 2. mailako BLAS spr! funtzioak onartzen ditu orain.
    • LinearAlgebra.jl liburutegi estandarra gaur egun SparseArrays.jl-tik guztiz independentea da, bai iturburu-kodetik, bai unitate-probaren ikuspegitik. Ondorioz, matrize urriak ez dira (inplizituki) itzultzen Oinarrizko edo LinearAlgebra objektuei aplikatutako LinearAlgebra-ko metodoek. Bereziki, honek aldaketa haustura hauek eragiten ditu:
      • Matrize "esparru" bereziak erabiltzen dituzten kateatzeek (adibidez, diagonala) matrize trinkoak itzultzen dituzte; Ondorioz, getproperty deien bidez sortutako SVD objektuen D1 eta D2 eremuak matrize trinkoak dira orain.
      • Antzeko(::SpecialSparseMatrix, ::Type, ::Dims) metodoak matrize nulu trinkoa itzultzen du. Ondorioz, matrize tridiagonal bi, hiru eta simetrikoen produktuek elkarren artean matrize trinko bat sortzen dute. Gainera, matrize (ez-estatikoetatik) matrize "esparru" berezietatik hiru argumentuekin antzeko matrizeak eraikitzeak huts egiten du orain "zero(::Type{Matrix{T}})" dela eta.
  • Printf
    • %s eta %c-k orain testu zabalera argumentua erabiltzen dute zabalera formateatzeko.
  • Profile
    • CPU-kargaren profilak metadatuak erregistratzen ditu orain, hariak eta zereginak barne. Profile.print()-k groupby argumentu berri bat du, hariak, atazak edo azpihariak/zereginak, atazak/hariak eta hariak eta atazak argumentuak taldekatzeko aukera ematen duena. Gainera, erabilera-ehunekoa orokorrean edo hari bakoitzeko adierazten da, lagin bakoitzean haria inaktibo dagoen edo ez dagoenaren arabera. Profile.fetch()-k metadatu berriak biltzen ditu lehenespenez. Profilen datuen kanpoko kontsumitzaileekin atzerako bateragarritasuna lortzeko, baztertu egin daiteke include_meta=false pasatuz.
    • Profile.Allocs modulu berriak memoria-esleipenen profila egiteko aukera ematen du. Memoria-esleipen bakoitzaren motaren eta tamainaren pila-arrastoa erregistratzen da, eta sample_rate argumentuak esleipen-kopuru konfiguragarri bat saltatzeko aukera ematen du, errendimenduaren gainkostua murriztuz.
    • Iraupen finkoko CPU profilak orain erabiltzaileak exekutatu ditzake zereginak exekutatzen ari diren bitartean profila kargatu gabe, eta txostena exekutatzen ari den bitartean bistaratuko da. MacOS eta FreeBSD-n, sakatu ctrl-t edo deitu SIGINFO. Beste plataformetarako, SIGUSR1 aktibatu, hau da. % hilketa -USR1 $julia_pid. Hau ez dago eskuragarri Windows-en.
  • ERREP
    • RadioMenuk orain teklatu lasterbide osagarriak onartzen ditu aukerak zuzenean hautatzeko.
    • TAB sakatuz gero "?(x, y" sekuentziak x, y, ... argumentuekin dei daitezkeen metodo guztiak bistaratzen ditu (lehenengo zuriune batek laguntza-moduan sartzea eragozten du). y " "MyModule-ra" bilaketa mugatzen du. TAB sakatuz gero, argumentu bat gutxienez edozein baino zehatzagoa izan behar da. Edo erabili SHIFT-TAB TAB-ren ordez metodo bateragarriak onartzeko.
    • Err aldagai global berriak azken salbuespena lortzeko aukera ematen du, azken erantzunarekin ans-en portaeraren antzera. Err sartuz gero, salbuespenaren informazioa berriro inprimatzen da.
  • SparseArrays
    • SparseArrays kodea Julia biltegitik kanpoko SparseArrays.jl biltegira eraman du.
    • Kateatze funtzio berriek sparse_hcat, sparse_vcat eta sparse_hvcat SparseMatrixCSC mota bat itzultzen dute sarrerako argumentuen motak kontuan hartu gabe. Hau beharrezkoa bihurtu zen matrizeak itsasteko mekanismoa bateratzeko LinearAlgebra.jl eta SparseArrays.jl kodea bereizi ondoren.
  • Logging
    • BelowMinLevel, Debug, Info, Warn, Error eta AboveMaxLevel erregistro-maila estandarrak Logging liburutegi estandarretik esportatzen dira.
  • Unicode
    • Isequal_normalized funtzioa gehitu da Unicode baliokidetasuna egiaztatzeko, kate normalizatuak esplizituki eraiki gabe.
    • Unicode.normalize funtzioak charttransform gako-hitza onartzen du orain, karaktereen mapa pertsonalizatuak emateko erabil daitekeena, eta Unicode.julia_chartransform funtzioa ere eskaintzen da Julia analizatzaileak identifikatzaileak normalizatzen dituenean erabiltzen den mapa erreproduzitzeko.
  • Test
    • '@test_throws "mezu batzuk" triggers_error()' orain bistaratzen den errore-testuak "mezuren bat" errorerik duen ala ez probatzeko erabil daiteke, salbuespen mota zehatza edozein izanda ere. Adierazpen erregularrak, kate-zerrendak eta bat datozen funtzioak ere onartzen dira.
    • @testset foo() orain funtzio jakin batetik proba multzo bat sortzeko erabil daiteke. Proba kasuaren izena deitzen den funtzioaren izena da. Deitutako funtzioak @test eta beste @testset definizioak izan ditzake, beste funtzio batzuetarako deiak barne, tarteko proben emaitza guztiak grabatzen dituen bitartean.
    • TestLogger eta LogRecord Test liburutegi estandarretik esportatzen dira orain.
  • Banatutako
    • SSHManager-ek orain csh/tcsh bilgarri batekin langileen hariak onartzen ditu addprocs() metodoaren eta shell=:csh parametroaren bidez.
  • Beste aldaketa batzuk
    • GC.enable_logging(true) zabor bilketa eragiketa bakoitza erregistratzeko erabil daiteke bildutako denbora eta memoria kopuruarekin.

Iturria: opennet.ru

Gehitu iruzkin berria