Zimanê bernamekirinê Julia 1.9 heye

Serbestberdana zimanê bernamekirinê Julia 1.9 hate weşandin, ku taybetmendiyên wekî performansa bilind, piştgirî ji bo tîpkirina dînamîk û amûrên çêkirî yên ji bo bernamesaziya paralel pêk tîne. Hevoksaziya Julia nêzî MATLAB-ê ye, hin hêmanan ji Ruby û Lisp deyn dike. Rêbaza manîpulasyona string Perl tîne bîra xwe. Koda projeyê di bin lîsansa MITê de tê belavkirin.

Taybetmendiyên sereke yên ziman:

  • Performansa bilind: yek ji armancên sereke yên projeyê bidestxistina performansa nêzî bernameyên C ye. Berhevkarê Julia li ser bingeha xebata projeya LLVM-ê ye û ji bo gelek platformên armanc koda makîneya xweya bikêr çêdike;
  • Paradîgmayên cihêreng ên bernamekirinê piştgirî dike, di nav de hêmanên bernameya objekt-oriented û fonksiyonel. Pirtûkxaneya standard, di nav tiştên din de, fonksiyonên ji bo I/O asynchronous, kontrolkirina pêvajoyê, têketin, profîlkirin, û rêveberiya pakêtê peyda dike;
  • Tîpkirina dînamîk: ziman ji bo guherbaran pênasekirina eşkere ya celeban hewce nake, mîna zimanên bernamesaziya nivîsandinê. Moda înteraktîf piştgirî kirin;
  • Kapasîteya vebijarkî ku bi eşkere cûreyan diyar bike;
  • Hevoksaziyek îdeal ji bo hesabkirina hejmarî, hesabkirina zanistî, fêrbûna makîneyê, û dîtbariya daneyê. Piştgiriya gelek celebên daneyên hejmarî û amûrên ji bo paralelkirina hesaban.
  • Kapasîteya ku rasterast bangî fonksiyonan ji pirtûkxaneyên C-yê bêyî qatên zêde bike.

