Julia 1.9 programazio lengoaia eskuragarri dago

Julia 1.9 programazio-lengoaiaren bertsioa argitaratu da, 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.9-n:

  • Hizkuntza ezaugarri berriak
    • Baimendu esleipenak beste modulu batean egiteko "setproperty!(::Module, ::Symbol, x)" erabiliz.
    • Azken postuan ez dauden hainbat lan onartzen dira. Adibidez, "a, b..., c = 1, 2, 3, 4" katea "a = 1" gisa prozesatuko da; b…, = 2, 3; c = 4". Hau Base.split_rest bidez kudeatzen da.
    • Karaktere bakarreko literalek kateen literalen sintaxi bera onartzen dute; horiek. Sintaxiak UTF-8 sekuentzia baliogabeak irudika ditzake, Char motak onartzen duen moduan.
    • Unicode 15 zehaztapenerako euskarria gehitu da.
    • Tupla eta izendun karaktere-tupla konbinazio habiatuak orain mota-parametro gisa erabil daitezke.
    • "getglobal(::Module, ::Symbol[, order])" eta "setglobal!(::Module, ::Symbol, x[, order])" funtzio barneratu berriak aldagai globaletan soilik irakurtzeko eta idazteko. Getglobal metodoa hobetsi beharko litzateke getfield metodoaren gainetik aldagai globaletara sartzeko.
  • Hizkuntza aldaketak
    • 1.7 bertsioan sartutako "@invoke" makroa esportatu eta erabilgarri dago orain. Gainera, orain "Core.Typeof(x)" metodoa erabiltzen du "Edozein" baino, "x" argumenturako mota-anotapena baztertzen den kasuetan. Hau beharrezkoa da argumentu gisa pasatzen diren motak behar bezala prozesatzen direla ziurtatzeko.
    • 1.7 bertsioan sartutako "invokelatest" funtzioaren eta "@invokelatest" makroaren esportazioa gaituta.
  • Konpiladore/exekuzio-denbora hobekuntzak
    • Lehen exekuziorako denbora nabarmen murriztu da (TTFX - Lehen exekuziorako denbora). Pakete bat aurrez konpilatzeak orain jatorrizko kodea gordetzen du "pkgimagen", hau da, aurrekonpilazio prozesuak sortutako kodea ez da berriro konpilatu beharko paketea kargatu ondoren. pkgimages modua erabiltzea "--pkgimages=no" aukera erabiliz desgaitu daiteke.
    • Inferentzia motaren konplexutasun koadratiko ezaguna den arazoa konpondu da, eta inferentziak oro har memoria gutxiago erabiltzen du. Automatikoki sortutako funtzio luzeak dituzten ertz-kasu batzuk (esaterako, ModelingToolkit.jl ekuazio diferentzial partzialekin eta kausa-eredu handiekin) askoz azkarrago konpilatzen dira.
    • Mota konkreturik gabeko argudioak dituzten deiak injekziorako edo bereizmen estatikorako optimizatuta egon daitezke orain Batasunaren zatiketa, nahiz eta bidaltzeko hainbat motatako hautagai egon. Honek errendimendua hobetu dezake objektu motak guztiz estatikoki konpontzen ez diren egoera batzuetan, "@nospecialize-d" dei-guneak estatikoki konponduz eta birkonpilazioa saihestuz.
    • Oinarrizko moduluko @pure makroaren erabilera guztiak Base.@assume_effects-ekin ordezkatu dira.
    • F(args...) erabili ohi diren baino mota espezifiko gutxiago dituzten invoke(f, invokesig, args...) deiek jada ez dute paketea birkonpilatzea eragiten.
  • Komando-lerroko aukeretan aldaketak
    • Linux eta Windows-en, "--threads=auto" aukera orain prozesadore-kopurua erabilgarri dagoen zehazten saiatzen da PUZaren afinitatean oinarrituta, normalean HPC eta hodeiko inguruneetan ezartzen den maskara.
    • β€œ--math-mode=fast” parametroa desgaituta dago, horren ordez β€œ@fastmath” makroa erabiltzea gomendatzen da, semantika argi eta garbi definitu duena.
    • "--hariak" aukera "auto |." formatuan dago orain N[,auto|M]", non M-k sortu beharreko hari interaktiboen kopurua adierazten du (une honetan automatikoak 1 esan nahi du).
    • Aukera gehitu da "β€”heap-size-hint=" ", zabor bilketa aktiboa hasten den atalasea ezartzen duena. Tamaina byte, kilobyte (1000 KB), megabyte (300 MB) edo gigabyte (1,5 GB) zehaztu daitezke.
  • Hari anitzeko aldaketak
    • "Threads.@spawn"-ek orain aukerako lehen argumentua du ":default" edo ":interactive" balioarekin. Zeregin interaktibo batek erantzun-latentzia txikia behar du eta laburra edo maiz egiteko diseinatuta dago. Zeregin interaktiboak hari interaktiboetan exekutatuko dira Julia abiaraztean zehazten badira.
    • Julia exekuzio-denboratik kanpo exekutatzen diren hariek (adibidez, C edo Javatik) Julia kodea dei dezakete orain "jl_adopt_thread" erabiliz. Hau automatikoki gertatzen da Julia kodea "cfunction" edo "@ccallable" sarrera puntuaren bidez sartzen denean. Ondorioz, orain hari kopurua alda daiteke exekuzioan zehar.
  • Liburutegiko funtzio berriak
    • "Iterators.flatmap" funtzio berria.
    • "pkgversion(m::Module)" funtzio berria modulu jakin bat kargatu duen paketearen bertsioa lortzeko, "pkgdir(m::Module)"-ren antzera.
    • "Stack(x)" funtzio berria, "reduce(hcat, x::Vector{<:Vector})" edozein dimentsiotara orokortzen duen eta edozein iteratzaileen iteratzaile ahalbidetzen duena. "stack(f, x)" metodoak "mapreduce(f, hcat, x)" orokortzen du eta eraginkorragoa da.
    • "@allocations" esleitutako memoria aztertzeko makro berria, "@allocated"-ren antzekoa, memoriaren esleipen kopurua itzultzen duela izan ezik, esleitutako memoriaren tamaina osoa baino.
  • Liburutegiaren ezaugarri berriak
    • "RoundFromZero"-k "BigFloat" ez den beste motetarako funtzionatzen du orain.
    • "Dict" eskuz murriztu daiteke orain "sizehint!" erabiliz.
    • "@time"-k metodo baliogabeak birkonpilatzen emandako denboraren ehunekoa bereizita zehazten du orain.
  • Liburutegi estandarrean egindako aldaketak
    • Dict eta eratorritako beste objektu batzuen iterazio metodoetan aldibereko arazo bat konpondu da, hala nola, gakoak(::Dict), values(::Dict) eta Set. Iterazio metodo hauek Dict edo Multzo batean paraleloan dei daitezke hari kopuru mugagabe baterako, betiere hiztegia edo multzoa aldatzen duten ekintzarik ez badago.
    • "!f" predikatu-funtzioa ezeztatzeak "(!) ∘ f" funtzio konposatua itzultzen du funtzio anonimo baten ordez.
    • Dimentsio-zerrenda-funtzioek dimentsio anitzetan funtzionatzen dute orain: "eachslice", "eachrow" eta "eachcol"-ek "Slices" objektu bat itzultzen du, bidaltzea ahalbidetzen duena metodo eraginkorragoak eskaintzeko.
    • "@kwdef" makroa gehitu da API publikora.
    • Arazo bat konpondu da "fld1"-ko eragiketen ordenarekin.
    • Orain ordenatzea beti egonkorra da (QuickSort berriro diseinatu da).
    • "Base.splat" esportatzen da orain. Itzultzeko balioa "Base.Splat" mota bat da, funtzio anonimo bat baino, eta modu egokian atera dadin.
  • Paketeen kudeatzailea
    • "Pakete-luzapenak": Julia saio batean kargatutako beste pakete batzuetatik kode zati bat kargatzeko laguntza. Aplikazioa "Requires.jl" paketearen antzekoa da, baina aurre-konpilazioa eta ezarpenen bateragarritasuna onartzen dira.
  • Aljebra Lineala Liburutegia
    • Elementu-zatiketarekin nahasteko arriskua dela eta, "a/b" eta "b\a" metodoak kendu ziren "a" eskalarrekin eta "b" bektorearekin, "a * pinv(b)"ren baliokideak zirenak.
    • BLAS eta LAPACK deitzeak "libblastrampoline (LBT)" erabiltzen du orain. OpenBLAS lehenespenez eskaintzen da, baina sistemaren irudia beste BLAS/LAPACK liburutegiekin eraikitzea ez da onartzen. Horren ordez, LBT mekanismoa erabiltzea gomendatzen da BLAS/LAPACK dagoen beste liburutegi multzo batekin ordezkatzeko.
    • "lu"-k matrizearen biraketa-estrategia berri bat onartzen du, "RowNonZero()", zeinak nulua ez den lehen errotazio-elementua hautatzen du aritmetika mota berriekin erabiltzeko eta prestakuntza-helburuetarako.
    • "normalize(x, p=2)"-k orain "x" espazio bektorial normalizatua onartzen du, eskalarrak barne.
    • BLAS hari-kopuru lehenetsia ARM arkitekturako PUZaren hari kopuruaren eta beste arkitektura batzuetan PUZaren harien kopuruaren erdia da.
  • Printf: Для Π»ΡƒΡ‡ΡˆΠ΅ΠΉ читаСмости ΠΏΠ΅Ρ€Π΅Ρ€Π°Π±ΠΎΡ‚Π°Π½Ρ‹ сообщСния ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ… для строк Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ³ΠΎ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°.
  • Profila: "Profile.take_heap_snapshot(fitxategia)" funtzio berria, Chrome-k onartzen duen JSON oinarritutako ".heapsnapshot" formatuan idazten duena.
  • Ausazkoa: randn eta randexp-ek randn definitzen duen AbstractFloat motarako funtzionatzen dute orain.
  • ERREP
    • "Alt-e" tekla-konbinazioa sakatzean uneko sarrera irekitzen da editorean. Edukia (aldatzen bada) editoretik irtetean exekutatuko da.
    • REPLan aktibo dagoen uneko modulu-testuingurua alda daiteke (Nagusia lehenespenez) "REPL.activate(::Module)" funtzioa erabiliz edo REPLan modulua sartuz eta "Alt-m" tekla-konbinazioa sakatuz.
    • "Zenbakitutako gonbita" modua, sarrera eta irteera bakoitzeko zenbakiak inprimatzen dituena eta puntuatutako emaitzak Out-en gordetzen dituena, "REPL.numbered_prompt!()" erabiliz aktiba daiteke.
    • Fitxa osatzeak erabilgarri dauden gako-argumentuak bistaratzen ditu.
  • SuiteSparse: "SuiteSparse" ebazteko kodea mugitu da "SparseArrays.jl". Ebazleak "SuiteSparse.jl"-ek berriro esportatzen ditu orain.
  • SparseArrays
    • "SuiteSparse" solutzaileak "SparseArrays" azpimodulu gisa erabilgarri daude orain.
    • UMFPACK eta CHOLMOD hariaren babes moduak hobetu dira aldagai globalak ezabatuz eta blokeoak erabiliz. Hari anitzeko "ldiv!" UMFPACK objektuak modu seguruan exekutatu daitezke orain.
    • "SparseArrays.allowscalar(::Bool)" funtzio esperimentalak array urrikoen indexazio eskalarra desgaitu edo gaitzeko aukera ematen du. Funtzio hau "SparseMatrixCSC" objektuen ausazko indexazio eskalar detektatzeko diseinatuta dago, hau da, errendimendu-arazoen iturri arrunta.
  • Hutsegiteko modu berria proba-multzoentzat, proba-exekuzioa goiz amaitzen duena hutsegite edo errore bat gertatuz gero. Ezarri "@testset kwarg failfast=true" edo "export JULIA_TEST_FAILFAST=true" bidez. Batzuetan beharrezkoa da CI exekuzioetan errore-mezuak goiz jasotzeko.
  • Datak: kate hutsak jada ez dira gaizki analizatzen "DateTime", "Dates" edo "Times" balio gisa eta, horren ordez, "ArgumentError" bat botatzen dute konstruktoreetan eta analisian, "tryparse"-k ez du ezer itzultzen.
  • Paketea banatua
    • Paketeen konfigurazioa (proiektu aktiboa, "LOAD_PATH", "DEPOT_PATH") tokiko langile-prozesuak gehitzean hedatzen da orain (adibidez, "addprocs(N::Int)" erabiliz edo "--procs=N" komando-lerroko marka erabiliz.
    • "addprocs" tokiko langile prozesuetarako orain "env" izeneko argumentua onartzen du ingurune-aldagaiak langile-prozesuei pasatzeko.
  • Unicode: "grafemak(s, m:n)" azpikatea itzultzen du mth-tik n-garrenera grafemak "s"-n.
  • DelimitedFiles paketea sistemako liburutegietatik kendu da eta orain erabili ahal izateko esplizituki instalatu behar den pakete bereizi gisa banatzen da.
  • Kanpoko mendekotasunak
    • Linux-en, libstdc++ sistemaren liburutegiaren bertsioa automatikoki detektatzen da eta, berriagoa bada, kargatzen da. Incorporated libstdc++ kargatzeko portaera zaharra, sistemaren bertsioa edozein dela ere, "JULIA_PROBE_LIBSTDCXX=0" ingurune-aldagaia ezarriz berreskura daiteke.
    • "RPATH" kendu da julia bitarretik, "RUNPATH" aldagaia definitzen ez duten Linux-en liburutegiak hautsi ditzakeena.
    • Tresnaren hobekuntzak: "MethodError" eta metodoen irteera (adibidez, "methods(my_func)") formateatu eta koloreztatuta dago metodoen irteera-printzipioaren arabera pila-traza batean.

    Iturria: opennet.ru

Gehitu iruzkin berria