Нашри забони барномасозии Julia 1.8

Нашри забони барномасозии Julia 1.8 дастрас аст, ки дорои сифатҳои баланд, дастгирии чопкунии динамикӣ ва абзорҳои дарунсохт барои барномасозии параллелӣ мебошад. Синтаксиси Ҷулия ба MATLAB наздик аст ва баъзе унсурҳоро аз Ruby ва Lisp гирифтааст. Усули коркарди сатр Perl-ро ба хотир меорад. Рамзи лоиҳа тибқи иҷозатномаи MIT паҳн карда мешавад.

Хусусиятҳои асосии забон:

  • Иҷрои баланд: яке аз ҳадафҳои асосии лоиҳа ноил шудан ба иҷрои наздик ба барномаҳои C мебошад. Тартибдиҳандаи Ҷулия ба лоиҳаи LLVM асос ёфтааст ва барои бисёр платформаҳои мавриди ҳадаф рамзи мошини муассири ватаниро тавлид мекунад;
  • Дастгирии парадигмаҳои гуногуни барномасозӣ, аз ҷумла унсурҳои барномасозии ба объект нигаронидашуда ва функсионалӣ. Китобхонаи стандартӣ вазифаҳои асинхронии вуруд/барқ, идоракунии равандҳо, сабткунӣ, профилсозӣ ва идоракунии бастаҳо, аз ҷумла чизҳои дигарро таъмин мекунад;
  • Навиштани динамикӣ: Забон бо шабеҳи забонҳои барномасозии скрипт таърифи дақиқи намудҳоро барои тағирёбандаҳо талаб намекунад. Ҳолати интерактивиро дастгирӣ мекунад;
  • Имконияти ихтиёрӣ барои ба таври возеҳ муайян кардани намудҳо;
  • Синтаксис, ки барои ҳисобҳои ададӣ, ҳисобҳои илмӣ, системаҳои омӯзиши мошинсозӣ ва визуализатсияи додаҳо аъло аст. Дастгирии бисёр намудҳои маълумотҳои рақамӣ ва асбобҳо барои параллелизатсияи ҳисобҳо.
  • Имконияти бевосита даъват кардани функсияҳо аз китобхонаҳои C бе қабатҳои иловагӣ.