Guhertinên sereke di Julia 1.9 de:

  • Taybetmendiyên zimanê nû
    • Destûrê bide ku peywiran di modulek din de bi karanîna "setproperty!(::Module, ::Symbol, x)" de bêne çêkirin.
    • Pir peywirên ne di pozîsyona dawîn de têne destûr kirin. Mînakî, rêzika "a, b…, c = 1, 2, 3, 4" dê wekî "a = 1; b…, = 2, 3; c = 4". Ev ji hêla Base.split_rest ve tê rêve kirin.
    • Naha tîpên yek tîpî heman hevoksaziyê wekî tîpên rêzikan piştgirî dikin; ewan. Hevoksazî dikare rêzikên UTF-8 nederbasdar temsîl bike, wekî ku ji hêla celebê Char ve hatî destûr kirin.
    • Piştgiriya ji bo taybetmendiya Unicode 15 zêde kir.
    • Kombîneyên hêlînkirî yên tîpan û tîpên karakterên binavkirî naha dikarin wekî pîvanên celebê werin bikar anîn.
    • Fonksiyonên nû yên çêkirî "getglobal(::Module, ::Symbol[, order])" û "setglobal!(::Module, ::Symbol, x[, order])" ji bo xwendin û nivîsandina tenê ji guhêrbarên gerdûnî re. Ji bo gihîştina guhêrbarên gerdûnî divê êdî rêbaza getglobal li ser rêbaza getfield were tercîh kirin.
  • Guhertinên di zimên de
    • Makroya "@invoke" ya ku di guhertoya 1.7-ê de hatî destnîşan kirin naha tête derxistin û ji bo karanîna peyda dibe. Wekî din, ew naha rêbaza "Core.Typeof(x)" li şûna "Her" bikar tîne di doza ku ji bo argumana "x" annotasyona tîpê tê derxistin. Ev pêdivî ye ku pê ewle bibe ku celebên ku wekî arguman têne derbas kirin rast têne hilberandin.
    • Hinardekirina fonksiyona "invokelatest" û makroya "@invokelatest", ku di guhertoya 1.7 de hatî destnîşan kirin çalak kir.
  • Berhevkar / çêtirkirinên dema xebitandinê
    • Dema darvekirina yekem bi girîngî kêm kir (TTFX - Dema darvekirina yekem). Berhevkirina pakêtekê nuha koda xwemalî di "pkgimage" de hilîne, tê vê wateyê ku koda ku ji hêla pêvajoya pêş-berhevkirinê ve hatî çêkirin dê piştî barkirina pakêtê ji nû ve neyê berhev kirin. Bikaranîna moda pkgimages dikare bi karanîna vebijarka "--pkgimages=no" were asteng kirin.
    • Pirsgirêka tevliheviya çargoşe ya naskirî ya encamdana celebê hate rast kirin, û encam bi tevahî bîranîna kêmtir bikar tîne. Hin dozên qerax ên bi fonksiyonên dirêj ên bixweber têne hilberandin (wek ModelingToolkit.jl bi hevkêşeyên cudahiya qismî û modelên sedemî yên mezin) pir zûtir têne berhev kirin.
    • Bangên bi argumanên bêyî celebên konkret naha dikarin ji bo derzîlêdanê an çareseriya statîk veqetandina Yekîtiyê xweşbîn bibin, hetta heke ji bo şandinê gelek berendamên cûrbecûr hebin. Ev dikare performansê di hin rewşan de çêtir bike ku celebên tiştan bi tevahî statîk nayên çareser kirin, bi statîkî çareserkirina malperên banga "@nospecialize-d" û dûrxistina ji nû ve berhevkirinê.
    • Hemî karanîna makroya @pure di modula Base de bi Base.@assume_effects hatine guheztin.
    • Bangên bangkirina (f, invokesig, args...) bi cûreyên taybetî yên kêmtir ji yên ku ji bo f(args...) têne bikar anîn êdî nahêlin ku pakêt ji nû ve were berhev kirin.
  • Guhertinên Vebijarkên Rêzika Fermandariyê
    • Li Linux û Windows-ê, vebijarka "--threads=auto" naha hewl dide ku hejmara berdest a pêvajoyan li ser bingeha girêdana CPU-yê diyar bike, maskek ku bi gelemperî li hawîrdorên HPC û ewr tê danîn.
    • Parametra "--math-mode=fast" neçalak e, li şûna wê tê pêşniyar kirin ku makroya "@fastmath" bikar bînin, ku bi zelalî semantîk diyar kiriye.
    • Vebijarka "--threads" niha di forma "oto | N[,auto|M]", ku M jimara têlên înteraktîf ên ku têne çêkirin nîşan dide (niha bixwe tê wateya 1).
    • Vebijarka "-heap-size-hint=" zêde kir. ", ku bendek piştî ku berhevkirina çopê çalak dest pê dike destnîşan dike. Mezinahî dikare bi bytes, kilobytes (1000 KB), megabytes (300 MB) an gigabytes (1,5 GB) were destnîşankirin.
  • Guhertinên di multithreading
    • "Threads.@spawn" nuha argumanek yekem a vebijarkî bi nirxa ":default" an ":înteraktîf" heye. Karûbarek înteraktîf derengiya bersivê ya kêm hewce dike û ji bo ku kurt be an bi gelemperî tête çêkirin tête çêkirin. Karên înteraktîf dê li ser mijarên înteraktîf bimeşin ger dema ku Julia dest pê bikin ew bêne destnîşan kirin.
    • Mijarên ku li derveyî dema xebitandina Julia dimeşin (wek ji C an Java) naha dikarin koda Julia bi karanîna "jl_adopt_thread" bang bikin. Dema ku koda Julia bi navgîniya "cfunction" an xala têketina "@ccallable" têkevin ev bixweber çêdibe. Wekî encamek, hejmara têlan naha dikare di dema darvekirinê de biguhezîne.
  • Fonksiyonên pirtûkxaneya nû
    • Fonksiyona nû "Iterators.flatmap".
    • Fonksiyona nû "pkgversion(m::Module)" ji bo bidestxistina guhertoya pakêta ku modulek diyarkirî, mîna "pkgdir(m::Module)" bar kiriye.
    • Fonksiyona nû "stack(x)" ya ku "reduce(hcat, x::Vector{<:Vector})" li her pîvanê giştî dike û destûrê dide her îteratorên îteratoran. Rêbaza "stack(f, x)" "mapreduce(f, hcat, x)" giştî dike û bikêrtir e.
    • Makroya nû ya ji bo analîzkirina bîranîna veqetandî "@ veqetandin", dişibihe "@ veqetandin", ji bilî ku ew ji bilî mezinahiya giştî ya bîranîna veqetandî, jimara veqetandinên bîranînê vedigerîne.
  • Taybetmendiyên nû yên pirtûkxaneyê
    • "RoundFromZero" naha ji bilî "BigFloat" ji bo celebên din dixebite.
    • "Dict" nuha dikare bi karanîna "sizehint!"
    • "@time" naha ji hev cuda rêjeya dema ku ji nû ve berhevkirina rêbazên nederbasdar derbas kiriye diyar dike.
  • Guhertinên pirtûkxaneya standard
    • Pirsgirêka hevdemiyê di rêbazên dubarekirinê de ji bo Dict û tiştên din ên jêderkirî yên wekî keys(::Dict), nirx(::Dict) û Set rast kir. Van rêbazên dubarekirinê naha dikarin li ser Dîkt an Set paralelî ji bo hejmarek bêsînor ji mijaran werin gazî kirin, heya ku kiryarên ku ferheng an setê biguherînin tune ne.
    • Nekarkirina fonksiyona pêvekî ya "!f" niha li şûna fonksiyonek nenas fonksiyonek pêkhatî "(!) ∘ f" vedigerîne.
    • Fonksiyonên perçeya dimensionê naha li ser gelek pîvanan dixebitin: "her perçek", "her yek" û "her yek" tiştek "Slices" vedigerînin ku destûrê dide şandinê da ku rêbazên bikêrtir peyda bike.
    • Makroya "@kwdef" li API-ya gelemperî zêde kir.
    • Pirsgirêkek bi rêza operasyonan di "fld1" de rast kir.
    • Rêzkirin naha her gav-demjimêr e (QuickSort ji nû ve hatî sêwirandin).
    • "Base.splat" niha tê îxrackirin. Nirxa vegerê li şûna fonksiyonek nenas celebek "Base.Splat" e, ku dihêle ku ew bi rengek xweş were derxistin.
  • Rêveberê pakêtê
    • "Pêvekirinên Pakêtê": Piştgiriya ji bo barkirina perçeyek kodê ji pakêtên din ên ku di danişîna Julia de hatine barkirin. Serlêdan dişibihe pakêta "Requires.jl" ye, lê hevahengiya pêş-berhevkirin û mîhengan piştgirî dike.
  • Pirtûkxaneya LinearAlgebra
    • Ji ber metirsiya tevlihevbûna bi dabeşkirina hêmanan, rêbazên "a/b" û "b\a" yên bi "a" û vektora "b" yên scalar, ku bi "a * pinv(b)" re hevwate bûn, rakirin.
    • Banga BLAS û LAPACK naha "libblastrampoline (LBT)" bikar tîne. OpenBLAS ji hêla xwerû ve tê peyda kirin, lê avakirina wêneya pergalê bi pirtûkxaneyên din ên BLAS/LAPACK re nayê piştgirî kirin. Di şûna wê de, tê pêşniyar kirin ku mekanîzmaya LBT bikar bînin da ku BLAS / LAPACK bi komek pirtûkxaneyên heyî yên din re biguhezînin.
    • "lu" stratejiyek zivirîna matrixê ya nû, "RowNonZero()" piştgirî dike, ku yekem hêmana zivirandina ne-sifir ji bo karanîna bi celebên nû yên jimarî û ji bo mebestên perwerdehiyê hildibijêre.
    • "normalize(x, p=2)" naha her cîhê vektora normalkirî "x" piştgirî dike, di nav de scalars.
    • Hejmara xwerû ya têlên BLAS naha bi hejmara têlên CPU-yê yên li ser mîmariyên ARM-ê û nîvê hêjmara mijarên CPU-yê li ser mîmariyên din wekhev e.
  • Printf: Peyamên çewtiyê ji bo rêzikên ku bi xeletî hatine formatkirin ji bo xwendina çêtir ji nû ve hatine xebitandin.
  • Profîl: Fonksiyona nû "Profile.take_heap_snapshot(pel)", ku pelek bi formata ".heapsnapshot" ya JSON-ya ku di Chrome-ê de piştgirî tê piştgirî kirin dinivîse.
  • Random: randn û randexp naha ji bo her celebek AbstractFloat ku rand diyar dike dixebitin.
  • BPLXWNE
    • Zêdekirina bişkojka "Alt-e" naha têketina heyî di edîtorê de vedike. Dema ku hûn ji edîtorê derkevin dê naverok (heke were guheztin) were darve kirin.
    • Modula heyî ya ku di REPL-ê de çalak e dikare were guheztin (Ji hêla xwerû ve sereke) bi karanîna fonksiyona "REPL.activate(::Module)" an jî bi têketina modulê di REPL-ê de û pêlhevkirina bişkojka "Alt-m" were guheztin.
    • Moda "lêgerîna bi jimare" ya ku ji bo her ketin û derketinê jimareyan çap dike û encamên xalîkirî di Out de hilîne, dikare bi karanîna "REPL.numbered_prompt!()" were aktîfkirin.
    • Temamkirina tabloyê argûmanên peyva sereke nîşan dide.
  • SuiteSparse: Koda ji bo çareserkerê "SuiteSparse" veguhest "SparseArrays.jl". Naha çareserker ji hêla "SuiteSparse.jl" ve ji nû ve têne derxistin.
  • SparseArrays
    • Vebijêrkên "SuiteSparse" naha wekî jêrmodulên "SparseArrays" hene.
    • Modên parastinê yên UMFPACK û CHOLMOD bi rakirina guhêrbarên gerdûnî û karanîna qefleyan çêtir bûne. "ldiv!" Tiştên UMFPACK naha dikarin bi ewlehî bêne darve kirin.
    • Fonksiyona ceribandî "SparseArrays.allowscalar(::Bool)" destûrê dide te ku hûn îndekskirina scalar a rêzikên kêm neçalak bikin an çalak bikin. Ev fonksiyona ji bo tespîtkirina îndekskirina scalar a rasthatî ya tiştên "SparseMatrixCSC" hatî çêkirin, ku çavkaniyek hevpar a pirsgirêkên performansê ye.
  • Moda nû ya têkçûn ji bo komikên ceribandinê yên ku di bûyera têkçûn an xeletiyekê de ceribandinek zû diqede. Bi "@testset kwarg failfast=true" an jî "JULIA_TEST_FAILFAST=rast derxîne" saz bike. Ev carinan di rêwiyên CI de hewce ye ku zû peyamên xeletiyê bistînin.
  • Dîrok: Rêzên vala êdî wekî nirxên derbasdar "DateTime", "Date" an "Times" bi xeletî nayên pars kirin û li şûna wê "ArgumentError" di çêker û parskirinê de derdixin, dema ku "tryparse" tiştek venagerîne.
  • Package Distributed
    • Veavakirina pakêtê (projeya çalak, "LOAD_PATH", "DEPOT_PATH") naha dema ku pêvajoyên xebatkarên herêmî lê zêde dikin (mînak. "addprocs(N::Int)" an jî ala rêzika fermanê "--procs=N" bikar tînin tê belav kirin.
    • "addprocs" ji bo pêvajoyên xebatkarên herêmî naha argumanek bi navê "env" qebûl dike ku guhêrbarên jîngehê ji pêvajoyên karker re derbas bike.
  • Unicode: "graphemes(s, m:n)" di "s" de binerêzê ji grafemên mth vedigerîne n-an.
  • Pakêta DelimitedFiles ji pirtûkxaneyên pergalê hate rakirin û naha wekî pakêtek veqetandî ya ku divê bi eşkereyî were saz kirin ku were bikar anîn tê belav kirin.
  • Girêdanên derve
    • Di Linux-ê de, guhertoya pirtûkxaneya pergalê libstdc++ bixweber tê tespît kirin û, heke nûtir be, tê barkirin. Tevgera barkirinê ya libstdc++ ya kevn, bêyî ku guhertoya pergalê hebe, bi danîna guhêrbara jîngehê "JULIA_PROBE_LIBSTDCXX=0" dikare were vegerandin.
    • "RPATH" ji binarya julia hat rakirin, ku dikare pirtûkxaneyên li Linux-ê yên ku guhêrbar "RUNPATH" diyar nakin bişkîne.
    • Pêşveçûnên amûran: Derketina "Rêbaz Error" û rêbazan (mînak ji "rêbazan(my_func)") naha li gorî prensîba derketinê ya rêbazan di şopek stêrk de tê formatkirin û rengîn.

    Source: opennet.ru

Add a comment