Paglabas ng Julia 1.7 programming language

Ang paglabas ng Julia 1.7 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 bagong feature sa Julia 1.7:

  • Bagong syntax para sa paglikha ng mga multidimensional na array. Ginagamit ang mga semicolon upang paghiwalayin ang mga sukat ng array, na may bilang ng mga semicolon na nagpapahiwatig ng laki. Halimbawa, ang isang tuldok-kuwit sa "[A; B]" ay tumutukoy sa pagsasama-sama sa unang dimensyon (patayo sa isang isang-dimensional na hanay), dalawang tuldok-kuwit na "[A;; B]" ay tumutukoy dito sa pangalawang dimensyon (pahalang bilang isang bagong hilera sa matrix), tatlong semicolon ";;;" sa pangatlo, at iba pa.
  • Ang isang backslash (\) sa dulo ng isang linya sa loob ng literal na string ay nag-aalis na ngayon ng bagong linya na character at indentation. Magagamit ito upang hatiin ang mahahabang linya ng code sa maraming linya nang hindi nagdaragdag ng mga karagdagang character.
  • Ang isang backslash bago ang isang bagong linya sa console command literals `cmd \…` ngayon ay palaging nag-aalis ng bagong linya at binibigyang-kahulugan ang pagkakasunud-sunod bilang tuluy-tuloy na string literal, samantalang ang resulta ay hindi natukoy dati.
  • Ang expression na "(; a, b) = x" upang lumikha ng magkahiwalay na variable a at b mula sa x. Ang syntax na ito ay katumbas ng "a = getproperty(x, :a); b = getproperty(x, :b)".
  • Pinapayagan na ngayon ang implicit multiplication para sa mga radikal na simbolo (hal. x√y at x∛y).
  • Ang mga lohikal na operator na "&&" at "||" maaari na ngayong gamitin sa mga elemento ng array sa anyong ".&&" at "||".
  • Ang mga operator na ⫪(U + 2AEA, \Top, \downvDash) at ⫫(U + 2AEB, \Bot, \upvDash, \indep) ay maaari na ngayong gamitin bilang mga binary operator.
  • Idinagdag ang "--check-bounds=yes|no|auto" na opsyon para kontrolin ang @inbounds macros gamit ang default na value na auto.

Mga pagbabago sa wika

  • Ang default na pseudo-random number generator ay binago mula Mersenne Twister patungong Xoshiro256++, kaya lahat ng random na numero ay magkakaiba (kahit na may parehong binhi) maliban kung ang isang tahasang RNG object ay ginamit. Ang bagong generator ay nagpabuti ng pagganap, higit na mataas na istatistikal na katangian, at ginagamit para sa maaaring kopyahin na randomness sa multithreaded na mga programa (ito ay nagpapanatili ng estado para sa bawat tumatakbong gawain at tinidor ang isang hiwalay na estado kapag lumilikha ng isang bagong gawain).
  • Hindi na binabago ng pag-destructure ang mga halaga sa kaliwang pagtatalaga kapag ina-access ang mga halaga mula sa kanang bahagi ng isang expression. Halimbawa, para sa isang array x, ang expression na "x[2], x[1] = x" ay papalitan na ngayon ang una at pangalawang elemento ng x, samantalang dati ang x[1] ay gagamitin upang punan ang parehong mga entry dahil ang x[2] ay binago sa panahon ng pag-ulit ng assignment sa x.
  • hindi na bumubuo ng LoadError ang macroexpand, @macroexpand, at @macroexpand1. Ang @test_throws ay binago din para mapanatiling gumagana ang mga apektadong pagsubok.
  • Ang gitnang tuldok na "·" (\cdotpU+00b7) at ang Greek interpunct · (U+0387) ay itinuturing na ngayon bilang katumbas ng dot operator na "⋅" (\cdotU+22c5).
  • Ang minus sign na "−" (\minusU+2212) ay itinuturing na ngayon bilang katumbas ng hyphen-minus sign na "-" (U+002d).
  • Iterators.peel(itr) ngayon ay nagbabalik ng "wala" kapag ang itr ay walang laman, sa halip na maghagis ng BoundsError exception.
  • Dati nang hindi pinansin ang maramihang magkakasunod na semicolon sa isang array expression (hal., "[1 ;; 2] == [1 ; 2]"). Ginagamit na ngayon ang syntax na ito para paghiwalayin ang mga dimensyon.
  • Ang hindi balanseng pag-format ng Unicode na mga direktiba na "#= ... =#" ay hindi pinapayagan sa mga string at komento upang mabawasan ang posibilidad ng pag-iiniksyon ng parse/eval code.

