Lingwa ta' programmar Julia 1.9 disponibbli

Ġie ppubblikat ir-rilaxx tal-lingwa ta 'programmar Julia 1.9, li tgħaqqad kwalitajiet bħal prestazzjoni għolja, appoġġ għall-ittajpjar dinamiku u għodod integrati għall-ipprogrammar parallel. Is-sintassi ta' Julia hija qrib MATLAB, billi tissellef xi elementi minn Ruby u Lisp. Il-metodu ta 'manipulazzjoni ta' string huwa reminixxenti ta 'Perl. Il-kodiċi tal-proġett huwa mqassam taħt il-liċenzja MIT.

Karatteristiċi ewlenin tal-lingwa:

  • Prestazzjoni għolja: wieħed mill-għanijiet ewlenin tal-proġett huwa li tinkiseb prestazzjoni qrib il-programmi C. Il-kompilatur Julia huwa bbażat fuq ix-xogħol tal-proġett LLVM u jiġġenera kodiċi tal-magni nattiv effiċjenti għal ħafna pjattaformi fil-mira;
  • Jappoġġja diversi paradigmi ta 'programmazzjoni, inklużi elementi ta' programmazzjoni orjentata lejn l-oġġetti u funzjonali. Il-librerija standard tipprovdi, fost affarijiet oħra, funzjonijiet għal I/O mhux sinkroniku, kontroll tal-proċess, illoggjar, profiling, u ġestjoni tal-pakketti;
  • Ittajpjar dinamiku: il-lingwa ma teħtieġx definizzjoni espliċita ta' tipi għal varjabbli, simili għal lingwi ta' programmar ta' scripting. Modalità interattiva appoġġjata;
  • Kapaċità fakultattiva li tispeċifika b'mod espliċitu tipi;
  • Sintassi ideali għall-kompjuters numeriċi, kompjuters xjentifiċi, tagħlim bil-magni, u viżwalizzazzjoni tad-dejta. Appoġġ għal ħafna tipi ta 'dejta numerika u għodod għall-parallelizzazzjoni tal-kalkoli.
  • Il-ħila li ssejjaħ direttament funzjonijiet minn libreriji C mingħajr saffi addizzjonali.

