Julia 1.9 бағдарламалау тілі қол жетімді

Жоғары өнімділік, динамикалық теруді қолдау және параллельді бағдарламалауға арналған кіріктірілген құралдар сияқты қасиеттерді біріктіретін Julia 1.9 бағдарламалау тілінің шығарылымы жарияланды. Юлияның синтаксисі MATLAB-қа жақын, Ruby және Lisp-тен кейбір элементтерді алады. Жолды манипуляциялау әдісі Perl тілін еске түсіреді. Жоба коды MIT лицензиясы бойынша таратылады.

Тілдің негізгі белгілері:

  • Жоғары өнімділік: жобаның негізгі мақсаттарының бірі C бағдарламаларына жақын өнімділікке қол жеткізу болып табылады. Julia компиляторы LLVM жобасының жұмысына негізделген және көптеген мақсатты платформалар үшін тиімді жергілікті машина кодын жасайды;
  • Әртүрлі бағдарламалау парадигмаларын, соның ішінде объектіге бағытталған және функционалды бағдарламалау элементтерін қолдайды. Стандартты кітапхана, басқалармен қатар, асинхронды енгізу/шығару, процесті басқару, журналды тіркеу, профильдеу және буманы басқару функцияларын қамтамасыз етеді;
  • Динамикалық теру: тіл сценарийлік бағдарламалау тілдеріне ұқсас айнымалылар түрлерін нақты анықтауды қажет етпейді. Интерактивті режимге қолдау көрсетіледі;
  • Түрлерді нақты көрсетудің қосымша мүмкіндігі;
  • Сандық есептеулер, ғылыми есептеулер, машиналық оқыту және деректерді визуализациялау үшін тамаша синтаксис. Көптеген сандық деректер түрлерін және есептеулерді параллельдеу құралдарын қолдау.
  • Қосымша қабаттарсыз C кітапханаларынан функцияларды тікелей шақыру мүмкіндігі.