Mga Pagbabago sa Command Line Options

  • Ang julia --project parameter at ang JULIA_PROJECT environment variable ay sumusuporta na ngayon sa shared environment selection. Halimbawa, ang julia --project=@myenv at export JULIA_PROJECT="@myenv" ay katumbas na ngayon.

Mga pagbabago sa multithreading

  • Ang mga intrinsics para sa mga pagpapatakbo ng atomic pointer ay tinukoy na ngayon para sa mga partikular na laki ng byte.
  • Nagdagdag ng suporta para sa pagdedeklara at paggamit ng mga indibidwal na field ng isang nababagong struct bilang atomic; tingnan ang bagong @atomic macro.
  • Kung ang JULIA_NUM_THREADS environment variable ay nakatakda sa "auto", ang bilang ng mga thread ay magiging katumbas ng bilang ng mga processor thread.
  • Ang bawat Task object ay may lokal na random number generator state, na bilang default ay nagsisiguro ng reproducible (schedule-independent) na pagpapatupad ng parallel simulation code. Ang generator ay tumatakbo din nang mas mabilis nang magkatulad bilang default kaysa sa mga nakaraang bersyon.
  • Ang mga gawain ay maaari na ngayong ilipat sa pagitan ng mga thread. Dati, palaging tumatakbo ang isang gawain sa thread na unang naglunsad nito.

Mga bagong function ng library

  • Nagdagdag ng mga pamamaraan findmax(f, domain), argmax(f, domain) at katumbas na "min" na mga bersyon na may dalawang argumento.
  • Ang isunordered(x) ay nagbabalik ng true kung ang x ay isang value na hindi dapat ayos, gaya ng NaN o nawawala.
  • Bagong function keepat!(vector, inds), na katumbas ng vector[inds] ng isang listahan ng mga integer.
  • Ang two-argument lock(f, lck) na paraan ay tumatanggap na ngayon ng Channel bilang pangalawang argumento nito.
  • Ang bagong functor Returns(value) ay nagbabalik ng halaga para sa anumang mga argumento.
  • Mga bagong macro na @something at @coalesce na mga bersyon ng isang bagay at pinagsama, ayon sa pagkakabanggit.
  • Bagong redirect_stdio function para sa pag-redirect ng stdin, stdout, at stderr.
  • Ang bagong macro na "Base.@invoke f(arg1::T1, arg2::T2; kwargs…)" ay nagbibigay ng isang simpleng syntax para sa pagtawag sa "invoke(f, Tuple{T1,T2}, arg1, arg2; kwargs…)".
  • Ang bagong macro na "Base.@invokelatest f(args…; kwargs…)" ay nagbibigay ng maginhawang paraan para tawagan ang "Base.invokelatest(f, args...; kwargs...)".

Mga bagong feature ng library

  • Maaaring gumawa ng tuple gamit ang context keyword sa format na ":key => value" para tukuyin ang mga attribute na ipapasa sa IOContext.
  • Ang bytes2hex at hex2bytes ay hindi na pinaghihigpitan sa mga argumento ng uri na "Union{String,AbstractVector{UInt8}}" ​​​​at ngayon ay nangangailangan na lamang na ang mga uri ay mga sequence at may computable na haba.
  • Nakatanggap ang stat(file) ng mas detalyado at maginhawang paraan ng palabas.

