Available ang Julia 1.9 programming language

Ang paglabas ng Julia 1.9 programming language ay nai-publish, na pinagsasama ang mga katangian tulad ng mataas na pagganap, suporta para sa dynamic na pag-type at mga built-in na tool para sa parallel programming. Ang syntax ni Julia ay malapit sa MATLAB, nanghihiram ng ilang elemento mula kay Ruby at Lisp. Ang paraan ng pagmamanipula ng string ay nakapagpapaalaala kay Perl. Ang code ng proyekto ay ipinamahagi sa ilalim ng lisensya ng MIT.

Mga pangunahing katangian ng wika:

  • Mataas na pagganap: isa sa mga pangunahing layunin ng proyekto ay upang makamit ang pagganap na malapit sa mga programang C. Ang Julia compiler ay batay sa gawain ng LLVM project at bumubuo ng mahusay na native machine code para sa maraming target na platform;
  • Sinusuportahan ang iba't ibang paradigm sa programming, kabilang ang mga elemento ng object-oriented at functional programming. Ang karaniwang aklatan ay nagbibigay, bukod sa iba pang mga bagay, ng mga function para sa asynchronous na I/O, kontrol sa proseso, pag-log, pag-profile, at pamamahala ng package;
  • Dynamic na pag-type: ang wika ay hindi nangangailangan ng tahasang kahulugan ng mga uri para sa mga variable, katulad ng scripting programming language. Sinusuportahan ang interactive na mode;
  • Opsyonal na kakayahang tahasang tukuyin ang mga uri;
  • Isang syntax na perpekto para sa numerical computing, scientific computing, machine learning, at data visualization. Suporta para sa maraming uri ng data ng numero at mga tool para sa parallelization ng mga kalkulasyon.
  • Ang kakayahang direktang tumawag sa mga function mula sa C library nang walang karagdagang mga layer.