Джулия 1.9-дағы негізгі өзгерістер:

  • Жаңа тіл мүмкіндіктері
    • "setproperty!(::Module, ::Symbol, x)" арқылы басқа модульде тапсырмаларды орындауға рұқсат беріңіз.
    • Соңғы позицияда емес бірнеше тапсырмаларға рұқсат етіледі. Мысалы, “a, b…, c = 1, 2, 3, 4” жолы “a = 1; b…, = 2, 3; c = 4". Бұл Base.split_rest арқылы өңделеді.
    • Бір таңбалы литералдар енді жол литералдарымен бірдей синтаксисті қолдайды; анау. Синтаксис Char түрі рұқсат етілгендей жарамсыз UTF-8 ретін көрсете алады.
    • Юникод 15 спецификациясына қолдау қосылды.
    • Кортеждердің кірістірілген комбинациялары және аталған таңбалар кортеждері енді түр параметрлері ретінде пайдаланылуы мүмкін.
    • Жаһандық айнымалы мәндерге ғана оқуға және жазуға арналған "getglobal(::Module, ::Symbol[, order])" және "setglobal!(::Module, ::Symbol, x[, order])" жаңа кірістірілген функциялар. Жаһандық айнымалыларға қол жеткізу үшін getglobal әдісі енді getfield әдісіне артықшылық беруі керек.
  • Тілдегі өзгерістер
    • 1.7 нұсқасында енгізілген "@invoke" макросы енді экспортталады және пайдалануға қолжетімді. Оған қоса, ол енді "x" аргументі үшін түр аннотациясы түсірілген жағдайда "Кез келген" орнына "Core.Typeof(x)" әдісін пайдаланады. Бұл аргументтер ретінде берілген түрлердің дұрыс өңделуін қамтамасыз ету үшін қажет.
    • 1.7 нұсқасында енгізілген "invokelatest" функциясы мен "@invokelatest" макросының экспорты қосылған.
  • Компилятор/орындау уақытын жақсарту
    • Бірінші орындауға дейін айтарлықтай қысқартылған уақыт (TTFX - бірінші орындалу уақыты). Буманы алдын ала құрастыру енді жергілікті кодты "pkgimage" ішінде сақтайды, яғни алдын ала құрастыру процесі арқылы жасалған код бума жүктелгеннен кейін қайта құрастыруды қажет етпейді. pkgimages режимін пайдалануды "--pkgimages=no" опциясы арқылы өшіруге болады.
    • Қорытынды түрдегі белгілі квадраттық күрделілік мәселесі түзетілді және қорытынды жалпы жадты аз пайдаланады. Автоматты түрде жасалған ұзын функциялары бар кейбір шеткі жағдайлар (мысалы, ішінара дифференциалдық теңдеулері бар ModelingToolkit.jl және үлкен себептік модельдер) әлдеқайда жылдамырақ құрастырылады.
    • Нақты түрлері жоқ аргументтері бар қоңыраулар енді жіберуге бірнеше түрлі үлгідегі үміткерлер болса да, енгізу немесе статикалық ажыратымдылық үшін Одақтың бөлінуі оңтайландырылған болуы мүмкін. Бұл "@nospecialize-d" қоңырау тораптарын статикалық түрде шешу және қайта құрастыруды болдырмау арқылы нысан түрлері толығымен статикалық түрде шешілмеген белгілі бір жағдайларда өнімділікті жақсартады.
    • Негізгі модульдегі @pure макростың барлық пайдаланулары Base.@assume_effects дегенмен ауыстырылды.
    • Әдетте f(args...) үшін пайдаланылатыннан ерекше түрлері азырақ (f, invokesig, args...) шақыруға шақырулар бұдан былай буманы қайта құрастыруға себеп болмайды.
  • Пәрмен жолы параметрлеріне өзгертулер
    • Linux және Windows жүйелерінде "--threads=auto" опциясы енді CPU ұқсастығына негізделген процессорлардың қолжетімді санын анықтауға тырысады, әдетте HPC және бұлттық орталарда орнатылған маска.
    • “--math-mode=fast” параметрі өшірілген, оның орнына семантикасы анық анықталған “@fastmath” макросын пайдалану ұсынылады.
    • "--threads" опциясы енді "auto |" пішімінде N[,auto|M]", мұнда M құрылатын интерактивті ағындардың санын көрсетеді (қазіргі уақытта auto 1 дегенді білдіреді).
    • «—heap-size-hint =» опциясы қосылды ", ол белсенді қоқыс жинау басталатын шекті белгілейді. Өлшемді байтпен, килобайтпен (1000 КБ), мегабайтпен (300 МБ) немесе гигабайтпен (1,5 ГБ) көрсетуге болады.
  • Көп ағындыдағы өзгерістер
    • "Threads.@spawn" енді ":default" немесе ":interactive" мәні бар қосымша бірінші аргументке ие. Интерактивті тапсырма төмен жауап кідірісін талап етеді және қысқа немесе жиі орындалатын етіп жасалған. Интерактивті тапсырмалар Julia іске қосылған кезде көрсетілсе, интерактивті ағындарда орындалады.
    • Julia орындау уақытынан тыс жұмыс істейтін ағындар (мысалы, C немесе Java) енді Julia кодын "jl_adopt_thread" арқылы шақыра алады. Бұл Julia кодын "cfunction" немесе "@ccallable" кіру нүктесі арқылы енгізген кезде автоматты түрде орын алады. Нәтижесінде, ағындар саны енді орындау кезінде өзгеруі мүмкін.
  • Жаңа кітапхана функциялары
    • Жаңа функция "Iterators.flatmap".
    • Жаңа функция "pkgdir(m::Module)" сияқты берілген модульді жүктеген бума нұсқасын алу үшін "pkgversion(m::Module)".
    • "reduce(hcat, x::Vector{<:Vector})" параметрін кез келген өлшемге жалпылайтын және итераторлардың кез келген иераторына мүмкіндік беретін жаңа "стек(x)" функциясы. «Стек(f, x)» әдісі «mapreduce(f, hcat, x)» жалпылайды және тиімдірек.
    • Бөлінген жадты талдауға арналған жаңа макрос "@бөлінді", "@бөлінді" дегенге ұқсас, ол бөлінген жадтың жалпы өлшемін емес, жадтың бөлінулерінің санын қайтарады.
  • Жаңа кітапхана мүмкіндіктері
    • "RoundFromZero" енді "BigFloat" түрінен басқа түрлер үшін жұмыс істейді.
    • «Dict» енді «sizehint!» арқылы қолмен қысқартылуы мүмкін.
    • "@time" енді жарамсыз әдістерді қайта құрастыруға жұмсалған уақыттың пайызын бөлек көрсетеді.
  • Стандартты кітапханаға өзгертулер
    • Dict және кілттер(::Dict), мәндер(::Dict) және Set сияқты басқа туынды нысандар үшін итерация әдістеріндегі параллельдік мәселесі түзетілді. Бұл итерация әдістерін енді сөздікті немесе жиынды өзгертетін әрекеттер болмаса, ағындардың шексіз саны үшін Dict немесе Set қатарында шақыруға болады.
    • "!f" предикат функциясын жоққа шығару енді анонимді функцияның орнына "(!) ∘ f" құрама функциясын қайтарады.
    • Өлшем тілімінің функциялары енді бірнеше өлшемдер бойынша жұмыс істейді: "əрбір тілім", "əрбір" жəне "əрбір" тиімді əдістерді қамтамасыз ету үшін жіберуге мүмкіндік беретін "Білімдер" нысанын қайтарады.
    • Жалпы API интерфейсіне "@kwdef" макросы қосылды.
    • "fld1" ішіндегі әрекеттер ретіне қатысты мәселе түзетілді.
    • Сұрыптау енді әрқашан уақыт бойынша тұрақты (QuickSort қайта өңделген).
    • "Base.splat" енді экспортталады. Қайтару мәні анонимді функциядан гөрі "Base.Splat" түрі болып табылады, бұл оны жақсы шығаруға мүмкіндік береді.
  • Пакет менеджері
    • "Пакет кеңейтімдері": Julia сеансында жүктелген басқа бумалардан код үзіндісін жүктеуге қолдау көрсету. Қолданба "Requires.jl" бумасына ұқсас, бірақ алдын ала құрастыру және параметрлер үйлесімділігіне қолдау көрсетіледі.
  • Сызықтық алгебра кітапханасы
    • Элемент бойынша бөлумен шатасу қаупіне байланысты, «a * pinv(b)» эквивалентті «a» скаляры және «b» векторы бар «a/b» және «b\a» әдістері алынып тасталды.
    • BLAS және LAPACK қоңыраулары енді «libblastrampoline (LBT)» қолданылады. OpenBLAS әдепкі бойынша қамтамасыз етілген, бірақ жүйе кескінін басқа BLAS/LAPACK кітапханаларымен құруға қолдау көрсетілмейді. Оның орнына, BLAS/LAPACK басқа кітапханалар жиынтығымен ауыстыру үшін LBT механизмін пайдалану ұсынылады.
    • "lu" жаңа арифметика түрлерімен және оқыту мақсаттарында пайдалану үшін нөлден басқа бірінші айналдыру элементін таңдайтын "RowNonZero()" жаңа матрицаны айналдыру стратегиясын қолдайды.
    • "normalize(x, p=2)" енді кез келген нормаланған векторлық кеңістік "x", соның ішінде скалярларды қолдайды.
    • BLAS ағындарының әдепкі саны енді ARM архитектураларындағы CPU ағындарының санына және басқа архитектуралардағы CPU ағындарының жарты санына тең.
  • Printf: Жақсырақ оқылу үшін қате пішімделген жолдар үшін қайта өңделген қате туралы хабарлар.
  • Профиль: Chrome жүйесінде қолдау көрсетілетін JSON негізіндегі ".heapsnapshot" пішімінде файл жазатын "Profile.take_heap_snapshot(file)" жаңа функциясы.
  • Кездейсоқ: randn және randexp енді rand мәнін анықтайтын кез келген AbstractFloat түрі үшін жұмыс істейді.
  • ҚАЙТАЛАУ
    • «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" немесе "export 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" ішіндегі m-ден n-ші графемаларға дейінгі ішкі жолды қайтарады.
  • DelimitedFiles бумасы жүйелік кітапханалардан жойылды және енді пайдалану үшін анық орнатылуы керек бөлек бума ретінде таратылды.
  • Сыртқы тәуелділіктер
    • Linux жүйесінде libstdc++ жүйелік кітапханасының нұсқасы автоматты түрде анықталады және ол жаңарақ болса, ол жүктеледі. Ескі libstdc++ кірістірілген жүктеу әрекетін, жүйе нұсқасына қарамастан, "JULIA_PROBE_LIBSTDCXX=0" айнымалы ортасын орнату арқылы қалпына келтіруге болады.
    • "RUNPATH" айнымалы мәнін анықтай алмайтын Linux жүйесіндегі кітапханаларды бұзуы мүмкін julia екілік файлынан "RPATH" жойылды.
    • Құралды жақсартулар: "MethodError" және әдістердің шығысы (мысалы, "methods(my_func)" ішінен) енді стек жолындағы әдістерді шығару принципіне сәйкес пішімделген және боялған.

    Ақпарат көзі: opennet.ru

пікір қалдыру