Mga Karaniwang Pagbabago sa Aklatan

  • count at findall ngayon ay kumuha ng isang AbstractChar argument upang maghanap ng isang character sa isang string.
  • Saklaw ng mga bagong pamamaraan (simula, huminto) at saklaw (simula, huminto, haba).
  • Sinusuportahan na ngayon ng range ang simula bilang isang opsyonal na argumento ng keyword.
  • Ibinabalik na ngayon ng ilang operasyon sa hanay ang StepRangeLen sa halip na ang StepRange , na nagpapahintulot sa panghuling hakbang na maging zero. Dati, ang λ .* (1:9) ay magtapon ng error kapag λ = 0.
  • Hinahawakan na ngayon ng islowercase at isuppercase ang mga kategoryang lowercase at uppercase ng Unicode.
  • Sinusuportahan na ngayon ng mga function ng iseven at isodd ang mga uri maliban sa Integer.
  • Ang escape_string ay tumatanggap na ngayon ng isang set ng mga character sa pamamagitan ng keep keyword, para sa mga character na dapat manatili kung ano sila.
  • tumatanggap na ngayon ang getindex para sa NamedTuple ng character tuple para mag-index ng maraming value.
  • Ang mga subtype ng AbstractRange ay sumusunod sa pangkalahatang gawi sa pag-index ng array kapag nag-i-index ng Bools, mga error para sa Bool scalar, at kapag tinatrato ang mga array (kabilang ang mga range) ng Bools bilang mga lohikal na indeks.
  • keys(::RegexMatch) ay nagbabalik ng mga capture key ng isang regular na expression ayon sa pangalan, o sa pamamagitan ng index kung walang mga pangalan.
  • keys(::Generator) ay nagbabalik ng mga key ng iterator.
  • Ang RegexMatch ay umuulit na ngayon, na nagbubunga ng mga nakuhang substring.
  • Ang lpad/rpad ay tinukoy sa para sa textwidth.
  • Tinatanggap na ngayon ng Test.@test ang sirang at laktawan na mga argumento ng keyword, na ginagaya ang gawi ng Test.@test_broken at Test.@test_skip, ngunit nagbibigay-daan sa iyong laktawan ang mga pagsubok na nabigo lamang sa ilalim ng ilang partikular na kundisyon. Halimbawa, kung T == Float64 @test_broken isequal(complex(one(T)) / complex(T(Inf), T(-Inf)), complex(zero(T), zero(T))) else @test issequal(complex(one(T)) / complex(T(Inf), T(-Inf)), complex(zero(T) @ zero can replaced) isequal(complex(one(T)) / complex(T(Inf), T(-Inf)), complex(zero(T), zero(T))) broken=(T == Float64)
  • Ang @lock ay na-export na ngayon mula sa Base.
  • Ang pang-eksperimentong function na Base.catch_stack() ay pinalitan ng pangalan sa current_exceptions() at may partikular na uri ng pagbabalik.
  • Ang ilang trigonometric function (sind, cosd, tand, asind, acosd, asecd, acscd, acotd, atand) ay tumatanggap na ngayon ng square matrix.
  • Tumatanggap na ngayon ang replace(::String) ng maraming pattern, na ilalapat mula kaliwa hanggang kanan nang sabay-sabay, kaya isang pattern lang ang ilalapat sa anumang character, at malalapat lang ang mga pattern sa input text, hindi sa sunud-sunod na pagpapalit ng mga ito.
  • Hindi na sinusuri ng function na haba ang integer overflow sa karamihan ng mga kaso para sa mga tinukoy na hanay ng ilang partikular na uri. ang checked_length ay isang bagong function na gumagamit ng checked arithmetic hanggang sa punto ng overflow kung ang resulta ay maaaring dalhin. Bilang kahalili, gamitin ang SaferIntegers.jl package kung may panganib ng pag-apaw ng saklaw.
  • Mga bagong paraan ng pagpapalit para sa pagpapalit ng mga elemento sa isang Tuple.

Tagapamahala ng Package

  • Sa console mode na "julia>" para sa paggamit- o import-package na hindi naka-install, ngunit available sa registry na "pkg> add", inaalok itong awtomatikong i-install ang package.
  • Ginagamit ng Manifest.toml ang bagong format na may bagong metadata, kasama ang bersyon ni julia na bumuo ng manifest. Ang mga lumang-format na manifest ay sinusuportahan pa rin sa kanilang orihinal na format hanggang sa patakbuhin ng user ang Pkg.upgrade_manifest().
  • Ang "pkg> precompile" ay precompile na ngayon ng mga bagong bersyon ng na-download na mga package, sa halip na ipagpaliban ang mga ito hanggang sa susunod na session.
  • Sinusuportahan na ngayon ng "pkg> rm, pin, at free" ang argumentong "--all" para mag-invoke ng aksyon sa lahat ng package nang sabay-sabay.
  • Ang mga rehistrong na-download mula sa Pkg Server (hindi git) ay hindi na na-unpack sa mga file, ngunit direktang binabasa mula sa archive patungo sa memorya. Upang i-disable ang feature na ito, itakda ang environment variable na JULIA_PKG_UNPACK_REGISTRY=true.
  • Magagamit mo na ngayon ang external git executable sa halip na ang default na libgit2 library para sa mga download na nagaganap sa pamamagitan ng Git protocol sa pamamagitan ng pagtatakda ng environment variable na JULIA_PKG_USE_CLI_GIT=true.
  • Mga rehistrong na-download mula sa server Ang mga Pkg (hindi git) ay itinuturing na ngayong immutable. Ang mga manu-manong pagbabago sa kanilang mga file ay maaaring hindi makuha ng isang tumatakbong sesyon ng Pkg.
  • Ang pagdaragdag ng mga pakete ayon sa pangalan ng direktoryo sa REPL mode ay nangangailangan na ngayon ng pagdaragdag ng "./" sa pangalan kung ang pakete ay nasa kasalukuyang direktoryo; halimbawa, "add ./Package" sa halip na "add Package." Ginagawa ito upang maiwasan ang pagkalito sa pagitan ng pangalan ng package na Package at ng lokal na direktoryo ng Package.
  • Inalis ang keyword ng mode para sa PackageSpec.

Linear algebra

  • Gamitin ang Libblastrampoline upang paganahin ang BLAS at LAPACK sa runtime. Bilang default, pinagana ang OpenBLAS bilang bahagi ng pamamahagi ng Julia. Ang bagong mekanismo ng pagpapagana ay maaaring gamitin upang palitan ang BLAS at LAPACK ng mga setting na tinukoy ng gumagamit.
  • Sa aarch64, ang OpenBLAS ay gumagamit na ngayon ng ILP64 BLAS, tulad ng lahat ng iba pang 64-bit na platform.
  • Ang OpenBLAS ay na-update sa bersyon 0.3.13.
  • Ang SuiteSparse ay na-update sa bersyon 5.8.1.
  • Ang hugis ng isang UpperHessenberg matrix ay pinapanatili sa ilalim ng ilang partikular na operasyon ng arithmetic, tulad ng multiplikasyon o paghahati ng isang UpperTriangular matrix.
  • Ang tunay na quasi-triangular Schur factorization ay maaari na ngayong i-transform sa complex upper triangular form gamit ang expression na "Schur{Complex}(S)".
  • Sinusuportahan na ngayon ng cis(A) ang mga matrice bilang mga argumento.
  • Sinusuportahan ng tuldok ang UniformScaling para sa uri ng AbstractMatrix.
  • Sinusuportahan na ngayon ng qr[!] at lu[!] ang singleton na LinearAlgebra.PivotingStrategy values ​​​​bilang isang opsyonal na pivot argument: ang mga default na value ay qr(A, NoPivot()) versus qr(A, ColumnNorm()) na may pivoting, at lu(A, RowMaximum()) versus lu(A), NoPivotting. Ang mga dating Val{true/false} na tawag ay hindi na ginagamit.
  • Ang det(M::AbstractMatrix{BigInt}) ay tumatawag sa det_bareiss(M), na gumagamit ng Bareiss algorithm upang kalkulahin ang mga eksaktong halaga.

REPL

  • Ang mahahabang linya ay inalis na ngayon gamit ang "head" ⋯ 12345 bytes ⋯ "tail" syntax kapag ipinapakita sa REPL.
  • Ang pag-paste ng mga halimbawa ng Repl mula sa clipboard sa REPL ay sumusuporta na ngayon sa lahat ng Repl mode (julia, pkg, shell, help?) at ang mode ay awtomatikong inililipat.
  • Ang "help?>" para sa mga module na walang mga docstring ay nagbabalik na ngayon ng isang listahan ng mga na-export na pangalan at naglalabas ng mga nilalaman ng nauugnay na README.md kung natagpuan.

SparseArrays

  • Bagong method sizehint!(::SparseMatrixCSC, ::Integer)\.
  • Ang cholesky() ay ganap na ngayong pinapanatili ang permutasyon na tinukoy ng user.
  • Ang issparse ay patuloy na inilalapat sa lahat ng array ng wrapper, kabilang ang mga nested, sa pamamagitan ng pagsuri sa issparse ng parent array ng wrapper.

Pagmamanipula ng petsa

  • Ang function na Dates.periods ay maaaring gamitin upang makakuha ng mga halaga ng Vector mula sa isang Panahon mula sa isang CompoundPeriod.

Nagda-download

  • Kung ang cookie header ay nakatakda sa isang na-redirect na kahilingan, ang cookie ay ipapadala na ngayon sa mga susunod na kahilingan.
  • Kung umiiral ang ~/.netrc file, ginagamit ito bilang pinagmumulan ng mga password para sa mga website na nangangailangan ng pagpapatunay.
  • Ginagawa na ngayon ang indikasyon ng pangalan ng server sa lahat ng koneksyon sa TLS, kahit na hindi na-verify ang pagkakakilanlan ng server (tingnan ang NetworkOptions).
  • Kapag sinusuri ang mga koneksyon ng TLS sa Windowskung server hindi magagamit ang pagbawi ng sertipiko, pinapayagan ang koneksyon; naaayon ito sa ginagawa ng ibang mga application at kung paano isinasagawa ang pagbawi sa macOS.
  • Mayroon na ngayong 30 segundong paghihintay sa koneksyon at 20 segundong paghihintay sa pagpapadala ng data. Tinitiyak nito na ang mga koneksyon ay buhay o madidiskonekta ang mga ito sa loob ng wala pang isang minuto.

Tar

  • Binabalewala na ngayon ng Tar.extract ang eksaktong mode ng pahintulot ng tarball at ginagawang normal ang mga mode sa parehong paraan tulad ng Tar.create, na katulad ng git.
  • Ang mga function na gumagamit ng mga tar archive ay humahawak na ngayon ng mga hard link: ang target ng link ay dapat na isang file na dati nang tiningnan; Ang Tar.list ay naglilista ng isang entry na may uri ng :hardlink at isang .link na field na tumutukoy sa landas patungo sa target; iba pang mga function—Tar.extract, Tar.rewrite, Tar.tree_hash—i-convert ang isang hard link sa isang kopya ng target na file.
  • Kasama na ngayon sa karaniwang format na nilikha ng Tar.create at Tar.rewrite ang mga entry para sa mga direktoryo na hindi walang laman. Ang ilang mga tool na gumagamit ng tarball (kabilang ang Docker) ay nalilito sa kakulangan ng mga entry sa direktoryo na ito.
  • Ang tar ay tumatanggap na ngayon ng mga tarball na may mga nangungunang puwang sa octal integer na mga patlang ng header: sa teknikal na paraan ito ay isang di-wastong format ayon sa detalye ng POSIX, ngunit ang lumang Solaris tar command ay lumikha ng mga naturang archive, kaya ang format na ito ay nangyayari sa ligaw, at tila hindi nakakapinsalang tanggapin ito.
  • Ang Tar.extract ay tumatanggap na ngayon ng set_permissions keyword argument na default sa true; kung mali ang ipinasa sa halip, ang mga pahintulot ng mga na-extract na file ay hindi mababago sa panahon ng pagkuha.

Mmap

  • Ang mmap ay na-export na ngayon at magagamit para magamit.

DelimitedFiles

  • Ang Readdlm ay nagde-default na ngayon sa use_mmap=false sa lahat ng operating system upang matiyak ang pare-parehong pagiging maaasahan sa mga abnormal na sitwasyon ng file system.

Pinagmulan: opennet.ru

Bumili ng maaasahang pagho-host para sa mga site na may proteksyon ng DDoS, mga server ng VPS VDS 🔥 Bumili ng maaasahang website hosting na may proteksyon ng DDoS, VPS VDS servers | ProHoster