Julia 1.9 programming lus muaj

Kev tso tawm ntawm Julia 1.9 programming lus tau raug luam tawm, sib txuas cov khoom zoo 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.9:

  • Cov yam ntxwv tshiab
    • Tso cai rau cov haujlwm ua rau hauv lwm qhov module siv "setproperty!(::Module, ::Symbol, x)".
    • Muaj ntau txoj haujlwm uas tsis nyob hauv txoj haujlwm kawg raug tso cai. Piv txwv li, txoj hlua β€œa, b…, c = 1, 2, 3, 4” yuav raug ua tiav raws li β€œa = 1; b..., = 2, 3; c = 4". Qhov no yog daws ntawm Base.split_rest.
    • Tib lub cim literals tam sim no txhawb tib lub syntax li hlua literals; cov. Cov syntax tuaj yeem sawv cev tsis raug UTF-8 ib ntus, raws li kev tso cai los ntawm Char hom.
    • Ntxiv kev txhawb nqa rau Unicode 15 specification.
    • Nested ua ke ntawm tuples thiab lub npe hu ua tuples tam sim no siv tau raws li hom tsis.
    • Tshiab built-in functions "getglobal(::Module, ::Symbol[, order])" thiab "setglobal!(::Module, ::Symbol, x[,order])" rau kev nyeem ntawv thiab sau ntawv tshwj xeeb rau lub ntiaj teb no variables. Txoj kev getglobal tam sim no yuav tsum tau nyiam dua li txoj kev getfield rau kev nkag mus rau lub ntiaj teb hloov pauv.
  • Hloov cov lus
    • Lub "@invoke" macro qhia hauv version 1.7 tam sim no tau xa tawm thiab muaj rau siv. Tsis tas li ntawd, tam sim no nws siv "Core.Typeof(x)" txoj kev es tsis yog "Ib yam" nyob rau hauv rooj plaub uas hom annotation raug tshem tawm rau qhov kev sib cav "x". Qhov no yog qhov tsim nyog los xyuas kom meej tias hom dhau los ua cov lus sib cav raug ua tiav.
    • Pab kom xa tawm ntawm "invokelatest" muaj nuj nqi thiab "@invokelatest" macro, qhia hauv version 1.7.
  • Compiler/runtime txhim kho
    • Lub sijhawm txo qis rau thawj zaug ua tiav (TTFX - Lub Sijhawm rau thawj zaug ua tiav). Precompiling ib pob tam sim no khaws cov cai ib txwm nyob hauv "pkgimage", txhais tau hais tias cov lej tsim los ntawm cov txheej txheem precompilation yuav tsis tas yuav rov ua dua tom qab lub pob tau thauj khoom. Kev siv pkgimages hom tuaj yeem ua tsis taus siv qhov "--pkgimages = tsis" kev xaiv.
    • Qhov paub txog qhov teeb meem quadratic complexity ntawm hom inference tau raug kho, thiab inference siv tsawg nco tag nrho. Qee cov rooj plaub ntug uas tau txais kev ua haujlwm ntev (xws li ModelingToolkit.jl nrog ib feem sib npaug sib npaug thiab cov qauv loj loj) suav tau sai dua.
    • Kev hu xov tooj nrog cov lus sib cav tsis muaj hom pob zeb tam sim no tuaj yeem yog Union-splitting optimized rau kev txhaj tshuaj lossis kev daws teeb meem zoo li qub, txawm tias muaj ntau hom sib txawv rau kev xa tawm. Qhov no tuaj yeem txhim kho kev ua tau zoo hauv qee qhov xwm txheej uas cov khoom hom tsis tau daws qhov tseeb, los ntawm kev daws teeb meem "@nospecialize-d" hu rau chaw thiab zam kev rov ua dua.
    • Txhua qhov kev siv ntawm @pure macro hauv Base module tau hloov nrog Base.@assume_effects.
    • Hu rau invoke(f, invokesig, args...) nrog tsawg dua hom tshwj xeeb tshaj li feem ntau siv rau f(args...) tsis ua rau lub pob rov ua dua.
  • Hloov mus rau Command Line Options
    • Ntawm Linux thiab Windows, qhov kev xaiv "--xov = pib" tam sim no sim txiav txim siab muaj pes tsawg tus txheej txheem raws li CPU affinity, lub npog ntsej muag feem ntau teeb tsa hauv HPC thiab huab ib puag ncig.
    • Qhov "--math-mode=fast" parameter yog neeg xiam oob khab, es tsis txhob siv qhov "@fastmath" macro, uas tau hais meej meej meej.
    • Qhov kev xaiv "--xov" tam sim no nyob rau hauv hom "auto | N[,auto|M]", qhov twg M qhia cov xov tooj sib tham sib tham los tsim (tam sim no nws pib txhais tau tias 1).
    • Ntxiv kev xaiv "-heap-size-hint =" ", uas teeb tsa qhov pib tom qab uas pib sau cov khib nyiab. Qhov loj tuaj yeem teev nyob hauv bytes, kilobytes (1000 KB), megabytes (300 MB), lossis gigabytes (1,5 GB).
  • Hloov hauv multithreading
    • "Threads.@spawn" tam sim no muaj kev xaiv thawj qhov kev sib cav nrog tus nqi ":default" lossis ":interactive". Ib txoj haujlwm sib tham sib yuav tsum muaj cov lus teb latency tsawg thiab yog tsim los ua luv luv lossis ua ntau zaus. Cov haujlwm sib tham sib yuav khiav ntawm cov xov sib tham sib tham yog tias lawv tau teev tseg thaum pib Julia.
    • Cov xov uas khiav tawm sab nraud Julia runtime (xws li los ntawm C lossis Java) tuaj yeem hu rau Julia code siv "jl_adopt_thread". Qhov no tshwm sim tau txais thaum nkag mus rau Julia code ntawm "cfunction" lossis "@ccallable" nkag point. Raws li qhov tshwm sim, cov xov tooj ntawm cov xov tam sim no tuaj yeem hloov pauv thaum ua tiav.
  • Cov tsev qiv ntawv tshiab ua haujlwm
    • Tshiab muaj nuj nqi "Iterators.flatmap".
    • Kev ua haujlwm tshiab "pkgversion(m::Module)" kom tau txais cov version ntawm pob uas thauj cov khoom muab, zoo ib yam li "pkgdir(m::Module)".
    • Kev ua haujlwm tshiab "stack(x)" uas dav dav "txo (hcat, x::Vector{<:Vector})" rau txhua qhov ntev thiab tso cai rau ib qho kev sib tw ntawm iterators. Txoj kev "pack(f, x)" generalizes "mapreduce(f, hcat, x)" thiab ua tau zoo dua.
    • Tshiab macro rau kev txheeb xyuas cov cim xeeb "@allocations", zoo ib yam li "@allocation", tshwj tsis yog tias nws xa rov qab cov naj npawb ntawm cov cim xeeb faib, ntau dua li tag nrho qhov loj ntawm lub cim xeeb faib.
  • Lub tsev qiv ntawv tshiab nta
    • "RoundFromZero" tam sim no ua haujlwm rau hom uas tsis yog "BigFloat".
    • "Dict" tam sim no tuaj yeem txo qis ntawm tus kheej siv "sizehint!"
    • "@time" tam sim no cais qhia qhov feem pua ​​​​ntawm lub sijhawm siv rov ua cov txheej txheem tsis raug.
  • Hloov mus rau lub tsev qiv ntawv txheem
    • Kho qhov teeb meem sib txuam hauv iteration txoj hauv kev rau Dict thiab lwm yam khoom siv tau los xws li cov yuam sij (:: Dict), qhov tseem ceeb (:: Dict) thiab Teeb. Cov txheej txheem iteration tam sim no tuaj yeem raug hu rau ntawm Dict lossis Teeb nyob rau hauv tib lub sijhawm rau cov xov tsis txwv, tsuav yog tsis muaj kev ua uas hloov cov phau ntawv txhais lus lossis teeb tsa.
    • Negating ib qho kev ua haujlwm predicate "!f" tam sim no rov qab muaj nuj nqi "(!) ∘ f" hloov tsis qhia npe.
    • Dimension hlais cov haujlwm tam sim no ua haujlwm thoob plaws ntau qhov ntev: "txhua qhov", "txhua tus" thiab "txhua qhov" rov qab "Slices" khoom uas tso cai rau kev xa tawm los muab txoj hauv kev zoo dua.
    • Ntxiv qhov "@kwdef" macro rau pej xeem API.
    • Kho qhov teeb meem nrog qhov kev txiav txim ntawm kev ua haujlwm hauv "fld1".
    • Kev txheeb xyuas tam sim no ib txwm nyob ruaj khov (QuickSort tau rov tsim dua).
    • "Base.splat" yog tam sim no exported. Tus nqi xa rov qab yog hom "Base.Splat" ntau dua li qhov tsis qhia npe, tso cai rau nws tso tawm kom zoo.
  • Package Manager
    • "Package Extensions": Kev them nyiaj yug rau kev thauj khoom ib qho code snippet los ntawm lwm cov pob khoom thauj hauv Julia kev sib kho. Daim ntawv thov zoo ib yam li "Requires.jl" pob, tab sis ua ntej muab tso ua ke thiab kev teeb tsa kev sib raug zoo tau txais kev txhawb nqa.
  • LinearAlgebra Library
    • Vim muaj kev pheej hmoo ntawm kev tsis sib haum xeeb nrog lub ntsiab lus sib faib, tshem tawm "a / b" thiab "b\a" txoj kev nrog scalar "a" thiab vector "b", uas yog sib npaug rau "a * pinv(b)".
    • Hu BLAS thiab LAPACK tam sim no siv "libblastrampoline (LBT)". OpenBLAS yog muab los ntawm lub neej ntawd, tab sis tsim cov duab kab ke nrog lwm cov tsev qiv ntawv BLAS / LAPACK tsis txaus siab. Hloov chaw, nws raug pom zoo kom siv LBT mechanism los hloov BLAS / LAPACK nrog lwm cov tsev qiv ntawv uas twb muaj lawm.
    • "lu" txhawb nqa lub tswv yim tshiab matrix rotation, "RowNonZero()", uas xaiv thawj qhov tsis yog xoom rotation rau siv nrog hom lej tshiab thiab rau kev cob qhia.
    • "normalize(x, p=2)" tam sim no txhawb txhua qhov chaw vector qhov chaw "x", suav nrog scalars.
    • Lub neej ntawd tus naj npawb ntawm BLAS xov yog tam sim no sib npaug rau cov xov tooj ntawm CPU xov ntawm ARM architectures thiab ib nrab ntawm CPU xov ntawm lwm cov architectures.
  • Printf: Rov ua dua cov lus yuam kev rau cov kab ntawv tsis raug cai kom nyeem tau zoo dua.
  • Profile: Tshiab muaj nuj nqi "Profile.take_heap_snapshot(file)", uas sau ib cov ntaub ntawv nyob rau hauv lub JSON-raws li ".heapsnapshot" hom ntawv txhawb nyob rau hauv Chrome.
  • Random: randn thiab randexp tam sim no ua haujlwm rau txhua hom AbstractFloat uas txhais rand.
  • REPL
    • Nias lub "Alt-e" qhov tseem ceeb ua ke tam sim no qhib cov tswv yim tam sim no hauv tus editor. Cov ntsiab lus (yog hloov kho) yuav raug tua thaum koj tawm ntawm tus editor.
    • Tam sim no module cov ntsiab lus tseem ceeb hauv REPL tuaj yeem hloov pauv (Lub Ntsiab los ntawm lub neej ntawd) siv lub luag haujlwm "REPL.activate(::Module)" lossis los ntawm kev nkag mus rau module hauv REPL thiab nias qhov tseem ceeb ua ke "Alt-m".
    • Hom "numbered prompt" hom, uas luam cov lej rau txhua qhov kev tawm tswv yim thiab tso tawm thiab khaws cov qhab nia hauv Out, tuaj yeem qhib siv "REPL.numbered_prompt!()".
    • Tab ua tiav qhia cov ntsiab lus sib cav muaj.
  • SuiteSparse: Txav code rau "SuiteSparse" solver rau "SparseArrays.jl". Solvers yog tam sim no rov xa tawm los ntawm "SuiteSparse.jl".
  • SparseArrays
    • Cov tshuaj "SuiteSparse" tam sim no muaj raws li "SparseArrays" submodules.
    • UMFPACK thiab CHOLMOD xov tiv thaiv hom tau txhim kho los ntawm kev tshem tawm cov kev hloov pauv thoob ntiaj teb thiab siv cov xauv. Multi-threaded "ldiv!" UMFPACK cov khoom tam sim no tuaj yeem ua tiav yam nyab xeeb.
    • Qhov kev sim ua haujlwm "SparseArrays.allowscalar(::Bool)" tso cai rau koj los lov tes taw lossis pab kom scalar indexing ntawm sparse arrays. Qhov kev ua haujlwm no yog tsim los txhawm rau txhawm rau ntsuas qhov ntsuas qhov ntsuas qhov ntsuas ntawm "SparseMatrixCSC" cov khoom, uas yog ib qho ntawm cov teeb meem kev ua haujlwm.
  • Hom tsis ua haujlwm tshiab rau kev xeem suites uas xaus qhov kev xeem khiav ntxov thaum muaj kev ua tsis tiav lossis yuam kev. Teem ib qho ntawm β€œ@testset kwarg failfast=true” lossis β€œexport JULIA_TEST_FAILFAST=true”. Qhov no yog qee zaum tsim nyog hauv CI khiav kom tau txais cov lus yuam kev ntxov.
  • Hnub tim: Cov hlua khoob tsis raug parsed li siv tau "DateTime", "Dates" los yog "Times" qhov tseem ceeb thiab es tsis txhob pov ib qho "ArgumentError" nyob rau hauv constructors thiab parsing, thaum "tryparse" rov tsis muaj dab tsi.
  • Package Distributed
    • Lub pob teeb tsa (kev ua haujlwm nquag, "LOAD_PATH", "DEPOT_PATH") yog tam sim no nthuav tawm thaum ntxiv cov txheej txheem neeg ua haujlwm hauv zos (xws li siv "addprocs(N::Int)" lossis siv cov kab hais kom ua "--procs=N").
    • "addprocs" rau cov txheej txheem neeg ua haujlwm hauv zos tam sim no lees txais qhov kev sib cav hu ua "env" kom dhau ib puag ncig hloov pauv mus rau cov txheej txheem ua haujlwm.
  • Unicode: "graphemes(s, m:n)" rov qab cov hlua ntawm mth mus rau nth graphemes hauv "s".
  • Cov pob DelimitedFiles tau raug tshem tawm los ntawm cov tsev qiv ntawv kaw lus thiab tam sim no tau muab faib ua cov pob cais uas yuav tsum tau muab tso ua ke kom siv tau.
  • Sab nraud dependencies
    • Hauv Linux, qhov version ntawm libstdc ++ system tsev qiv ntawv tau raug kuaj pom thiab, yog tias nws yog qhov tshiab, nws tau thauj khoom. Cov qub libstdc ++ built-in loading cwj pwm, tsis hais qhov system version, tuaj yeem rov qab los ntawm kev teeb tsa ib puag ncig hloov pauv "JULIA_PROBE_LIBSTDCXX=0".
    • Tshem tawm "RPATH" los ntawm julia binary, uas tuaj yeem tawg cov tsev qiv ntawv ntawm Linux uas tsis tau txhais qhov "RUNPATH" hloov pauv.
    • Cov cuab yeej txhim kho: Cov zis ntawm "MethodError" thiab cov txheej txheem (piv txwv li los ntawm "methods(my_func)") yog tam sim no formatted thiab xim raws li lub hauv paus ntsiab lus ntawm cov zis ntawm txoj kev nyob rau hauv ib pawg kab.

    Tau qhov twg los: opennet.ru

Ntxiv ib saib