Mga pangunahing pagbabago sa Julia 1.9:

  • Mga bagong tampok ng wika
    • Payagan ang mga takdang-aralin na gawin sa isa pang module gamit ang "setproperty!(::Module, ::Symbol, x)".
    • Pinapayagan ang maramihang mga takdang-aralin na wala sa panghuling posisyon. Halimbawa, ang string na β€œa, b…, c = 1, 2, 3, 4” ay ipoproseso bilang β€œa = 1; b…, = 2, 3; c = 4". Ito ay pinangangasiwaan sa pamamagitan ng Base.split_rest.
    • Sinusuportahan na ngayon ng mga literal na solong character ang parehong syntax gaya ng mga literal ng string; mga. Ang syntax ay maaaring kumatawan sa mga di-wastong UTF-8 na pagkakasunud-sunod, gaya ng pinapayagan ng uri ng Char.
    • Nagdagdag ng suporta para sa detalye ng Unicode 15.
    • Ang mga nested na kumbinasyon ng mga tuple at pinangalanang character tuple ay maaari na ngayong gamitin bilang mga parameter ng uri.
    • Mga bagong built-in na function na "getglobal(::Module, ::Symbol[, order])" at "setglobal!(::Module, ::Symbol, x[, order])" para sa eksklusibong pagbabasa at pagsusulat sa mga global variable. Mas gusto na ngayon ang getglobal method kaysa getfield method para sa pag-access ng mga global variable.
  • Mga pagbabago sa wika
    • Ang "@invoke" macro na ipinakilala sa bersyon 1.7 ay na-export na ngayon at magagamit na. Bukod pa rito, ginagamit na nito ngayon ang "Core.Typeof(x)" na paraan sa halip na "Any" sa kaso kung saan ang uri ng anotasyon ay tinanggal para sa "x" na argumento. Ito ay kinakailangan upang matiyak na ang mga uri ay naipasa bilang mga argumento ay naproseso nang tama.
    • Pinagana ang pag-export ng function na "invokelatest" at ang macro na "@invokelatest", na ipinakilala sa bersyon 1.7.
  • Mga pagpapabuti ng compiler/runtime
    • Makabuluhang nabawasan ang oras sa unang pagpapatupad (TTFX - Oras sa unang pagpapatupad). Ang paunang pag-compile ng isang package ay nag-iimbak na ngayon ng katutubong code sa "pkgimage", ibig sabihin, ang code na nabuo ng proseso ng precompilation ay hindi na kailangang muling i-compile pagkatapos ma-load ang package. Ang paggamit ng pkgimages mode ay maaaring hindi paganahin gamit ang "--pkgimages=no" na opsyon.
    • Ang kilalang quadratic complexity na isyu ng type inference ay naayos na, at inference ay gumagamit ng mas kaunting memory sa pangkalahatan. Ang ilang edge case na may awtomatikong nabuong mahabang function (gaya ng ModelingToolkit.jl na may partial differential equation at malalaking causal na modelo) ay nag-compile nang mas mabilis.
    • Ang mga tawag na may mga argumento na walang mga konkretong uri ay maaari na ngayong maging Union-spliting optimized para sa injection o static na resolution, kahit na mayroong maraming iba't ibang uri ng mga kandidato para sa dispatch. Mapapabuti nito ang pagganap sa ilang partikular na sitwasyon kung saan ang mga uri ng bagay ay hindi ganap na naresolba sa statically, sa pamamagitan ng statically resolving "@nospecialize-d" na mga site ng tawag at pag-iwas sa recompilation.
    • Ang lahat ng paggamit ng @pure macro sa Base module ay pinalitan ng Base.@assume_effects.
    • Ang mga tawag para mag-invoke(f, invokesig, args...) na may hindi gaanong partikular na mga uri kaysa sa karaniwang ginagamit para sa f(args...) ay hindi na nagiging sanhi ng pag-recompile ng package.
  • Mga Pagbabago sa Command Line Options
    • Sa Linux at Windows, sinusubukan na ngayon ng opsyong "--threads=auto" na tukuyin ang available na bilang ng mga processor batay sa affinity ng CPU, isang mask na karaniwang itinatakda sa HPC at cloud environment.
    • Ang parameter na "--math-mode=fast" ay hindi pinagana, sa halip na ito ay inirerekomendang gamitin ang "@fastmath" na macro, na malinaw na tinukoy ang mga semantika.
    • Ang opsyon na "--threads" ay nasa format na ngayon na "auto | N[,auto|M]", kung saan ipinapahiwatig ng M ang bilang ng mga interactive na thread na gagawin (kasalukuyang ibig sabihin ng auto ay 1).
    • Idinagdag ang opsyon na "β€”heap-size-hint=" ", na nagtatakda ng threshold pagkatapos magsisimula ang aktibong koleksyon ng basura. Maaaring tukuyin ang laki sa bytes, kilobytes (1000 KB), megabytes (300 MB), o gigabytes (1,5 GB).
  • Mga pagbabago sa multithreading
    • Ang "Threads.@spawn" ay mayroon na ngayong opsyonal na unang argumento na may value na ":default" o ":interactive". Ang isang interactive na gawain ay nangangailangan ng mababang latency ng pagtugon at idinisenyo upang maging maikli o madalas na gumanap. Tatakbo ang mga interactive na gawain sa mga interactive na thread kung tinukoy ang mga ito kapag sinimulan si Julia.
    • Ang mga thread na tumatakbo sa labas ng Julia runtime (tulad ng mula sa C o Java) ay maaari na ngayong tumawag sa Julia code gamit ang "jl_adopt_thread". Awtomatiko itong nangyayari kapag inilalagay ang Julia code sa pamamagitan ng "cfunction" o ang entry point na "@ccallable". Bilang resulta, ang bilang ng mga thread ay maaari na ngayong magbago sa panahon ng pagpapatupad.
  • Mga bagong function ng library
    • Bagong function na "Iterators.flatmap".
    • Bagong function na "pkgversion(m::Module)" upang makuha ang bersyon ng package na nag-load ng isang ibinigay na module, katulad ng "pkgdir(m::Module)".
    • Bagong function na "stack(x)" na nagsa-generalize ng "reduce(hcat, x::Vector{<:Vector})" sa anumang dimensyon at nagbibigay-daan sa anumang iterator ng mga iterator. Ang pamamaraang "stack(f, x)" ay nagsa-generalize ng "mapreduce(f, hcat, x)" at mas mahusay.
    • Bagong macro para sa pagsusuri ng inilalaang memorya na "@allocations", katulad ng "@allocated", maliban na ibinabalik nito ang bilang ng mga alokasyon ng memorya, sa halip na ang kabuuang sukat ng inilalaang memorya.
  • Mga bagong feature ng library
    • Gumagana na ngayon ang "RoundFromZero" para sa mga uri maliban sa "BigFloat".
    • Ang "Dict" ay maaari na ngayong manu-manong bawasan gamit ang "sizehint!"
    • Hiwalay na ngayon na tinutukoy ng "@time" ang porsyento ng oras na ginugol sa muling pag-compile ng mga di-wastong pamamaraan.
  • Mga pagbabago sa karaniwang library
    • Nag-ayos ng isyu ng concurrency sa mga pamamaraan ng pag-ulit para sa Dict at iba pang mga hinango na bagay gaya ng mga key(::Dict), values(::Dict) at Set. Ang mga pamamaraan ng pag-ulit na ito ay maaari na ngayong tawagan sa isang Dict o Set nang magkatulad para sa isang walang limitasyong bilang ng mga thread, hangga't walang mga aksyon na nagbabago sa diksyunaryo o set.
    • Ang pag-negasyon ng isang predicate function na "!f" ay nagbabalik na ngayon ng isang composite function na "(!) ∘ f" sa halip na isang anonymous na function.
    • Gumagana na ngayon ang mga function ng slice ng dimensyon sa maraming dimensyon: "eachslice", "eachrow" at "eachcol" ay nagbabalik ng object na "Slices" na nagbibigay-daan sa pagpapadala upang magbigay ng mas mahusay na mga pamamaraan.
    • Idinagdag ang macro na "@kwdef" sa pampublikong API.
    • Inayos ang isang isyu sa pagkakasunud-sunod ng mga operasyon sa "fld1".
    • Ang pag-uuri ay palaging time-stable na ngayon (Ang QuickSort ay muling idinisenyo).
    • Ang "Base.splat" ay na-export na ngayon. Ang return value ay isang "Base.Splat" na uri sa halip na isang anonymous na function, na nagbibigay-daan ito upang maging maganda ang output.
  • Tagapamahala ng Package
    • "Mga Extension ng Package": Suporta para sa pag-load ng isang snippet ng code mula sa iba pang mga package na na-load sa isang session ni Julia. Ang application ay katulad ng package na "Requires.jl", ngunit sinusuportahan ang pre-compilation at compatibility ng mga setting.
  • LinearAlgebra Library
    • Dahil sa panganib ng pagkalito sa element-wise division, inalis ang "a/b" at "b\a" na pamamaraan na may scalar "a" at vector "b", na katumbas ng "a * pinv(b)".
    • Ang pagtawag sa BLAS at LAPACK ay gumagamit na ngayon ng "libblastrampoline (LBT)". Ang OpenBLAS ay ibinibigay bilang default, ngunit ang pagbuo ng imahe ng system kasama ng iba pang mga library ng BLAS/LAPACK ay hindi suportado. Sa halip, inirerekomendang gamitin ang mekanismo ng LBT upang palitan ang BLAS/LAPACK ng isa pang umiiral na hanay ng mga aklatan.
    • Sinusuportahan ng "lu" ang isang bagong diskarte sa pag-ikot ng matrix, "RowNonZero()", na pumipili sa unang elemento ng pag-ikot na hindi zero para gamitin sa mga bagong uri ng arithmetic at para sa mga layunin ng pagsasanay.
    • Sinusuportahan na ngayon ng "normalize(x, p=2)" ang anumang normalized na vector space "x", kabilang ang mga scalar.
    • Ang default na bilang ng mga thread ng BLAS ay katumbas na ngayon ng bilang ng mga thread ng CPU sa mga arkitektura ng ARM at kalahati ng bilang ng mga thread ng CPU sa iba pang mga arkitektura.
  • Printf: Reworked error messages para sa mga string na hindi wastong na-format para mas madaling mabasa.
  • Profile: Bagong function na "Profile.take_heap_snapshot(file)", na nagsusulat ng file sa JSON-based na ".heapsnapshot" na format na sinusuportahan sa Chrome.
  • Random: gumagana na ngayon ang randn at randexp para sa anumang uri ng AbstractFloat na tumutukoy sa rand.
  • REPL
    • Ang pagpindot sa kumbinasyon ng "Alt-e" na key ay magbubukas na ngayon ng kasalukuyang input sa editor. Ang nilalaman (kung binago) ay isasagawa kapag lumabas ka sa editor.
    • Ang kasalukuyang konteksto ng module na aktibo sa REPL ay maaaring baguhin (Pangunahin bilang default) gamit ang function na "REPL.activate(::Module)" o sa pamamagitan ng pagpasok ng module sa REPL at pagpindot sa key combination na "Alt-m".
    • Ang mode na "numbered prompt", na nagpi-print ng mga numero para sa bawat input at output at nag-iimbak ng mga score na resulta sa Out, ay maaaring i-activate gamit ang "REPL.numbered_prompt!()".
    • Ang pagkumpleto ng tab ay nagpapakita ng mga magagamit na argumento ng keyword.
  • SuiteSparse: Inilipat ang code para sa "SuiteSparse" solver sa "SparseArrays.jl". Ang mga solver ay muling ini-export ng "SuiteSparse.jl".
  • SparseArrays
    • Available na ngayon ang mga solver ng "SuiteSparse" bilang mga submodules na "SparseArrays".
    • Ang UMFPACK at CHOLMOD thread protection mode ay napabuti sa pamamagitan ng pag-aalis ng mga global variable at paggamit ng mga lock. Multi-threaded "ldiv!" Ang mga bagay na UMFPACK ay maaari na ngayong maisagawa nang ligtas.
    • Ang pang-eksperimentong function na "SparseArrays.allowscalar(::Bool)" ay nagbibigay-daan sa iyo na huwag paganahin o paganahin ang scalar indexing ng mga kalat-kalat na array. Ang function na ito ay idinisenyo upang makita ang random na scalar indexing ng "SparseMatrixCSC" na mga bagay, na isang karaniwang pinagmumulan ng mga problema sa pagganap.
  • Bagong failsafe mode para sa mga suite ng pagsubok na nagwawakas ng isang pagsubok na tumakbo nang maaga sa kaganapan ng isang pagkabigo o error. Itakda ang alinman sa pamamagitan ng β€œ@testset kwarg failfast=true” o β€œexport JULIA_TEST_FAILFAST=true”. Minsan ito ay kinakailangan sa CI runs upang makatanggap ng mga mensahe ng error nang maaga.
  • Mga Petsa: Ang mga walang laman na string ay hindi na na-parse nang mali bilang mga wastong value na "DateTime", "Dates" o "Times" at sa halip ay magtapon ng "ArgumentError" sa mga constructor at pag-parse, habang ang "tryparse" ay walang ibinabalik.
  • Ibinahagi ang Package
    • Ang configuration ng package (aktibong proyekto, "LOAD_PATH", "DEPOT_PATH") ay pinapalaganap na ngayon kapag nagdaragdag ng mga proseso ng lokal na manggagawa (hal. gamit ang "addprocs(N::Int)" o gamit ang command line flag na "--procs=N").
    • Ang "addprocs" para sa mga proseso ng lokal na manggagawa ay tumatanggap na ngayon ng argumento na pinangalanang "env" upang ipasa ang mga variable ng kapaligiran sa mga proseso ng manggagawa.
  • Unicode: "graphemes(s, m:n)" ay nagbabalik ng substring mula sa mth hanggang sa nth graphemes sa "s".
  • Ang DelimitedFiles package ay inalis mula sa mga library ng system at ngayon ay ipinamamahagi bilang isang hiwalay na pakete na dapat na tahasang naka-install upang magamit.
  • Mga panlabas na dependency
    • Sa Linux, ang bersyon ng libstdc++ system library ay awtomatikong nade-detect at, kung ito ay mas bago, ito ay nilo-load. Ang lumang libstdc++ built-in na gawi sa paglo-load, anuman ang bersyon ng system, ay maaaring maibalik sa pamamagitan ng pagtatakda ng environment variable na "JULIA_PROBE_LIBSTDCXX=0".
    • Inalis ang "RPATH" mula sa julia binary, na maaaring masira ang mga library sa Linux na hindi tumukoy sa variable na "RUNPATH".
    • Mga pagpapahusay ng tool: Ang output ng "MethodError" at mga pamamaraan (halimbawa mula sa "methods(my_func)") ay naka-format at may kulay na ngayon alinsunod sa prinsipyo ng output ng mga pamamaraan sa isang stack trace.

    Pinagmulan: opennet.ru

Magdagdag ng komento