Tso tawm ntawm Julia 1.8 programming lus

Kev tso tawm ntawm Julia 1.8 programming lus yog muaj, sib txuas cov kev ua tau zoo xws li kev ua haujlwm siab, kev txhawb nqa rau kev ntaus ntawv dynamic thiab cov cuab yeej built-in rau kev sib txuas lus. Julia's syntax yog ze rau MATLAB, qiv qee cov ntsiab lus los ntawm Ruby thiab Lisp. Txoj hlua manipulation txoj kev yog reminiscent ntawm Perl. Txoj haujlwm code raug faib raws li daim ntawv tso cai MIT.

Cov yam ntxwv tseem ceeb ntawm cov lus:

  • Kev ua haujlwm siab: ib lub hom phiaj tseem ceeb ntawm qhov project yog kom ua tiav qhov kev ua tau zoo ze rau C cov kev pab cuam. Julia compiler yog ua raws li kev ua haujlwm ntawm LLVM qhov project thiab tsim kom muaj txiaj ntsig ntawm lub tshuab code rau ntau lub hom phiaj platform;
  • Txhawb ntau yam txheej txheem kev ua haujlwm, suav nrog cov ntsiab lus ntawm cov khoom taw qhia thiab kev ua haujlwm zoo. Lub tsev qiv ntawv tus qauv muab, thiab lwm yam, ua haujlwm rau asynchronous I / O, kev tswj cov txheej txheem, kev txiav, profileing, thiab kev tswj pob;
  • Dynamic typing: hom lus tsis xav kom meej meej ntawm hom kev hloov pauv, zoo ib yam li cov lus sau ntawv. Txhawb kev sib tham sib hom;
  • Kev xaiv muaj peev xwm qhia meej meej hom;
  • Lub syntax zoo tagnrho rau kev suav lej, kev suav lej, kev kawm tshuab, thiab kev pom cov ntaub ntawv. Kev them nyiaj yug rau ntau hom ntaub ntawv tus lej thiab cov cuab yeej rau kev sib piv ntawm kev suav.
  • Lub peev xwm los hu ncaj qha los ntawm C cov tsev qiv ntawv yam tsis muaj txheej txheej ntxiv.

