Ծրագրավորման լեզուն Julia 1.9 հասանելի է

Հրապարակվել է Julia 1.9 ծրագրավորման լեզվի թողարկումը, որը համատեղում է այնպիսի որակներ, ինչպիսիք են բարձր կատարողականությունը, դինամիկ մուտքագրման աջակցությունը և զուգահեռ ծրագրավորման ներկառուցված գործիքները: Ջուլիայի շարահյուսությունը մոտ է MATLAB-ին՝ որոշ տարրեր փոխառելով Ruby-ից և Lisp-ից։ Լարի մանիպուլյացիայի մեթոդը հիշեցնում է Perl-ը։ Ծրագրի կոդը բաշխվում է MIT լիցենզիայի ներքո:

Լեզվի հիմնական հատկանիշները.

  • Բարձր կատարողականություն. նախագծի առանցքային նպատակներից է C ծրագրերին մոտ կատարման հասնելը: Julia կոմպիլյատորը հիմնված է LLVM նախագծի աշխատանքի վրա և ստեղծում է արդյունավետ տեղական մեքենայի կոդ բազմաթիվ թիրախային հարթակների համար.
  • Աջակցում է ծրագրավորման տարբեր պարադիգմների, ներառյալ օբյեկտի վրա հիմնված և ֆունկցիոնալ ծրագրավորման տարրերը: Ստանդարտ գրադարանը, ի թիվս այլ բաների, ապահովում է գործառույթներ ասինխրոն I/O-ի, գործընթացի վերահսկման, գրանցման, պրոֆիլավորման և փաթեթների կառավարման համար:
  • Դինամիկ մուտքագրում. լեզուն չի պահանջում փոփոխականների տեսակների հստակ սահմանում, ինչպես ծրագրավորման ծրագրավորման լեզուները: Աջակցված է ինտերակտիվ ռեժիմ;
  • Տեսակները հստակորեն նշելու կամընտիր ունակություն;
  • Շարահյուսություն, որն իդեալական է թվային հաշվարկների, գիտական ​​հաշվարկների, մեքենայական ուսուցման և տվյալների վիզուալիզացիայի համար: Աջակցություն բազմաթիվ թվային տվյալների տեսակների և գործիքների` հաշվարկների զուգահեռացման համար:
  • C գրադարաններից առանց լրացուցիչ շերտերի գործառույթներ ուղղակիորեն կանչելու հնարավորություն:

Հիմնական փոփոխություններ Julia 1.9-ում.

  • Լեզվի նոր առանձնահատկություններ
    • Թույլատրել առաջադրանքներ կատարել մեկ այլ մոդուլում՝ օգտագործելով «setproperty!(::Module, ::Symbol, x)»:
    • Թույլատրվում են մի քանի առաջադրանքներ, որոնք չեն գտնվում վերջնական դիրքում: Օրինակ, «a, b…, c = 1, 2, 3, 4» տողը կմշակվի որպես «a = 1; բ…, = 2, 3; c = 4" Սա կարգավորվում է Base.split_rest-ի միջոցով:
    • Մեկ նիշերի բառացիներն այժմ աջակցում են նույն շարահյուսությանը, ինչ տողային բառացիները. դրանք. Շարահյուսությունը կարող է ներկայացնել անվավեր UTF-8 հաջորդականություններ, ինչպես թույլատրվում է Char տեսակի կողմից:
    • Ավելացված է աջակցություն Unicode 15-ի ճշգրտման համար:
    • Tuples-ի և անվանված նիշերի բազմակի համակցությունները այժմ կարող են օգտագործվել որպես տիպի պարամետրեր:
    • Նոր ներկառուցված «getglobal(::Module, ::Symbol[, order])» և «setglobal!(::Module, ::Symbol, x[, order]) գործառույթները բացառապես գլոբալ փոփոխականների վրա կարդալու և գրելու համար: Getglobal մեթոդն այժմ պետք է նախընտրելի լինի գլոբալ փոփոխականներ մուտք գործելու համար getfield մեթոդից:
  • Լեզվի փոփոխություններ
    • 1.7 տարբերակում ներկայացված «@invoke» մակրոն այժմ արտահանվել և հասանելի է օգտագործման համար: Բացի այդ, այն այժմ օգտագործում է «Core.Typeof(x)» մեթոդը, այլ ոչ թե «Any» այն դեպքում, երբ տիպի անոտացիան բաց է թողնված «x» արգումենտի համար: Սա անհրաժեշտ է ապահովելու, որ որպես արգումենտ փոխանցված տեսակները ճիշտ մշակվեն:
    • Միացված է «invokelatest» ֆունկցիայի և «@invokelatest» մակրոյի արտահանումը, որը ներկայացված է 1.7 տարբերակում:
  • Կազմողի/աշխատանքի բարելավումներ
    • Զգալիորեն կրճատվել է առաջին կատարման ժամանակը (TTFX - Առաջին կատարման ժամանակ): Փաթեթի նախնական կոմպիլյացիան այժմ պահում է բնիկ կոդը «pkgimage»-ում, ինչը նշանակում է, որ փաթեթը բեռնելուց հետո ստեղծած կոդը կարիք չի լինի նորից հավաքել: pkgimages ռեժիմի օգտագործումը կարելի է անջատել՝ օգտագործելով «--pkgimages=no» տարբերակը:
    • Տիպի եզրակացության քառակուսի բարդության հայտնի խնդիրը շտկվել է, և եզրակացությունն ընդհանուր առմամբ օգտագործում է ավելի քիչ հիշողություն: Որոշ եզրային պատյաններ ավտոմատ գեներացվող երկար ֆունկցիաներով (օրինակ՝ ModelingToolkit.jl՝ մասնակի դիֆերենցիալ հավասարումներով և մեծ պատճառահետևանքային մոդելներով) շատ ավելի արագ են հավաքվում։
    • Առանց կոնկրետ տեսակների փաստարկներով զանգերն այժմ կարող են օպտիմիզացված լինել միության բաժանման համար ներարկման կամ ստատիկ լուծման համար, նույնիսկ եթե կան մի քանի տարբեր տիպի թեկնածուներ ուղարկելու համար: Սա կարող է բարելավել աշխատանքը որոշակի իրավիճակներում, երբ օբյեկտների տեսակները լիովին ստատիկ կերպով չեն լուծվում՝ ստատիկ կերպով լուծելով «@nospecialize-d» զանգերի կայքերը և խուսափելով վերակոմպիլյացիայից:
    • Base մոդուլում @pure մակրոյի բոլոր կիրառությունները փոխարինվել են Base.@assume_effects-ով:
    • Զանգեր կանչելու համար (f, invokesig, args...) ավելի քիչ հատուկ տեսակներով, քան սովորաբար օգտագործվում է f(args...)-ի համար, այլևս չեն հանգեցնում փաթեթի վերակոմպիլյացիայի:
  • Փոփոխություններ հրամանի տողի ընտրանքներում
    • Linux-ում և Windows-ում «--threads=auto» տարբերակը այժմ փորձում է որոշել պրոցեսորների հասանելի թիվը՝ հիմնվելով պրոցեսորի հարաբերության վրա, որը սովորաբար տեղադրված է HPC և ամպային միջավայրերում:
    • «--math-mode=fast» պարամետրն անջատված է, որի փոխարեն խորհուրդ է տրվում օգտագործել «@fastmath» մակրոն, որն ունի հստակ սահմանված իմաստաբանություն։
    • «--threads» տարբերակն այժմ ունի «auto | N[,auto|M]», որտեղ M-ը ցույց է տալիս ստեղծվող ինտերակտիվ թելերի քանակը (ներկայումս ավտոմատ նշանակում է 1):
    • Ավելացվեց «—heap-size-hint=» տարբերակը », որը սահմանում է այն շեմը, որից հետո սկսվում է ակտիվ աղբահանությունը։ Չափը կարող է նշվել բայթերով, կիլոբայթներով (1000 ԿԲ), մեգաբայթերով (300 ՄԲ) կամ գիգաբայթերով (1,5 ԳԲ):
  • Փոփոխություններ բազմաշերտում
    • «Threads.@spawn»-ն այժմ ունի կամընտիր առաջին արգումենտ՝ «:default» կամ «:interactive» արժեքով: Ինտերակտիվ առաջադրանքը պահանջում է պատասխանի ցածր ուշացում և նախատեսված է կարճ լինելու կամ հաճախակի կատարելու համար: Ինտերակտիվ առաջադրանքները կաշխատեն ինտերակտիվ թելերով, եթե դրանք նշված են Julia-ն սկսելու ժամանակ:
    • Julia-ի գործարկման ժամանակից դուրս աշխատող շղթաները (օրինակ՝ C-ից կամ Java-ից) այժմ կարող են զանգահարել Julia կոդը՝ օգտագործելով «jl_adopt_thread»: Դա տեղի է ունենում ավտոմատ կերպով, երբ մուտքագրում եք Julia կոդը «cfunction» կամ «@callable» մուտքի կետի միջոցով: Որպես հետևանք, թելերի քանակը այժմ կարող է փոխվել կատարման ընթացքում:
  • Գրադարանի նոր գործառույթներ
    • Նոր գործառույթ «Iterators.flatmap»:
    • Նոր ֆունկցիա «pkgversion(m::Module)»՝ ստանալու փաթեթի տարբերակը, որը բեռնել է տվյալ մոդուլը, որը նման է «pkgdir(m::Module)»-ին։
    • Նոր «stack(x)» ֆունկցիան, որն ընդհանրացնում է «reduce(hcat, x::Vector{<:Vector})»-ը ցանկացած չափման և թույլ է տալիս կրկնվողների ցանկացած կրկնող: «stack(f, x)» մեթոդը ընդհանրացնում է «mapreduce(f, hcat, x)» և ավելի արդյունավետ:
    • Նոր մակրո՝ հատկացված հիշողության «@ հատկացումների» վերլուծության համար, որը նման է «@allocated»-ին, բացառությամբ, որ այն վերադարձնում է հիշողության հատկացումների քանակը, այլ ոչ թե հատկացված հիշողության ընդհանուր չափը:
  • Գրադարանի նոր առանձնահատկություններ
    • «RoundFromZero»-ն այժմ աշխատում է «BigFloat»-ից բացի այլ տեսակների համար:
    • «Dict»-ն այժմ կարող է ձեռքով կրճատվել «sizehint!»-ի միջոցով:
    • «@time»-ն այժմ առանձին նշում է անվավեր մեթոդների վերակոմպիլյացիայի վրա ծախսված ժամանակի տոկոսը:
  • Փոփոխություններ ստանդարտ գրադարանում
    • Ուղղվել է Dict-ի և այլ ածանցյալ օբյեկտների կրկնման մեթոդների համաժամանակության խնդիր, ինչպիսիք են keys(::Dict), արժեքները(::Dict) և Set: Այս կրկնման մեթոդներն այժմ կարող են կանչվել Dict-ի կամ Set-ի վրա զուգահեռ անսահմանափակ թվով շղթաների համար, քանի դեռ չկան գործողություններ, որոնք փոփոխում են բառարանը կամ հավաքածուն:
    • «!f» պրեդիկատ ֆունկցիայի ժխտումը այժմ վերադարձնում է «(!) ∘ f» կոմպոզիտային ֆունկցիան անանուն ֆունկցիայի փոխարեն:
    • Dimension slice ֆունկցիաներն այժմ աշխատում են մի քանի չափսերի վրա՝ «յուրաքանչյուր կտոր», «յուրաքանչյուր շարք» և «յուրաքանչյուր սոլ» վերադարձնում են «Կտոր» օբյեկտ, որը թույլ է տալիս ուղարկել ավելի արդյունավետ մեթոդներ:
    • Ավելացրել է «@kwdef» մակրո հանրային API-ին:
    • Շտկվել է «fld1»-ում գործողությունների հերթականության հետ կապված խնդիրը:
    • Տեսակավորումն այժմ միշտ ժամանակի կայուն է (QuickSort-ը վերանախագծվել է):
    • «Base.splat»-ն այժմ արտահանվում է։ Վերադարձվող արժեքը «Base.Splat» տիպն է, այլ ոչ թե անանուն ֆունկցիան, որը թույլ է տալիս այն լավ արտածել:
  • Փաթեթի կառավարիչ
    • «Փաթեթի ընդարձակումներ»: Աջակցություն Julia-ի նիստում բեռնված այլ փաթեթներից կոդի հատված բեռնելու համար: Հավելվածը նման է «Requires.jl» փաթեթին, սակայն աջակցվում է նախնական կազմման և կարգավորումների համատեղելիությունը:
  • Գծային հանրահաշիվ գրադարան
    • Տարրերի իմաստով բաժանման հետ շփոթվելու ռիսկի պատճառով հեռացվեցին «a/b» և «b\a» մեթոդները սկալյար «a» և «b» վեկտորով, որոնք համարժեք էին «a * pinv(b)»-ին:
    • BLAS և LAPACK զանգերն այժմ օգտագործում են «libblastrampoline (LBT)»: OpenBLAS-ը տրամադրվում է լռելյայն, սակայն համակարգի պատկերի կառուցումը այլ BLAS/LAPACK գրադարանների հետ չի ապահովվում: Փոխարենը, խորհուրդ է տրվում օգտագործել LBT մեխանիզմը՝ BLAS/LAPACK-ը գրադարանների մեկ այլ առկա հավաքածուով փոխարինելու համար:
    • «lu»-ն աջակցում է մատրիցային ռոտացիայի նոր ռազմավարություն՝ «RowNonZero()», որն ընտրում է առաջին ոչ զրոյական պտտման տարրը նոր թվաբանական տեսակների և ուսուցման նպատակներով օգտագործման համար:
    • «normalize(x, p=2)» այժմ աջակցում է ցանկացած նորմալացված վեկտորային տարածություն «x», ներառյալ սկալերները:
    • BLAS թելերի լռելյայն թիվն այժմ հավասար է ARM ճարտարապետությունների վրա պրոցեսորի թելերի թվին և այլ ճարտարապետությունների վրա պրոցեսորի թելերի թվի կեսին:
  • Printf. Վերամշակված սխալ հաղորդագրություններ սխալ ձևաչափված տողերի համար՝ ավելի լավ ընթեռնելիության համար:
  • Պրոֆիլ. Նոր գործառույթ «Profile.take_heap_snapshot(file)», որը գրում է ֆայլ JSON-ի վրա հիմնված «.heapsnapshot» ձևաչափով, որն աջակցվում է Chrome-ում:
  • Պատահական. randn-ը և randexp-ն այժմ աշխատում են ցանկացած AbstractFloat տեսակի համար, որը սահմանում է rand-ը:
  • ՊԱՏՐԱՍՏԵԼ
    • Սեղմելով «Alt-e» ստեղների համակցությունը այժմ բացվում է ընթացիկ մուտքագրումը խմբագրում: Բովանդակությունը (եթե փոփոխված է) կկատարվի խմբագրից դուրս գալուց հետո:
    • REPL-ում ակտիվ մոդուլի ընթացիկ համատեքստը կարող է փոխվել (հիմնականը լռելյայն) օգտագործելով «REPL.activate(::Module)» ֆունկցիան կամ մուտքագրելով մոդուլը REPL-ում և սեղմելով «Alt-m» ստեղնաշարի համակցությունը:
    • «Համարակալված հուշում» ռեժիմը, որը տպում է թվեր յուրաքանչյուր մուտքի և ելքի համար և պահպանում է ստացված արդյունքները Out-ում, կարելի է ակտիվացնել «REPL.numbered_prompt!()»-ի միջոցով:
    • Ներդիրի լրացումը ցուցադրում է բանալի բառի առկա փաստարկները:
  • SuiteSparse. «SuiteSparse» լուծիչի կոդը տեղափոխվեց «SparseArrays.jl»: Լուծիչներն այժմ վերաարտահանվում են «SuiteSparse.jl»-ի կողմից:
  • SparseArrays
    • «SuiteSparse» լուծիչները այժմ հասանելի են որպես «SparseArrays» ենթամոդուլներ:
    • UMFPACK և CHOLMOD թելերի պաշտպանության ռեժիմները բարելավվել են՝ վերացնելով գլոբալ փոփոխականները և օգտագործելով կողպեքներ: Բազմաթելային «ldiv! UMFPACK օբյեկտներն այժմ կարող են ապահով կերպով գործարկվել:
    • «SparseArrays.allowscalar(::Bool)» փորձարարական ֆունկցիան թույլ է տալիս անջատել կամ միացնել նոսր զանգվածների սկալային ինդեքսավորումը: Այս ֆունկցիան նախատեսված է «SparseMatrixCSC» օբյեկտների պատահական սկալային ինդեքսավորումը հայտնաբերելու համար, որը կատարողական խնդիրների ընդհանուր աղբյուր է:
  • Անվտանգության նոր ռեժիմ թեստային փաթեթների համար, որը վաղաժամկետ դադարեցնում է փորձնական աշխատանքը ձախողման կամ սխալի դեպքում: Սահմանեք կամ «@testset kwarg failfast=true» կամ «արտահանել JULIA_TEST_FAILFAST=true» միջոցով: Սա երբեմն անհրաժեշտ է CI գործարկումներում՝ սխալի հաղորդագրություններ վաղաժամ ստանալու համար:
  • Ամսաթվեր. դատարկ տողերն այլևս սխալ չեն վերլուծվում որպես վավեր «DateTime», «Dates» կամ «Times» արժեքներ և փոխարենը գցում են «ArgumentError» կոնստրուկտորներում և վերլուծում, մինչդեռ «tryparse»-ը ոչինչ չի վերադարձնում:
  • Փաթեթը բաժանված է
    • Փաթեթի կազմաձևումը (ակտիվ նախագիծ, «LOAD_PATH», «DEPOT_PATH») այժմ տարածվում է տեղական աշխատանքային գործընթացներ ավելացնելիս (օրինակ՝ օգտագործելով «addprocs(N::Int)» կամ օգտագործելով հրամանի տող «--procs=N» դրոշը):
    • «addprocs»-ը տեղական աշխատանքային գործընթացների համար այժմ ընդունում է «env» անունով արգումենտ՝ աշխատանքային գործընթացներին շրջակա միջավայրի փոփոխականները փոխանցելու համար:
  • Յունիկոդ. «graphemes(s, m:n)»-ը վերադարձնում է «s»-ի mth-ից n-րդ գրաֆեմների ենթատողը:
  • DelimitedFiles փաթեթը հեռացվել է համակարգի գրադարաններից և այժմ բաշխվում է որպես առանձին փաթեթ, որը պետք է հստակորեն տեղադրվի՝ օգտագործելու համար:
  • Արտաքին կախվածություններ
    • Linux-ում libstdc++ համակարգի գրադարանի տարբերակը ինքնաբերաբար հայտնաբերվում է և, եթե այն ավելի նոր է, բեռնվում է։ Հին libstdc++ ներկառուցված բեռնման վարքագիծը, անկախ համակարգի տարբերակից, կարող է վերականգնվել՝ սահմանելով «JULIA_PROBE_LIBSTDCXX=0» միջավայրի փոփոխականը:
    • Ջուլիա երկուականից հեռացվեց «RPATH»-ը, որը կարող է կոտրել Linux-ի գրադարանները, որոնք չեն կարողանում սահմանել «RUNPATH» փոփոխականը:
    • Գործիքների բարելավումներ. «MethodError»-ի և մեթոդների ելքը (օրինակ՝ «methods(my_func)»-ից) այժմ ձևավորվում և գունավորվում է ստեկ-հետքի մեջ մեթոդների թողարկման սկզբունքին համապատասխան:

    Source: opennet.ru

Добавить комментарий