Тағироти асосӣ дар Ҷулия 1.8:

  • Хусусиятҳои нави забон
    • Майдонҳои сохтори тағирёбанда акнун метавонанд ҳамчун доимӣ шарҳ дода шаванд, то онҳо тағир надиҳанд ва оптимизатсия шаванд.
    • Ба тағирёбандаҳои глобалӣ эзоҳҳои навъи метавон илова карда шавад.
    • Массивҳои холии n-ченакаро бо истифода аз нуқта-вергулҳои сершумор дар дохили қавсҳои мураббаъ сохтан мумкин аст, масалан "[;;;]" массиви 0x0x0 эҷод мекунад.
    • Блокҳои озмоишӣ акнун метавонанд ихтиёрӣ блоки дигаре дошта бошанд, ки он фавран пас аз қисми асосӣ иҷро карда мешавад, агар ягон хатогӣ партофта нашавад.
    • @inline ва @noinline мумкин аст дар дохили корпуси функсионалӣ ҷойгир карда шаванд, ки ба шумо имкон медиҳад, ки функсияи номаълумро шарҳ диҳед.
    • @inline ва @noinline акнун метавонанд ба функсия дар сайти занг ё блок истифода шаванд, то зангҳои мувофиқро маҷбур кунанд, ки дохил карда шаванд (ё дохил карда нашудаанд).
    • ∀, ∃ ва ∄ ҳамчун аломатҳои мушаххас иҷозат дода мешаванд.
    • Дастгирии иловагӣ барои мушаххасоти Юникод 14.0.0.
    • Усули Module(:name, false, false) метавонад барои сохтани модуле истифода шавад, ки номҳоро дар бар намегирад, Base ё Coreро ворид намекунад ва истинод ба худ надорад.
  • Тағироти забон
    • Объектҳои Вазифаҳои навтаъсисшуда (@spawn, @async ва ғайра) ҳоло барои усулҳои Вазифаи волидайн ҳангоми сохтан, имкон медиҳанд, ки иҷрои оптимизатсияшуда ҷаҳони_сола доранд. Варианти фаъолсозии қаблӣ бо истифода аз усули Base.invokelatest дастрас аст.
    • Директиваҳои форматкунии дуҷонибаи мутавозини Юникод ҳоло дар сатрҳо ва шарҳҳо барои пешгирӣ аз тазриқ манъ карда шудаанд.
    • Ҳоло Base.ifelse на ҳамчун як функсияи умумӣ муайян карда шудааст, ки ба бастаҳо имкон медиҳад, ки таърифи онро васеъ кунанд.
    • Ҳар як таъинот ба тағирёбандаи глобалӣ ҳоло аввал аз занг барои табдилдиҳӣ (Ягон, x) ё табдили (T, x) мегузарад, агар тағирёбандаи глобалӣ навъи T эълон шуда бошад. Пеш аз истифодаи тағирёбандаҳои глобалӣ, боварӣ ҳосил кунед, ки тағирёбандаи инварианти тағирёбанда (Any) , x) === x ҳамеша дуруст аст, вагарна он метавонад ба рафтори ғайричашмдошт оварда расонад.
    • Функсияҳои дарунсохт ҳоло ба функсияҳои умумӣ монанданд ва онҳоро бо истифода аз усулҳо ба таври барномавӣ номбар кардан мумкин аст.
  • Такмилдиҳии компилятор/вақти кор
    • Вақти боркунӣ тақрибан 25% кам карда шуд.
    • Компилятори ба LLVM асосёфта аз китобхонаи вақти корӣ ба китобхонаи нав, libjulia-codegen ҷудо карда шудааст. Он бо нобаёнӣ бор карда мешавад, бинобар ин ҳангоми истифодаи муқаррарӣ набояд тағирот ба амал ояд. Дар ҷойгиркунӣ, ки ба компилятор эҳтиёҷ надоранд (масалан, тасвирҳои система, ки дар он ҳама коди зарурӣ пешакӣ тартиб дода шудааст), ин китобхона (ва вобастагии LLVM-и он) метавонад ба таври оддӣ сарфи назар карда шавад.
    • Баррасии навъи шартӣ ҳоло тавассути интиқол додани аргумент ба усул имконпазир аст. Масалан, барои Base.ifelse(isa(x, Int), x, 0) ::Int-ро бармегардонад, ҳатто агар навъи x номаълум бошад.
    • SROA (Ивазкунии скалярии агрегатҳо) такмил дода шудааст: зангҳои гетфилдро бо майдонҳои глобалии доимӣ нест мекунад, сохторҳои тағирёбандаро бо майдонҳои ибтидонашуда нест мекунад, кор ва коркарди зангҳои нетфилдро беҳтар мекунад.
    • Хулосаи навъи навъи эффектҳои гуногунро пайгирӣ мекунад - таъсироти тарафӣ ва тарки. Таблиғи доимӣ ба назар гирифта мешавад, ки ин иҷрои вақти компиляцияро ба таври назаррас беҳтар мекунад. Дар баъзе мавридҳо, масалан, зангҳо ба функсияҳое, ки наметавонанд ворид карда шаванд, вале ба натиҷа таъсир намерасонанд, дар вақти иҷро хориҷ карда мешаванд. Қоидаҳои эффектҳоро метавон бо истифода аз макроси Base.@assume_effects дастӣ дубора навишт.
    • Тартиби пешакӣ (бо дастурҳои дақиқи пешакӣ ё сарбории кории мушаххас) ҳоло рамзи бештари навъи муайяншударо сарфа мекунад, ки дар натиҷа бори аввал зудтар иҷро мешавад. Ҳама гуна усул/комбинатсияҳои наве, ки барои бастаи шумо лозим аст, новобаста аз он ки ин усулҳо дар куҷо муайян карда шудаанд, ҳоло метавонанд дар файли пешакӣ кэш карда шаванд, агар онҳо бо усули ба бастаи шумо тааллуқдошта даъват карда шаванд.
  • Тағир додани параметри сатри фармон
    • Рафтори пешфарз барои мониторинги эъломияҳои @inbounds ҳоло варианти худкор дар "--check-bounds=yes|no|auto" мебошад.
    • Опсияи нави "--strip-metadata" барои нест кардани сатрҳои ҳуҷҷатҳо, маълумоти ҷойгиршавии манбаъ ва номҳои тағирёбандаи маҳаллӣ ҳангоми эҷоди тасвири система.
    • Варианти нави "--strip-ir" барои ба компилятор имкон медиҳад, ки ҳангоми сохтани тасвири система тасвири фосилавии рамзи сарчашмаро хориҷ кунад. Тасвири натиҷавӣ танҳо дар сурате кор хоҳад кард, ки агар "--compile=all" истифода шавад ё ҳамаи кодҳои зарурӣ пешакӣ тартиб дода шуда бошанд.
    • Агар ба ҷои номи файл аломати "-" нишон дода шуда бошад, он гоҳ рамзи иҷрошаванда аз ҷараёни вуруди стандартӣ хонда мешавад.
  • Тағироти дастгирии мултимедиявӣ
    • Threads.@threads ба таври нобаёнӣ варианти нави банақшагирии :dynamic -ро истифода мебарад, ки аз режими қаблӣ бо он фарқ мекунад, ки такрорҳо на ба ҳар як ришта таъин шуданашон дар риштаҳои коргарии дастрас динамикӣ ба нақша гирифта мешаванд. Ин режим имкон медиҳад, ки ҳалқаҳои лонашуда бо @spawn ва @threads беҳтар тақсим карда шаванд.
  • Функсияҳои нави китобхона
    • everysplit(str) барои чанд маротиба иҷро кардани split(str).
    • allequal(itr) барои санҷидани он, ки оё ҳамаи унсурҳои итератор баробаранд.
    • hardlink (src, dst) метавонад барои эҷоди истинодҳои сахт истифода шавад.
    • setcpuaffinity (cmd, cpus) барои муқаррар кардани наздикии ядрои протсессор ба равандҳои оғозшуда.
    • diskstat(path=pwd()) барои гирифтани омори диск.
    • Макроси нави @showtime барои намоиши ҳам сатри арзёбӣшаванда ва ҳам гузориши @time.
    • Макроси LazyString ва lazy"str" ​​барои дастгирии сохтани танбалии паёмҳои хато дар роҳҳои хатогӣ илова карда шуданд.
    • Масъалаи ҳамоҳангӣ дар Dict ва дигар объектҳои ҳосилшуда, ба монанди калидҳо(::Dict), арзишҳо(::Dict) ва Set ислоҳ карда шуд. Усулҳои такрориро акнун метавон дар луғат ё маҷмӯа даъват кард, ба шарте ки ягон занге вуҷуд надошта бошад, ки луғат ё маҷмӯаро тағир медиҳад.
    • @time ва @timev ҳоло тавсифи ихтиёрӣ доранд, ки ба шумо имкон медиҳад, ки манбаи гузоришҳои вақтро шарҳ диҳед, масалан. @time "Баҳодиҳии foo" foo().
    • диапазон ҳамчун далели ягона калимаи калидии худ таваққуф ё дарозиро мегирад.
    • precision ва setprecision ҳоло базаро ҳамчун калимаи калидӣ қабул мекунанд
    • Объектҳои васлаки TCP ҳоло усули пӯшидани навиштанро таъмин мекунанд ва истифодаи ҳолати нимкушоиро дастгирӣ мекунанд.
    • extrema ҳоло далели ибтидоиро қабул мекунад.
    • Iterators.countfrom ҳоло ҳама гуна намудеро, ки усули +-ро муайян мекунад, қабул мекунад.
    • @time ҳоло % вақти сарфшударо барои аз нав тартиб додани усулҳо бо намудҳои тағирёфта ҷудо мекунад.
  • Тағйироти стандартии китобхона
    • Калидҳои дорои арзиш ҳоло дар addenv ҳеҷ чиз аз муҳити атроф хориҷ карда нашудааст.
    • Iterators.reverse (ва аз ин рӯ, охирин) ҳар як сатрро дастгирӣ мекунад.
    • Функсияи дарозӣ барои диапазони намудҳои муайян дигар изофаи ададро тафтиш намекунад. Функсияи нав, checked_length дастрас аст; он дорои мантиқи назорати интиқоли бит мебошад. Агар лозим бошад, барои сохтани навъи диапазон SaferIntegers.jl -ро истифода баред.
    • Итератори Iterators.Reverse агар имконпазир бошад, ҳар як баргардонидани индексро амалӣ мекунад.
  • Менеҷери бастаҳо
    • Нишондиҳандаҳои нави ⌃ ва ⌅ дар паҳлӯи бастаҳо дар ҳолати "pkg>", ки версияҳои нав дастрасанд. ⌅ нишон медиҳад, ки версияҳои нав насб карда намешаванд.
    • Аргументи нави кӯҳнашуда:: Bool ба Pkg.status (--кӯҳнашуда ё -o дар ҳолати REPL) барои нишон додани маълумот дар бораи бастаҳо аз версияҳои қаблӣ.
    • compat new::Bool аргументи Pkg.status (--compat ё -c дар ҳолати REPL) барои нишон додани ҳама гуна вурудоти [compat] дар Project.toml.
    • Ҳолати нави "pkg>compat" (ва Pkg.compat) барои танзими вурудоти мутобиқати лоиҳа. Муҳаррири интерактивиро тавассути "pkg>compat" ё назорати мустақими сабт тавассути "pkg>Foo 0.4,0.5" таъмин мекунад, ки метавонад сабтҳои ҷориро тавассути анҷоми ҷадвал бор кунад. Яъне, "pkg> compat Fo" ба таври худкор ба "pkg> Foo 0.4,0.5" нав карда мешавад, то вуруди мавҷуда таҳрир карда шавад.
    • Pkg ҳоло танҳо кӯшиш мекунад бастаҳоро аз сервери бастаҳо зеркашӣ кунад, агар сервер реестри дорои бастаро назорат кунад.
    • Pkg.instantiate ҳоло ҳушдор медиҳад, ки Project.toml бо Manifest.toml ҳамоҳанг нест. Он ин корро дар асоси хэши депҳои лоиҳа ва сабтҳои мувофиқ (дигар майдонҳо сарфи назар карда мешаванд) дар манифест ҳангоми ҳалли он анҷом медиҳад, то ҳама гуна тағирот дар Deps Project.toml ё сабтҳои мувофиқ бидуни ҳалли дубора ошкор карда шаванд.
    • Агар "pkg>add" бастаеро бо номи додашуда пайдо карда натавонад, он ҳоло бастаҳоеро бо номҳои шабеҳ, ки метавонанд илова шаванд, пешниҳод мекунад.
    • Варианти julia, ки дар манифест ҳифз шудааст, дигар рақами сохтмонро дар бар намегирад, яъне устод акнун ҳамчун 1.9.0-DEV навишта мешавад.
    • Қатъи санҷиши "pkg>" акнун пайгиронатар муайян карда мешавад ва дуруст ба REPL баргардонида мешавад.
  • InteractiveUtils
    • Макроси нави @time_imports барои гузориш додани вақти сарфшуда барои воридоти бастаҳо ва вобастагии онҳо, таъкид кардани вақти тартиб додан ва аз нав тартиб додан ҳамчун фоизи воридот.
  • Алгебраи хатӣ
    • Зермодули BLAS ҳоло функсияҳои сатҳи-2 BLAS spr!-ро дастгирӣ мекунад.
    • Китобхонаи стандартии LinearAlgebra.jl ҳоло аз SparseArrays.jl комилан мустақил аст, ҳам аз нуқтаи назари рамзи манбаъ ва ҳам аз нуқтаи назари санҷиши воҳид. Дар натиҷа, массивҳои камёфт дигар бо усулҳои аз LinearAlgebra ба объектҳои Base ё LinearAlgebra истифодашаванда баргардонида намешаванд. Махсусан, ин ба тағйироти зерини вайронкунанда оварда мерасонад:
      • Пайвасткуниҳо бо истифода аз матритсаҳои махсуси "пайванд" (масалан, диагоналӣ) акнун матритсаҳои зичро бармегардонанд; Дар натиҷа, майдонҳои D1 ва D2 объектҳои SVD, ки тавассути зангҳои getproperty сохта шудаанд, ҳоло матритсаҳои зич мебошанд.
      • Усули шабеҳи(::SpecialSparseMatrix, ::Type, ::Dims) матритсаи зиччи нулро бармегардонад. Дар натиҷа, ҳосили матритсаҳои ду-, се- ва симметрии тридиагоналӣ бо ҳамдигар ба тавлиди матритсаи зич оварда мерасонад. Илова бар ин, сохтани матритсаҳои шабеҳ бо се аргумент аз матритсаҳои махсуси "пойдор" аз матритсаҳои (ғайристатикӣ) ҳоло аз сабаби "сифр(::Намуд{Матритса{T}})" ноком мешавад.
  • Printf
    • %s ва %c ҳоло далели паҳнои матнро барои формат кардани паҳн истифода мебаранд.
  • Чеҳра
    • Профили сарбории CPU ҳоло метамаълумотро, аз ҷумла риштаҳо ва вазифаҳоро сабт мекунад. Profile.print() дорои як далели нави groupby мебошад, ки ба шумо имкон медиҳад, ки риштаҳо, вазифаҳо ё зерриштаҳо/вазифаҳо, вазифаҳо/риштаҳо ва далелҳо ва риштаҳоро гурӯҳбандӣ кунед, то филтрро таъмин кунед. Илова бар ин, фоизи истифода ҳоло вобаста ба он ки ришта дар ҳар як намуна бекор аст ё не, дар маҷмӯъ ё дар як ришта гузориш дода мешавад. Profile.fetch() ба таври нобаёнӣ метамаълумоти навро дар бар мегирад. Барои мутобиқати ақиб бо истеъмолкунандагони берунии маълумоти профилсозӣ, онро метавон тавассути гузариши include_meta=false хориҷ кард.
    • Модули нави Profile.Allocs ба шумо имкон медиҳад, ки тақсимоти хотираро профил кунед. Пайгирии стек аз намуд ва андозаи ҳар як тақсимоти хотира сабт карда мешавад ва далели sample_rate имкон медиҳад, ки шумораи танзимшавандаи тақсимот гузаронида шавад ва ин хароҷоти иҷроишро коҳиш диҳад.
    • Профили CPU-и давомнокии собит акнун метавонад аз ҷониби корбар ҳангоми иҷро шудани супоришҳо бидуни бори аввал профил иҷро карда шавад ва ҳисобот ҳангоми иҷро нишон дода мешавад. Дар MacOS ва FreeBSD, ctrl-t-ро пахш кунед ё ба SIGINFO занг занед. Барои платформаҳои дигар, SIGUSR1 -ро фаъол кунед, яъне. % кушт -USR1 $julia_pid. Ин дар Windows дастрас нест.
  • ҶАВОБ
    • RadioMenu ҳоло миёнабурҳои иловагии клавиатураро барои интихоби мустақими интихобҳо дастгирӣ мекунад.
    • Пайдарпаии "?(x, y" ва пас аз пахш кардани TAB ҳамаи усулҳоеро нишон медиҳад, ки онҳоро бо аргументҳои x, y, ... даъват кардан мумкин аст. (Фои пешбаранда шуморо аз ворид шудан ба ҳолати кӯмак манъ мекунад.) "MyModule.?(x, y " ҷустуҷӯро ба "Модули ман" маҳдуд мекунад. Барои пахш кардани TAB талаб мекунад, ки ҳадди ақал як аргумент навъи мушаххастар аз ҳама бошад. Ё барои иҷозат додани ҳама гуна усулҳои мувофиқ ба ҷои TAB -ро истифода баред SHIFT-TAB.
    • Тағйирёбандаи нави глобалии err ба шумо имкон медиҳад, ки истиснои охиринро ба даст оред, ки ба рафтори ans бо ҷавоби охирин монанд аст. Ворид кардани хато маълумоти истисноро дубора чоп мекунад.
  • SparseArrays
    • Рамзи SparseArrays аз анбори Ҷулия ба анбори берунии SparseArrays.jl кӯчонида шуд.
    • Функсияҳои нави пайвастшавӣ sparse_hcat, sparse_vcat ва sparse_hvcat новобаста аз намуди аргументҳои воридотӣ навъи SparseMatrixCSC-ро бармегардонанд. Ин барои муттаҳид кардани механизми часпак кардани матритсаҳо пас аз ҷудо кардани коди LinearAlgebra.jl ва SparseArrays.jl зарур шуд.
  • ботлоќшавї
    • Сатҳи стандартии сабти ном BelowMinLevel, Debug, Info, Warn, Error ва AboveMaxLevel ҳоло аз китобхонаи стандартии Logging содир карда мешаванд.
  • Unicode
    • Функсияи isqual_normalized барои тафтиши муодили Юникод бидуни сохтани сатрҳои муқарраршуда илова карда шудааст.
    • Функсияи Unicode.normalize ҳоло калимаи калидии charttransform-ро қабул мекунад, ки онро метавон барои пешниҳоди харитасозии аломатҳои фармоишӣ истифода бурд ва функсияи Unicode.julia_chartransform низ барои дубора тавлид кардани харитасозӣ, ки ҳангоми таҳлили Ҷулия идентификаторҳоро муқаррарӣ мекунад, таъмин карда мешавад.
  • озмоиш
    • '@test_throws "баъзе паём" triggers_error()' акнун метавонад барои санҷидани он, ки оё матни хатои нишондодашуда новобаста аз навъи истиснои мушаххас хатои "баъзе паём"-ро дар бар мегирад, истифода мешавад. Ифодаҳои муқаррарӣ, рӯйхати сатрҳо ва функсияҳои мувофиқ низ дастгирӣ карда мешаванд.
    • @testset foo() акнун метавонад барои сохтани маҷмӯи санҷиш аз функсияи додашуда истифода шавад. Номи парвандаи санҷишӣ номи функсияи даъватшаванда мебошад. Функсияи даъватшуда метавонад @test ва дигар таърифҳои @testset дошта бошад, аз ҷумла барои зангҳо ба дигар вазифаҳо ҳангоми сабти ҳама натиҷаҳои санҷиши мобайнӣ.
    • TestLogger ва LogRecord ҳоло аз китобхонаи стандартии Test содир карда мешаванд.
  • Тақсим карда мешавад
    • SSHManager ҳоло риштаҳои коргариро бо печонидани csh/tcsh тавассути усули addprocs() ва параметри shell=:csh дастгирӣ мекунад.
  • Тағироти дигар
    • GC.enable_logging(true) метавонад барои сабти ҳар як амалиёти ҷамъоварии ахлот бо вақт ва миқдори хотираи ҷамъшуда истифода шавад.

Манбаъ: opennet.ru

Илова Эзоҳ