Bidliet ewlenin f'Julia 1.9:

  • Karatteristiċi ġodda tal-lingwa
    • Ħalli assenjazzjonijiet li jsiru f'modulu ieħor billi tuża "setproperty!(::Module, ::Symbol, x)".
    • Inkarigi multipli li mhumiex fil-pożizzjoni finali huma permessi. Pereżempju, is-sekwenza "a, b..., c = 1, 2, 3, 4" se tiġi pproċessata bħala "a = 1; b…, = 2, 3; c = 4". Dan huwa mmaniġġjat permezz Base.split_rest.
    • Litterali ta' karattru wieħed issa jappoġġaw l-istess sintassi bħal letterali ta' string; dawk. Is-sintassi tista' tirrappreżenta sekwenzi UTF-8 invalidi, kif permess mit-tip Char.
    • Appoġġ miżjud għall-ispeċifikazzjoni Unicode 15.
    • Kombinazzjonijiet imdaħħla ta' tuples u tuples ta' karattri msemmija issa jistgħu jintużaw bħala parametri tat-tip.
    • Funzjonijiet ġodda integrati "getglobal(::Module, ::Symbol[, order])" u "setglobal!(::Module, ::Symbol, x[, order])" għall-qari u l-kitba esklussivament għal varjabbli globali. Il-metodu getglobal issa għandu jkun preferut fuq il-metodu getfield għall-aċċess għall-varjabbli globali.
  • Bidliet fil-lingwa
    • Il-makro "@invoke" introdotta fil-verżjoni 1.7 issa hija esportata u disponibbli għall-użu. Barra minn hekk, issa juża l-metodu "Core.Typeof(x)" aktar milli "Kull" fil-każ fejn l-annotazzjoni tat-tip titħalla barra għall-argument "x". Dan huwa meħtieġ biex jiġi żgurat li t-tipi mgħoddija bħala argumenti jiġu pproċessati b'mod korrett.
    • Ippermettiet l-esportazzjoni tal-funzjoni "invokelatest" u l-makro "@invokelatest", introdotta fil-verżjoni 1.7.
  • Titjib fil-kompilatur/runtime
    • Żmien imnaqqas b'mod sinifikanti għall-ewwel eżekuzzjoni (TTFX - Ħin għall-ewwel eżekuzzjoni). Il-kumpilazzjoni minn qabel ta' pakkett issa taħżen kodiċi nattiv f'"pkgimage", li jfisser li l-kodiċi ġġenerat mill-proċess ta' prekompilazzjoni ma jkunx jeħtieġ li jiġi kkompilat mill-ġdid wara li l-pakkett jitgħabba. L-użu tal-modalità pkgimages jista' jiġi diżattivat billi tuża l-għażla "--pkgimages=no".
    • Il-kwistjoni tal-kumplessità kwadratika magħrufa tal-inferenza tat-tip ġiet iffissata, u l-inferenza tuża inqas memorja b'mod ġenerali. Xi każijiet edge b'funzjonijiet twal iġġenerati awtomatikament (bħal ModelingToolkit.jl b'ekwazzjonijiet differenzjali parzjali u mudelli kawżali kbar) jikkompilaw ħafna aktar malajr.
    • Is-sejħiet b'argumenti mingħajr tipi konkreti issa jistgħu jkunu qsim tal-Unjoni ottimizzat għal injezzjoni jew riżoluzzjoni statika, anke jekk ikun hemm diversi kandidati ta' tip differenti għad-dispaċċ. Dan jista' jtejjeb il-prestazzjoni f'ċerti sitwazzjonijiet fejn it-tipi ta' oġġetti ma jiġux solvuti b'mod statiku għal kollox, billi jiġu solvuti b'mod statiku s-siti ta' sejħiet "@nospecialize-d" u tevita r-rikompilazzjoni.
    • L-użi kollha tal-makro @pure fil-modulu Base ġew sostitwiti b'Base.@assume_effects.
    • Sejħiet għall-invoke(f, invokesig, args...) b'tipi inqas speċifiċi milli tipikament użati għal f(args...) m'għadhomx jikkawżaw li l-pakkett jiġi kkompilat mill-ġdid.
  • Bidliet fl-Għażliet tal-Linja tal-Kmand
    • Fuq Linux u Windows, l-għażla "--threads=auto" issa tipprova tiddetermina n-numru disponibbli ta 'proċessuri bbażati fuq l-affinità tas-CPU, maskra tipikament stabbilita f'ambjenti HPC u cloud.
    • Il-parametru "--math-mode=fast" huwa diżattivat, minfloku huwa rakkomandat li tuża l-makro "@fastmath", li għandha semantika definita b'mod ċar.
    • L-għażla "--threads" issa hija fil-format "auto | N[,auto|M]", fejn M jindika n-numru ta' ħjut interattivi li jridu jinħolqu (bħalissa awto tfisser 1).
    • Għażla miżjuda "—heap-size-hint=" ", li jistabbilixxi l-limitu li warajh jibda l-ġbir attiv taż-żibel. Id-daqs jista 'jiġi speċifikat f'bytes, kilobytes (1000 KB), megabytes (300 MB), jew gigabytes (1,5 GB).
  • Bidliet fil-multithreading
    • "Threads.@spawn" issa għandha l-ewwel argument fakultattiv bil-valur ":default" jew ":interactive". Kompitu interattiv jeħtieġ latenza ta 'rispons baxx u huwa ddisinjat biex ikun qasir jew imwettaq ta' spiss. Ħidmiet interattivi se jimxu fuq ħjut interattivi jekk ikunu speċifikati meta tibda Julia.
    • Threads li jaħdmu barra mill-runtime Julia (bħal minn C jew Java) issa jistgħu jsejħu kodiċi Julia billi tuża "jl_adopt_thread". Dan jiġri awtomatikament meta ddaħħal il-kodiċi Julia permezz ta' "cfunction" jew il-punt tad-dħul "@ccallable". Bħala konsegwenza, in-numru ta 'ħjut issa jista' jinbidel waqt l-eżekuzzjoni.
  • Funzjonijiet ġodda tal-librerija
    • Funzjoni ġdida "Iterators.flatmap".
    • Funzjoni ġdida "pkgversion(m::Module)" biex tikseb il-verżjoni tal-pakkett li tagħbija modulu partikolari, simili għal "pkgdir(m::Module)".
    • Funzjoni ġdida "munzell(x)" li tiġġeneralizza "tnaqqas (hcat, x::Vector{<:Vector})" għal kwalunkwe dimensjoni u tippermetti kwalunkwe iteratur ta 'iteraturi. Il-metodu "munzell(f, x)" jiġġeneralizza "mapreduce(f, hcat, x)" u huwa aktar effiċjenti.
    • Makro ġdida għall-analiżi tal-memorja allokata "@allocations", simili għal "@allocation", ħlief li tirritorna n-numru ta 'allokazzjonijiet tal-memorja, aktar milli d-daqs totali tal-memorja allokata.
  • Karatteristiċi ġodda tal-librerija
    • "RoundFromZero" issa jaħdem għal tipi oħra minbarra "BigFloat".
    • "Dict" issa tista 'titnaqqas manwalment bl-użu ta' "sizehint!"
    • "@time" issa tispeċifika separatament il-perċentwal ta' ħin mgħoddi biex terġa' tiġbor metodi invalidi.
  • Bidliet fil-librerija standard
    • Irranġa kwistjoni ta' konkorrenza f'metodi ta' iterazzjoni għal Dict u oġġetti oħra derivati ​​bħal ċwievet(::Dict), valuri (::Dict) u Set. Dawn il-metodi ta 'iterazzjoni issa jistgħu jissejħu fuq Dict jew Set b'mod parallel għal numru illimitat ta' ħjut, sakemm ma jkunx hemm azzjonijiet li jimmodifikaw id-dizzjunarju jew is-sett.
    • In-negazzjoni ta' funzjoni ta' predikat "!f" issa tirritorna funzjoni komposta "(!) ∘ f" minflok funzjoni anonima.
    • Il-funzjonijiet tal-porzjon tad-dimensjoni issa jaħdmu f'diversi dimensjonijiet: "eachslice", "eachrow" u "eachcol" jirritornaw oġġett "Slices" li jippermetti d-dispaċċ biex jipprovdi metodi aktar effiċjenti.
    • Żid il-makro "@kwdef" mal-API pubblika.
    • Irranġa kwistjoni bl-ordni tal-operazzjonijiet f'"fld1".
    • L-għażla issa hija dejjem stabbli fil-ħin (QuickSort ġie mfassal mill-ġdid).
    • "Base.splat" issa huwa esportat. Il-valur tar-ritorn huwa tip "Base.Splat" aktar milli funzjoni anonima, li tippermetti li toħroġ tajjeb.
  • Maniġer tal-Pakketti
    • "Estensjonijiet tal-Pakketti": Appoġġ għat-tagħbija ta' snippet ta' kodiċi minn pakketti oħra mgħobbija f'sessjoni ta' Julia. L-applikazzjoni hija simili għall-pakkett "Requires.jl", iżda l-kumpilazzjoni minn qabel u l-kompatibilità tas-settings huma appoġġjati.
  • Librerija LinearAlgebra
    • Minħabba r-riskju ta 'konfużjoni mad-diviżjoni skond l-elementi, neħħew il-metodi "a/b" u "b\a" bi skalar "a" u vettur "b", li kienu ekwivalenti għal "a * pinv(b)".
    • Is-sejħa ta' BLAS u LAPACK issa tuża "libblastrampoline (LBT)". OpenBLAS huwa pprovdut awtomatikament, iżda l-bini tal-immaġni tas-sistema ma 'libreriji oħra BLAS/LAPACK mhuwiex appoġġjat. Minflok, huwa rakkomandat li tuża l-mekkaniżmu LBT biex tissostitwixxi BLAS/LAPACK b'sett ieħor eżistenti ta' libreriji.
    • "lu" tappoġġja strateġija ġdida ta' rotazzjoni tal-matriċi, "RowNonZero()", li tagħżel l-ewwel element ta' rotazzjoni mhux żero għall-użu ma' tipi aritmetiċi ġodda u għal skopijiet ta' taħriġ.
    • "normalize(x, p=2)" issa tappoġġja kwalunkwe spazju vettorjali normalizzat "x", inklużi scalars.
    • In-numru default ta 'ħjut BLAS issa huwa ugwali għan-numru ta' ħjut CPU fuq arkitetturi ARM u nofs in-numru ta 'ħjut CPU fuq arkitetturi oħra.
  • Printf: Messaġġi ta' żball maħduma mill-ġdid għal kordi fformattjati b'mod żbaljat għal leġibilità aħjar.
  • Profil: Funzjoni ġdida "Profile.take_heap_snapshot(file)", li tikteb fajl fil-format ".heapsnapshot" ibbażat fuq JSON appoġġjat fil-Chrome.
  • Random: randn u randexp issa jaħdmu għal kwalunkwe tip AbstractFloat li jiddefinixxi rand.
  • REPLIKA
    • Meta tagħfas il-kombinazzjoni ta 'tasti "Alt-e" issa tiftaħ l-input kurrenti fl-editur. Il-kontenut (jekk modifikat) se jiġi eżegwit meta toħroġ mill-editur.
    • Il-kuntest tal-modulu attwali attiv fir-REPL jista' jinbidel (Prinċipali b'mod awtomatiku) billi tuża l-funzjoni "REPL.activate(::Module)" jew billi ddaħħal il-modulu fir-REPL u tagħfas il-kombinazzjoni ta 'tasti "Alt-m".
    • Il-mod "pront numerat", li jistampa n-numri għal kull input u output u jaħżen ir-riżultati skurjati f'Out, jista' jiġi attivat billi tuża "REPL.numbered_prompt!()".
    • It-tlestija tat-tab turi argumenti tal-kliem kjavi disponibbli.
  • SuiteSparse: Kodiċi mċaqlaq għas-solver "SuiteSparse" għal "SparseArrays.jl". Is-solvers issa huma esportati mill-ġdid minn "SuiteSparse.jl".
  • SparseArrays
    • Solvers "SuiteSparse" issa huma disponibbli bħala submoduli "SparseArrays".
    • Il-modi ta 'protezzjoni tal-ħajt UMFPACK u CHOLMOD ġew imtejba billi jiġu eliminati l-varjabbli globali u bl-użu ta' serraturi. Multi-kamin "ldiv!" L-oġġetti UMFPACK issa jistgħu jiġu esegwiti b'mod sikur.
    • Il-funzjoni sperimentali "SparseArrays.allowscalar(::Bool)" tippermettilek li tiddiżattiva jew tippermetti l-indiċjar skalar ta' arrays skars. Din il-funzjoni hija mfassla biex tiskopri indiċjar skalari każwali ta 'oġġetti "SparseMatrixCSC", li hija sors komuni ta' problemi ta 'prestazzjoni.
  • Modalità failsafe ġdida għal test suites li ttemm ġirja tat-test kmieni fil-każ ta' falliment jew żball. Issettja jew permezz ta' “@testset kwarg failfast=true” jew “export JULIA_TEST_FAILFAST=true”. Dan kultant huwa meħtieġ f'ċirjiet CI biex jirċievu messaġġi ta 'żball kmieni.
  • Dati: Il-kordi vojta m'għadhomx analizzati b'mod żbaljat bħala valuri validi "DateTime", "Dati" jew "Times" u minflok jarmu "ArgumentError" fil-kostrutturi u l-parsing, filwaqt li "tryparse" ma jirritorna xejn.
  • Pakkett imqassam
    • Il-konfigurazzjoni tal-pakkett (proġett attiv, "LOAD_PATH", "DEPOT_PATH") issa hija propagata meta żżid proċessi tal-ħaddiema lokali (eż. billi tuża "addprocs(N::Int)" jew tuża l-marka tal-linja tal-kmand "--procs=N").
    • "addprocs" għall-proċessi tal-ħaddiema lokali issa jaċċetta argument imsejjaħ "env" biex jgħaddi varjabbli ambjentali lill-proċessi tal-ħaddiema.
  • Unicode: "grafemi(s, m:n)" jirritorna s-substring mill-grafemi mth sa nth f'"s".
  • Il-pakkett DelimitedFiles tneħħa mil-libreriji tas-sistema u issa huwa mqassam bħala pakkett separat li jrid jiġi installat b'mod espliċitu biex jintuża.
  • Dipendenzi esterni
    • Fil-Linux, il-verżjoni tal-librerija tas-sistema libstdc++ tiġi skoperta awtomatikament u, jekk tkun aktar ġdida, titgħabba. L-imġiba tat-tagħbija inkorporata libstdc++ l-antika, irrispettivament mill-verżjoni tas-sistema, tista 'tiġi rrestawrata billi tissettja l-varjabbli ambjentali "JULIA_PROBE_LIBSTDCXX=0".
    • Imneħħi "RPATH" mill-binarju julia, li jista 'jkisser libreriji fuq Linux li jonqsu milli jiddefinixxu l-varjabbli "RUNPATH".
    • Titjib fl-għodda: L-output ta' "MethodError" u metodi (pereżempju minn "methods(my_func)") issa huwa fformattjat u kkulurit skont il-prinċipju tal-output tal-metodi fi stack trace.

    Sors: opennet.ru

Żid kumment