Kev hloov pauv loj hauv Julia 1.8:

  • Cov yam ntxwv tshiab
    • Cov teb ntawm kev hloov pauv tau tam sim no tuaj yeem sau tseg raws li qhov tsis tu ncua los tiv thaiv lawv los ntawm kev hloov pauv thiab tso cai rau kev ua kom zoo.
    • Hom annotations tuaj yeem muab ntxiv rau cov hloov pauv thoob ntiaj teb.
    • Empty n-dimensional arrays tuaj yeem tsim tau siv ntau qhov semicolons hauv square brackets, piv txwv li "[;;;]" tsim 0x0x0 array.
    • Sim cov blocks tam sim no tuaj yeem xaiv muaj lwm qhov thaiv, uas raug tua tam sim tom qab lub cev tseem ceeb yog tias tsis muaj qhov yuam kev raug pov tseg.
    • @inline thiab @noinline tuaj yeem muab tso rau hauv lub cev ua haujlwm, tso cai rau koj los sau cov haujlwm tsis qhia npe.
    • @inline thiab @noinline tam sim no tuaj yeem siv rau kev ua haujlwm hauv qhov chaw hu lossis thaiv kom yuam cov haujlwm sib txuas hu kom suav nrog (lossis tsis suav nrog).
    • βˆ€, βˆƒ thiab βˆ„ raug tso cai ua tus cim cim.
    • Ntxiv kev txhawb nqa rau Unicode 14.0.0 specification.
    • Lub Module (: npe, cuav, cuav) txoj kev tuaj yeem siv los tsim cov qauv uas tsis muaj npe, tsis tuaj yeem nqa Base lossis Core, thiab tsis muaj kev siv rau nws tus kheej.
  • Hloov cov lus
    • Newly tsim Task objects (@spawn, @async, thiab lwm yam) tam sim no muaj world_age rau txoj kev los ntawm niam txiv Task thaum tsim, tso cai rau optimized tua. Cov kev xaiv ua kom dhau los no muaj nyob rau hauv txoj kev Base.invokelatest.
    • Unicode unbalanced bidirectional formatting cov lus qhia yog tam sim no txwv nyob rau hauv cov hlua thiab cov lus kom tsis txhob txhaj tshuaj.
    • Base.ifelse yog tam sim no txhais tau tias yog ib qho kev ua haujlwm ntau dua li lub hauv paus, tso cai rau cov pob ntawv txuas ntxiv nws cov ntsiab lus.
    • Txhua txoj haujlwm rau lub ntiaj teb hloov pauv tam sim no ua ntej dhau los ntawm kev hu rau hloov pauv (Ib yam, x) lossis hloov pauv (T, x) yog tias lub ntiaj teb hloov pauv tau tshaj tawm tias yog hom T. Ua ntej siv cov hloov pauv thoob ntiaj teb, xyuas kom meej tias qhov hloov pauv tsis hloov pauv (Any , x) === x yeej ib txwm muaj tseeb, txwv tsis pub nws yuav ua rau tus cwj pwm tsis xav txog.
    • Built-in functions yog tam sim no zoo ib yam li generic functions thiab yuav programmatically enumerated siv txoj kev.
  • Compiler/runtime txhim kho
    • Lub sijhawm khau raj txo los ntawm kwv yees li 25%.
    • Lub LLVM-raws li compiler tau muab cais tawm ntawm lub tsev qiv ntawv runtime rau hauv lub tsev qiv ntawv tshiab, libjulia-codegen. Nws yog loaded los ntawm lub neej ntawd, yog li yuav tsum tsis muaj kev hloov pauv thaum siv ib txwm. Hauv kev xa tawm uas tsis xav tau lub tshuab sau (piv txwv li, cov duab kab ke uas tag nrho cov cai tsim nyog tau sau ua ntej), lub tsev qiv ntawv no (thiab nws qhov kev vam khom LLVM) tuaj yeem raug tshem tawm.
    • Hom kev xav tau tam sim no ua tau los ntawm kev sib cav rau ib txoj hauv kev. Piv txwv li, rau Base.ifelse(isa(x, Int), x, 0) rov ::Int txawm tias hom x tsis paub.
    • SROA (Scalar Replacement of Aggregates) tau raug txhim kho: tshem tawm kev hu xov tooj nrog lub ntiaj teb tsis tu ncua, tshem tawm cov qauv sib hloov nrog thaj chaw tsis muaj kev cuam tshuam, txhim kho kev ua haujlwm thiab ua haujlwm ntawm nested getfield hu.
    • Hom inference taug qab ntau yam teebmeem-kev mob tshwm sim thiab tsis poob. Kev nthuav tawm tas li raug coj mus rau hauv tus account, uas ua rau muaj txiaj ntsig zoo ntawm kev sib sau ua ke ntawm lub sijhawm. Qee qhov xwm txheej, piv txwv li, hu rau cov haujlwm uas tsis tuaj yeem nkag mus rau hauv tab sis tsis cuam tshuam qhov tshwm sim yuav raug muab pov tseg thaum lub sijhawm ua haujlwm. Cov cai rau cov teebmeem tuaj yeem sau tau manually siv Base.@assume_effects macro.
    • Precompilation (nrog cov lus qhia meej meej ua ntej lossis teev cov haujlwm ua haujlwm) tam sim no txuag ntau hom-txhais chaws, ua rau kev ua tiav thawj zaug sai dua. Txhua txoj kev tshiab / hom kev sib txuas uas xav tau los ntawm koj lub pob, tsis hais qhov twg cov txheej txheem tau raug txhais, tam sim no tuaj yeem khaws cia hauv cov ntaub ntawv precompilation yog tias lawv raug hu los ntawm ib txoj hauv kev rau koj pob.
  • Hloov mus rau Command Line Options
    • Tus cwj pwm tsis zoo rau kev saib xyuas @inbounds tshaj tawm yog tam sim no qhov kev xaiv pib hauv "--check-bounds = yog | tsis yog | nws pib".
    • Tshiab "--strip-metadata" kev xaiv kom tshem tawm docstrings, cov ntaub ntawv qhov chaw nyob, thiab cov npe sib txawv hauv zos thaum tsim cov duab system.
    • Kev xaiv tshiab "--strip-ir" tso cai rau lub compiler tshem tawm qhov nruab nrab qhov chaws sawv cev thaum tsim cov duab system. Cov duab uas tau tshwm sim tsuas yog ua haujlwm yog tias "--compile = tag nrho" siv lossis yog tias tag nrho cov cai yuav tsum tau muab ua ntej.
    • Yog hais tias lub cim "-" tau teev tseg es tsis txhob ntawm cov ntaub ntawv npe, ces lub executable code yog nyeem los ntawm tus qauv input kwj.
  • Multithreading txhawb kev hloov
    • Threads.@threads los ntawm lub neej ntawd siv qhov kev xaiv teem caij tshiab: dynamic, uas txawv ntawm hom yav dhau los hauv qhov kev rov hais dua yuav raug teem caij dynamically hla cov neeg ua hauj lwm threads es tsis yog muab rau txhua txoj xov. Hom no tso cai rau kev faib cov nested loops zoo dua nrog @spawn thiab @threads.
  • Cov tsev qiv ntawv tshiab ua haujlwm
    • txhua split(str) los ua split(str) ntau zaus.
    • allequal(itr) los ntsuam xyuas seb tag nrho cov ntsiab lus hauv ib qho iterator yog sib npaug.
    • hardlink(src, dst) tuaj yeem siv los tsim cov txuas nyuaj.
    • setcpuaffinity (cmd, cpus) los teeb tsa cov affinity ntawm lub processor core rau cov txheej txheem launched.
    • diskstat(path=pwd()) kom tau txais kev txheeb cais disk.
    • Tshiab @showtime macro los tso saib ob kab uas raug tshuaj xyuas thiab @time qhia.
    • LazyString thiab tub nkeeg "str" ​​​​macro tau ntxiv los txhawb kev siv dag zog ntawm cov lus yuam kev hauv kev ua yuam kev.
    • Kho qhov teeb meem concurrency hauv Dict thiab lwm yam khoom siv xws li cov yuam sij (:: Dict), qhov tseem ceeb (:: Dict) thiab Teeb. Cov txheej txheem iteration tam sim no tuaj yeem raug hu rau hauv phau ntawv txhais lus lossis teeb tsa, tsuav yog tsis muaj kev hu uas hloov kho cov phau ntawv txhais lus lossis teeb tsa.
    • @time thiab @timev tam sim no muaj cov lus piav qhia xaiv, tso cai rau koj los sau cov ntsiab lus ntawm lub sijhawm, piv txwv. @time "Evaluating foo" foo().
    • ntau yuav tsum nres lossis ntev raws li nws tsuas yog lo lus tseem ceeb sib cav.
    • precision thiab setprecision tam sim no lees txais lub hauv paus ua lo lus tseem ceeb
    • TCP cov khoom siv lub qhov (socket) tam sim no muab txoj hauv kev sau kaw thiab txhawb kev siv ib nrab qhib hom.
    • extrema tam sim no lees txais kev sib cav init.
    • Iterators.countfrom tam sim no lees txais txhua yam uas txhais ib + txoj kev.
    • @time tam sim no faib cov % ntawm lub sij hawm siv recompiling txoj kev nrog hloov hom.
  • Standard Library Hloov
    • Cov yuam sij nrog tus nqi Tsis muaj dab tsi tam sim no raug tshem tawm ntawm ib puag ncig hauv addenv.
    • Iterators.reverse (thiab yog li ntawd kawg) txhawb txhua kab.
    • Qhov ntev ua haujlwm rau ntau yam ntawm qee yam tsis kuaj xyuas cov lej dhau lawm. Ib txoj haujlwm tshiab, checked_length, yog muaj; nws muaj me ntsis hloov kev tswj logic. Yog tias tsim nyog, siv SaferIntegers.jl los tsim hom ntau yam.
    • Lub Iterators.Reverse iterator siv txhua qhov kev hloov pauv yog tias ua tau.
  • Package Manager
    • Tshiab βŒƒ thiab βŒ… ntsuas ntawm ib sab ntawm cov pob hauv "pkg>" xwm txheej uas muaj cov tshiab versions. βŒ… qhia tias cov tshiab versions tsis tuaj yeem nruab.
    • Tshiab outdated::Bool sib cav rau Pkg.status (--outdated los yog -o nyob rau hauv REPL hom) qhia cov ntaub ntawv hais txog tej pob khoom los ntawm yav dhau los versions.
    • New compat::Bool argument to Pkg.status (--compat or -c in REPL mode) to show any [compat] nkag hauv Project.toml.
    • Tshiab "pkg> compat" (thiab Pkg.compat) hom rau kev teeb tsa qhov project compatibility nkag. Muab kev sib tham sib tham ntawm "pkg> compat" lossis tswj cov ntaub ntawv ncaj qha ntawm "pkg> Foo 0.4,0.5", uas tuaj yeem thauj cov ntaub ntawv tam sim no los ntawm kev ua tiav tab. Ntawd yog, "pkg> compat Fo" tau hloov kho rau "pkg> Foo 0.4,0.5" kom qhov kev nkag uas twb muaj lawm tuaj yeem hloov kho.
    • Pkg tam sim no tsuas yog sim rub tawm pob khoom los ntawm lub pob server yog tias tus neeg rau zaub mov saib xyuas cov npe uas muaj pob.
    • Pkg.instantiate tam sim no yuav tshaj tawm lus ceeb toom thaum Project.toml tsis sync nrog Manifest.toml. Nws ua qhov no raws li qhov hash ntawm qhov project deps thiab compat cov ntaub ntawv (lwm cov teb tsis quav ntsej) hauv qhov tshwm sim thaum daws nws, yog li ntawd txhua qhov kev hloov pauv rau Project.toml deps lossis cov ntaub ntawv compat tuaj yeem tshawb pom yam tsis muaj kev daws teeb meem.
    • Yog tias "pkg> ntxiv" nrhiav tsis tau ib pob nrog lub npe muab, tam sim no nws yuav qhia cov pob nrog cov npe zoo sib xws uas tuaj yeem ntxiv.
    • Lub version ntawm julia khaws cia hauv qhov tshwm sim tsis suav nrog tus lej tsim, lub ntsiab lus tus tswv tam sim no yuav raug sau ua 1.9.0-DEV.
    • Kev kuaj rho tawm "pkg>" tam sim no yuav raug kuaj pom ntau dua, thiab yuav raug xa rov qab mus rau REPL.
  • InteractiveUtils
    • Tshiab @time_imports macro los tshaj tawm lub sijhawm siv cov pob khoom tuaj txawv teb chaws thiab lawv qhov kev vam khom, qhia txog kev suav sau thiab rov ua dua lub sijhawm raws li feem pua ​​​​ntawm kev xa tawm.
  • Linear algebra
    • BLAS submodule tam sim no txhawb qib-2 BLAS spr!
    • Lub tsev qiv ntawv tus qauv LinearAlgebra.jl tam sim no muaj kev ywj pheej ntawm SparseArrays.jl, ob qho tib si los ntawm qhov chaws thiab qhov ntsuas ntsuas ntsuas. Raws li qhov tshwm sim, cov arrays sparse tsis rov qab los (implicitly) los ntawm txoj kev los ntawm LinearAlgebra siv rau Base lossis LinearAlgebra cov khoom. Hauv particular, qhov no ua rau cov kev hloov pauv hauv qab no:
      • Concatenations siv tshwj xeeb "sparse" matrices (xws li kab pheeb ces kaum) tam sim no rov qab matrices; Raws li qhov tshwm sim, D1 thiab D2 teb ntawm SVD cov khoom tsim los ntawm getproperty hu tam sim no ntom matrices.
      • Cov txheej txheem zoo sib xws (::SpecialSparseMatrix, ::Type, ::Dims) rov qab qhov ntom xoom matrix. Raws li qhov tshwm sim, cov khoom ntawm ob-, peb-, thiab symmetric tridiagonal matrices nrog rau ib leeg ua rau cov tiam ntawm cov matrix ntom. Tsis tas li ntawd, tsim cov matrices zoo sib xws nrog peb qhov kev sib cav los ntawm tshwj xeeb "sparse" matrices los ntawm (non-static) matrices tam sim no ua tsis tiav vim "zero(::Type{Matrix{T}})".
  • Luam tawm
    • %s thiab %c tam sim no siv qhov kev sib cav textwidth los format qhov dav.
  • Profile
    • CPU load profile tam sim no sau cov metadata nrog rau cov xov thiab cov haujlwm. Profile.print() muaj ib pawg tshiab sib cav uas tso cai rau koj los pab pawg threads, kev ua haujlwm lossis subthreads/tasks, tasks/threads, and threads and tasks arguments to provide filtering. Tsis tas li ntawd, kev siv feem pua ​​​​yog tam sim no tau tshaj tawm los ntawm tag nrho lossis ib txoj xov, nyob ntawm seb cov xov puas nyob lossis tsis nyob hauv txhua tus qauv. Profile.fetch() suav nrog cov metadata tshiab los ntawm lub neej ntawd. Txhawm rau rov qab sib raug zoo nrog cov neeg siv khoom sab nraud ntawm cov ntaub ntawv profile, nws tuaj yeem raug cais los ntawm kev hla suav nrog_meta = cuav.
    • Tus tshiab Profile.Allocs module tso cai rau koj mus rau profile nco faib. Ib pawg kab ntawm cov hom thiab qhov loj ntawm txhua qhov kev faib cim xeeb tau sau tseg, thiab cov lus sib cav sample_rate tso cai rau tus naj npawb ntawm cov kev faib tawm kom raug hla, txo qis kev ua haujlwm dhau los.
    • Teem sijhawm CPU profileing tam sim no tuaj yeem khiav los ntawm cov neeg siv thaum cov haujlwm tab tom ua haujlwm yam tsis muaj kev thauj khoom thawj zaug, thiab daim ntawv tshaj tawm yuav tshwm sim thaum khiav. Ntawm MacOS thiab FreeBSD, nias ctrl-t lossis hu rau SIGINFO. Rau lwm lub platform, qhib SIGUSR1, i.e. % tua -USR1 $julia_pid. Qhov no tsis muaj nyob rau ntawm Windows.
  • REPL
    • RadioMenu tam sim no txhawb nqa cov keyboard shortcuts ntxiv rau kev xaiv ncaj qha.
    • Cov kab ke "?(x, y" ua raws li nias TAB qhia tag nrho cov txheej txheem uas tuaj yeem hu nrog cov lus sib cav x, y, .... (Ib qho chaw ua haujlwm txwv tsis pub koj nkag mus rau hom kev pab.) "MyModule.?(x, y " txwv qhov kev tshawb nrhiav rau "MyModule". Nias TAB yuav tsum muaj tsawg kawg ib qho kev sib cav yog hom tshwj xeeb tshaj li Ib qho. Lossis siv SHIFT-TAB es tsis yog TAB kom tso cai rau txhua txoj hauv kev.
    • Qhov kev hloov pauv thoob ntiaj teb tshiab ua yuam kev tso cai rau koj kom tau txais qhov tseeb tshwj xeeb, zoo ib yam li tus cwj pwm ntawm ans nrog cov lus teb kawg. Kev nkag mus yuam kev rov luam tawm cov ntaub ntawv tshwj xeeb.
  • SparseArrays
    • Tsiv SparseArrays code los ntawm Julia repository mus rau sab nraud SparseArrays.jl repository.
    • Tus tshiab concatenation functions sparse_hcat, sparse_vcat, thiab sparse_hvcat rov qab ib hom SparseMatrixCSC tsis hais hom ntawm cov lus tawm tswv yim. Qhov no tau dhau los ua qhov tsim nyog los koom ua ke cov txheej txheem rau gluing matrices tom qab sib cais LinearAlgebra.jl thiab SparseArrays.jl code.
  • txiav
    • Cov txheej txheem kev txiav txim siab hauv qab noMinLevel, Debug, Cov Ntaub Ntawv, Ceeb Toom, yuam kev thiab AboveMaxLevel tam sim no raug xa tawm los ntawm cov tsev qiv ntawv tus qauv Logging.
  • Unicode
    • Ntxiv isequal_normalized muaj nuj nqi los tshawb xyuas qhov sib npaug ntawm Unicode yam tsis muaj kev tsim cov hlua zoo li qub.
    • Unicode.normalize muaj nuj nqi tam sim no lees txais charttransform lo lus tseem ceeb, uas tuaj yeem siv los muab kev cai ua cim, thiab Unicode.julia_chartransform muaj nuj nqi kuj tau muab los tsim cov duab kos siv thaum Julia parser normalizes cov cim.
  • xeem
    • '@test_throws "qee cov lus" triggers_error()' tam sim no siv tau los ntsuas seb cov ntawv nyeem yuam kev puas muaj "qee cov lus" yuam kev, tsis hais hom kev zam tshwj xeeb. Cov kab lus tsis tu ncua, cov npe hlua, thiab cov haujlwm sib txuam kuj tau txais kev txhawb nqa.
    • @testset foo() tam sim no siv tau los tsim ib qho kev xeem los ntawm ib qho kev ua haujlwm. Cov ntaub ntawv xeem lub npe yog lub npe ntawm lub luag haujlwm raug hu. Cov haujlwm hu ua tuaj yeem muaj @test thiab lwm yam @testset cov ntsiab lus, suav nrog rau kev hu mus rau lwm lub luag haujlwm, thaum sau tag nrho cov txiaj ntsig kev xeem nruab nrab.
    • TestLogger thiab LogRecord tam sim no raug xa tawm los ntawm cov tsev qiv ntawv xeem tus qauv.
  • Faib
    • SSHManager tam sim no txhawb cov neeg ua haujlwm xov nrog csh / tcsh wrapper ntawm addprocs() txoj kev thiab lub plhaub =: csh parameter.
  • Lwm yam kev hloov
    • GC.enable_logging(true) tuaj yeem siv los teev txhua qhov kev ua haujlwm khaws khib nyiab nrog lub sijhawm thiab tus nqi ntawm lub cim xeeb sau.

Tau qhov twg los: opennet.ru

Ntxiv ib saib