Paglabas ng Julia 1.8 programming language

Ang paglabas ng Julia 1.8 programming language ay magagamit, 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.8:

  • Mga bagong tampok ng wika
    • Ang mga field ng isang nababagong struct ay maaari na ngayong i-annotate bilang mga constant upang maiwasang mabago ang mga ito at payagan ang pag-optimize.
    • Maaaring idagdag ang mga uri ng anotasyon sa mga global na variable.
    • Ang mga walang laman na n-dimensional na array ay maaaring gawin gamit ang maraming semicolon sa loob ng mga square bracket, halimbawa ang "[;;;]" ay lumilikha ng 0x0x0 array.
    • Maaari na ngayong opsyonal na magkaroon ng ibang bloke ang Subukan ang mga bloke, na isasagawa kaagad pagkatapos ng pangunahing katawan kung walang mga error na itinapon.
    • Maaaring ilagay ang @inline at @noinline sa loob ng function body, na nagbibigay-daan sa iyong mag-annotate ng anonymous na function.
    • Ang @inline at @noinline ay maaari na ngayong ilapat sa isang function sa isang call site o block upang pilitin ang mga kaukulang function na tawag na isama (o hindi kasama).
    • Ang βˆ€, βˆƒ at βˆ„ ay pinapayagan bilang mga karakter ng pagkakakilanlan.
    • Nagdagdag ng suporta para sa detalye ng Unicode 14.0.0.
    • Ang Module(:name, false, false) na paraan ay maaaring gamitin upang lumikha ng isang module na hindi naglalaman ng mga pangalan, hindi nag-i-import ng Base o Core, at hindi naglalaman ng reference sa sarili nito.
  • Mga pagbabago sa wika
    • Ang mga bagong likhang Task object (@spawn, @async, atbp.) ay mayroon na ngayong world_age para sa mga pamamaraan mula sa pangunahing Task kapag ginawa, na nagbibigay-daan para sa na-optimize na pagpapatupad. Ang nakaraang opsyon sa pag-activate ay magagamit gamit ang Base.invokelatest na paraan.
    • Ipinagbabawal na ngayon sa mga string at komento ang hindi balanseng bidirectional na mga direktiba sa pag-format ng Unicode upang maiwasan ang mga iniksyon.
    • Ang Base.ifelse ay tinukoy na ngayon bilang isang generic na function sa halip na isang builtin, na nagpapahintulot sa mga package na palawigin ang kahulugan nito.
    • Ang bawat pagtatalaga sa isang pandaigdigang variable ay dumadaan muna ngayon sa isang tawag na i-convert(Any, x) o i-convert(T, x) kung ang global variable ay idineklara na nasa uri ng T. Bago gumamit ng mga global variable, tiyaking ang invariant na convert(Any) , x) === x ay palaging totoo, kung hindi, maaari itong humantong sa hindi inaasahang pag-uugali.
    • Ang mga built-in na function ay katulad na ngayon ng mga generic na function at maaaring ma-programmatically enumerated gamit ang mga method.
  • Mga pagpapabuti ng compiler/runtime
    • Ang oras ng pag-boot ay nabawasan ng humigit-kumulang 25%.
    • Ang LLVM-based na compiler ay nahiwalay mula sa runtime library sa isang bagong library, libjulia-codegen. Ito ay na-load bilang default, kaya dapat walang mga pagbabago sa panahon ng normal na paggamit. Sa mga deployment na hindi nangangailangan ng compiler (halimbawa, mga imahe ng system kung saan ang lahat ng kinakailangang code ay na-precompiled), ang library na ito (at ang dependency nito sa LLVM) ay maaaring tanggalin lamang.
    • Posible na ngayon ang kondisyunal na uri ng hinuha sa pamamagitan ng pagpasa ng argumento sa isang pamamaraan. Halimbawa, para sa Base.ifelse(isa(x, Int), x, 0) ay nagbabalik ::Int kahit na ang uri ng x ay hindi kilala.
    • Ang SROA (Scalar Replacement of Aggregates) ay napabuti: inaalis ang mga tawag sa getfield na may patuloy na mga pandaigdigang field, inaalis ang mga nababagong istruktura na may mga hindi nasimulang field, pinapahusay ang pagganap at pangangasiwa ng mga nested getfield na tawag.
    • Sinusubaybayan ng uri ng hinuha ang iba't ibang epektoβ€”mga side effect at hindi bumababa. Ang patuloy na pagpapalaganap ay isinasaalang-alang, na makabuluhang nagpapabuti sa pagganap ng oras ng pag-compile. Sa ilang mga kaso, halimbawa, ang mga tawag sa mga function na hindi ma-inline ngunit hindi makakaapekto sa resulta ay itatapon sa runtime. Ang mga panuntunan para sa mga epekto ay maaaring manu-manong ma-overwrit gamit ang Base.@assume_effects macro.
    • Ang precompilation (na may tahasang precompilation na mga direktiba o tinukoy na workload) ay nagse-save na ngayon ng mas maraming type-defined code, na nagreresulta sa mas mabilis na unang beses na pagpapatupad. Anumang mga bagong kumbinasyon ng pamamaraan/uri na kailangan ng iyong package, saanman tinukoy ang mga pamamaraang iyon, ay maaari na ngayong i-cache sa precompilation file kung tinawag ang mga ito sa pamamagitan ng isang paraan na kabilang sa iyong package.
  • Mga Pagbabago sa Command Line Options
    • Ang default na gawi para sa pagsubaybay sa mga deklarasyon ng @inbounds ay ang awtomatikong opsyon na ngayon sa "--check-bounds=yes|no|auto".
    • Bagong "--strip-metadata" na opsyon para mag-alis ng mga docstring, impormasyon ng lokasyon ng pinagmulan, at mga lokal na pangalan ng variable kapag gumagawa ng system image.
    • Bagong opsyon na "--strip-ir" upang payagan ang compiler na alisin ang intermediate na representasyon ng source code kapag binubuo ang imahe ng system. Ang resultang imahe ay gagana lamang kung ang "--compile=all" ay ginagamit o kung ang lahat ng kinakailangang code ay paunang na-compile.
    • Kung ang "-" na character ay tinukoy sa halip na ang pangalan ng file, ang executable code ay babasahin mula sa karaniwang input stream.
  • Mga pagbabago sa suporta sa multithreading
    • Ang mga thread.@threads bilang default ay gumagamit ng bagong opsyon sa pag-iiskedyul :dynamic, na naiiba sa nakaraang mode dahil ang mga pag-ulit ay dynamic na maiiskedyul sa mga available na thread ng manggagawa sa halip na italaga sa bawat thread. Nagbibigay-daan ang mode na ito para sa mas mahusay na pamamahagi ng mga nested loop na may @spawn at @threads.
  • Mga bagong function ng library
    • eachsplit(str) para magsagawa ng split(str) nang maraming beses.
    • allequal(itr) upang subukan kung ang lahat ng mga elemento sa isang iterator ay pantay.
    • Ang hardlink(src, dst) ay maaaring gamitin upang lumikha ng mga hard link.
    • setcpuaffinity(cmd, cpus) upang itakda ang affinity ng core ng processor sa mga inilunsad na proseso.
    • diskstat(path=pwd()) upang makakuha ng mga istatistika ng disk.
    • Bagong @showtime macro upang ipakita ang parehong linyang sinusuri at ang ulat ng @time.
    • Ang LazyString at lazy"str" ​​​​macro ay idinagdag upang suportahan ang tamad na pagbuo ng mga mensahe ng error sa mga landas ng error.
    • Inayos ang isang concurrency na isyu sa Dict at iba pang mga hinango na bagay tulad ng mga key(::Dict), values(::Dict) at Set. Ang mga pamamaraan ng pag-ulit ay maaari na ngayong tawagin sa isang diksyunaryo o set, hangga't walang mga tawag na nagbabago sa diksyunaryo o set.
    • Ang @time at @timev ay mayroon na ngayong opsyonal na paglalarawan, na nagbibigay-daan sa iyong i-annotate ang pinagmulan ng mga ulat ng oras, halimbawa. @time "Pagsusuri sa foo" foo().
    • Ang hanay ay tumatagal ng alinman sa paghinto o haba bilang ang tanging argumento ng keyword nito.
    • Ang precision at setprecision ay tumatanggap na ngayon ng base bilang isang keyword
    • Ang mga TCP socket object ay nagbibigay na ngayon ng closewrite na paraan at sinusuportahan ang paggamit ng half-open mode.
    • tinatanggap na ngayon ng extrema ang isang init na argumento.
    • Ang Iterators.countfrom ay tumatanggap na ngayon ng anumang uri na tumutukoy sa isang + na pamamaraan.
    • Inilalaan na ngayon ng @time ang % ng oras na ginugol sa pag-recompile ng mga pamamaraan na may mga binagong uri.
  • Mga Karaniwang Pagbabago sa Aklatan
    • Mga key na may halaga Wala na ngayong inalis sa kapaligiran sa addenv.
    • Sinusuportahan ng Iterators.reverse (at samakatuwid ang huli) bawat linya.
    • Ang function ng haba para sa mga hanay ng ilang partikular na uri ay hindi na tumitingin para sa integer overflow. Ang isang bagong function, checked_length, ay magagamit; ito ay naglalaman ng bit transfer control logic. Kung kinakailangan, gamitin ang SaferIntegers.jl upang bumuo ng uri ng hanay.
    • Ang Iterators.Reverse iterator ay nagpapatupad ng bawat pagbabalik ng index kung maaari.
  • Tagapamahala ng Package
    • Bagong βŒƒ at βŒ… indicator sa tabi ng mga package sa status na β€œpkg>” kung saan available ang mga bagong bersyon. Isinasaad ng βŒ… na hindi ma-install ang mga bagong bersyon.
    • Bagong outdated::Bool argument sa Pkg.status (--outdated o -o sa REPL mode) para magpakita ng impormasyon tungkol sa mga package mula sa mga nakaraang bersyon.
    • Bagong compat::Bool argument sa Pkg.status (--compat o -c sa REPL mode) upang ipakita ang anumang [compat] na mga entry sa Project.toml.
    • Bagong "pkg>compat" (at Pkg.compat) mode para sa pagtatakda ng mga entry sa compatibility ng proyekto. Nagbibigay ng interactive na editor sa pamamagitan ng "pkg>compat" o direktang kontrol ng record sa pamamagitan ng "pkg>Foo 0.4,0.5", na maaaring mag-load ng mga kasalukuyang record sa pamamagitan ng pagkumpleto ng tab. Ibig sabihin, awtomatikong ina-update ang "pkg> compat Fo" sa "pkg> Foo 0.4,0.5" upang ma-edit ang isang umiiral nang entry.
    • Sinusubukan lamang ng Pkg na mag-download ng mga package mula sa isang package server kung sinusubaybayan ng server ang registry na naglalaman ng package.
    • Maglalabas na ngayon ng babala ang Pkg.instantiate kapag hindi naka-sync ang Project.toml sa Manifest.toml. Ginagawa nito ito batay sa isang hash ng mga deps at compat record ng proyekto (binabalewala ang ibang mga field) sa manifest kapag niresolba ito, upang ang anumang pagbabago sa Project.toml deps o compat record ay matukoy nang hindi muling nire-resolve.
    • Kung hindi mahanap ng "pkg>add" ang isang package na may ibinigay na pangalan, magmumungkahi na ito ng mga package na may mga katulad na pangalan na maaaring idagdag.
    • Hindi na kasama sa bersyon ng julia na naka-store sa manifest ang build number, ibig sabihin, isusulat na ngayon ang master bilang 1.9.0-DEV.
    • Ang test abort na "pkg>" ay matutukoy na ngayon nang mas pare-pareho, at ibabalik nang tama sa REPL.
  • InteractiveUtils
    • Bagong @time_imports macro upang mag-ulat ng oras na ginugol sa pag-import ng mga pakete at ang mga dependency ng mga ito, na nagha-highlight ng oras ng pag-compile at muling pag-compile bilang isang porsyento ng mga pag-import.
  • Linear algebra
    • Sinusuportahan na ngayon ng submodule ng BLAS ang level-2 na mga function ng BLAS spr!.
    • Ang LinearAlgebra.jl standard library ay ganap nang independiyente sa SparseArrays.jl, parehong mula sa source code at unit testing perspective. Bilang kinahinatnan, ang mga kalat-kalat na array ay hindi na ibinabalik (implicitly) sa pamamagitan ng mga pamamaraan mula sa LinearAlgebra na inilapat sa Base o LinearAlgebra na mga bagay. Sa partikular, humahantong ito sa mga sumusunod na paglabag sa mga pagbabago:
      • Ang mga concatenation na gumagamit ng mga espesyal na "kalat-kalat" na matrice (hal. diagonal) ay nagbabalik na ngayon ng mga siksik na matrice; Bilang kinahinatnan, ang mga field ng D1 at D2 ng mga bagay na SVD na nilikha ng mga tawag sa getproperty ay mga siksik na matrice na ngayon.
      • Ang katulad na(::SpecialSparseMatrix, ::Type, ::Dims) na pamamaraan ay nagbabalik ng isang siksik na null matrix. Bilang kinahinatnan, ang mga produkto ng dalawa-, tatlo-, at simetriko na tridiagonal na matrice sa isa't isa ay humahantong sa pagbuo ng isang siksik na matrix. Bukod pa rito, nabigo na ngayon ang pagbuo ng mga katulad na matrice na may tatlong argumento mula sa mga espesyal na "sparse" na matrice mula sa (non-static) na mga matrice dahil sa "zero(::Type{Matrix{T}})".
  • Printf
    • Ginagamit na ngayon ng %s at %c ang textwidth argument upang i-format ang lapad.
  • Profile
    • Ang CPU load profiling ay nagtatala na ngayon ng metadata kabilang ang mga thread at mga gawain. Ang Profile.print() ay may bagong groupby argument na nagbibigay-daan sa iyong pagpangkatin ang mga thread, gawain o subthreads/tasks, tasks/threads, at thread at tasks arguments para magbigay ng pag-filter. Bukod pa rito, iniuulat na ngayon ang porsyento ng paggamit bilang pangkalahatan o bawat thread, depende sa kung ang thread ay idle o hindi sa bawat sample. Kasama sa Profile.fetch() ang bagong metadata bilang default. Para sa backward compatibility sa mga external na consumer ng data ng profiling, maaari itong ibukod sa pamamagitan ng pagpasa ng include_meta=false.
    • Ang bagong module na Profile.Allocs ay nagbibigay-daan sa iyo na mag-profile ng mga alokasyon ng memorya. Ang isang stack trace ng uri at laki ng bawat memory allocation ay naitala, at ang sample_rate argument ay nagbibigay-daan sa isang configurable na bilang ng mga alokasyon na laktawan, na binabawasan ang performance overhead.
    • Ang nakapirming tagal ng CPU profiling ay maaari na ngayong patakbuhin ng user habang tumatakbo ang mga gawain nang hindi muna nilo-load ang profile, at ang ulat ay ipapakita habang tumatakbo. Sa MacOS at FreeBSD, pindutin ang ctrl-t o tawagan ang SIGINFO. Para sa iba pang mga platform, i-activate ang SIGUSR1, i.e. % pumatay -USR1 $julia_pid. Hindi ito available sa Windows.
  • REPL
    • Sinusuportahan na ngayon ng RadioMenu ang mga karagdagang keyboard shortcut para sa direktang pagpili ng mga opsyon.
    • Ang pagkakasunud-sunod na "?(x, y" na sinusundan ng pagpindot sa TAB ay nagpapakita ng lahat ng mga pamamaraan na matatawag na may mga argumentong x, y, .... (Pinipigilan ka ng isang nangungunang puwang na pumasok sa help mode.) y " nililimitahan ang paghahanap sa "MyModule". Ang pagpindot sa TAB ay nangangailangan ng hindi bababa sa isang argumento sa isang uri na mas tiyak kaysa Any. O gumamit ng SHIFT-TAB sa halip na TAB upang payagan ang anumang mga katugmang pamamaraan.
    • Binibigyang-daan ka ng bagong global na variable na err na makuha ang pinakabagong exception, katulad ng gawi ng ans na may huling tugon. Ang pagpasok ng err ay muling nagpi-print ng exception information.
  • SparseArrays
    • Inilipat ang SparseArrays code mula sa Julia repository sa panlabas na SparseArrays.jl repository.
    • Ang bagong concatenation ay gumagana ng sparse_hcat, sparse_vcat, at sparse_hvcat ay nagbabalik ng SparseMatrixCSC type anuman ang mga uri ng input arguments. Ito ay naging kinakailangan upang pag-isahin ang mekanismo para sa gluing matrice pagkatapos paghiwalayin ang LinearAlgebra.jl at SparseArrays.jl code.
  • Pagtotroso
    • Ang mga karaniwang antas ng pag-log BelowMinLevel, Debug, Info, Warn, Error at AboveMaxLevel ay na-export na ngayon mula sa karaniwang Logging library.
  • Unicode
    • Idinagdag ang function na isequal_normalized upang suriin ang pagkakapareho ng Unicode nang hindi tahasang gumagawa ng mga normalized na string.
    • Ang Unicode.normalize function ay tinatanggap na ngayon ang charttransform na keyword, na maaaring magamit upang magbigay ng mga custom na character mapping, at ang Unicode.julia_chartransform function ay ibinibigay din upang kopyahin ang pagmamapa na ginamit kapag ang Julia parser ay nag-normalize ng mga identifier.
  • Pagsubok
    • Magagamit na ngayon ang '@test_throws "some message" triggers_error()' upang subukan kung ang ipinapakitang error text ay naglalaman ng error na "some message", anuman ang partikular na uri ng exception. Sinusuportahan din ang mga regular na expression, listahan ng string, at pagtutugma ng mga function.
    • Magagamit na ngayon ang @testset foo() upang lumikha ng set ng pagsubok mula sa isang ibinigay na function. Ang pangalan ng test case ay ang pangalan ng function na tinatawag. Ang tinatawag na function ay maaaring maglaman ng @test at iba pang mga kahulugan ng @testset, kabilang ang para sa mga tawag sa iba pang mga function, habang nire-record ang lahat ng intermediate na resulta ng pagsubok.
    • Ang TestLogger at LogRecord ay na-export na ngayon mula sa karaniwang Test library.
  • Ibinahagi
    • Sinusuportahan na ngayon ng SSHManager ang mga thread ng manggagawa na may csh/tcsh wrapper sa pamamagitan ng addprocs() na paraan at ang shell=:csh na parameter.
  • Iba pang mga pagbabago
    • Maaaring gamitin ang GC.enable_logging(true) para i-log ang bawat operasyon ng pangongolekta ng basura kasama ang oras at dami ng memorya na nakolekta.

Pinagmulan: opennet.ru

Magdagdag ng komento