Julia 1.9 програмчлалын хэл

Өндөр гүйцэтгэл, динамик бичих дэмжлэг, зэрэгцээ програмчлалын суурилуулсан хэрэгслүүд зэрэг чанаруудыг хослуулсан Julia 1.9 програмчлалын хэлийг гаргасан. Жулиагийн синтакс нь MATLAB-тай ойролцоо бөгөөд Ruby болон Lisp-ээс зарим элементүүдийг зээлдэг. Мөр засах арга нь Perl-ийг санагдуулдаг. Төслийн кодыг MIT лицензийн дагуу түгээдэг.

Хэлний үндсэн шинж чанарууд:

  • Өндөр гүйцэтгэл: Төслийн гол зорилгын нэг нь C хөтөлбөртэй ойролцоо гүйцэтгэлд хүрэх явдал юм. Жулиа хөрвүүлэгч нь LLVM төслийн ажил дээр үндэслэсэн бөгөөд олон зорилтот платформуудад үр ашигтай эх машины кодыг үүсгэдэг;
  • Төрөл бүрийн програмчлалын парадигмуудыг, түүний дотор объект хандалтат болон функциональ програмчлалын элементүүдийг дэмждэг. Стандарт номын сан нь бусад зүйлсийн дотор асинхрон I/O, процессын хяналт, бүртгэл, профайл, багцын менежментийн функцуудыг хангадаг;
  • Динамик бичих: хэл нь скрипт програмчлалын хэлтэй адил хувьсагчийн төрлүүдийн тодорхой тодорхойлолтыг шаарддаггүй. Интерактив горимыг дэмждэг;
  • Төрөлүүдийг тодорхой зааж өгөх нэмэлт боломж;
  • Тоон тооцоолол, шинжлэх ухааны тооцоолол, машин сургалт, өгөгдлийг дүрслэн харуулахад тохиромжтой синтакс. Тооцооллыг параллель болгох олон тооны өгөгдлийн төрөл, хэрэгслийг дэмжих.
  • Нэмэлт давхаргагүйгээр С номын сангаас функцуудыг шууд дуудах чадвар.

Жулиа 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" аргументийн төрлийн тэмдэглэгээг орхигдуулсан тохиолдолд "Any" гэхээсээ илүү "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...) дуудах дуудлага нь багцыг дахин хөрвүүлэхэд хүргэдэггүй.
  • Тушаалын мөрийн сонголтуудын өөрчлөлт
    • Линукс болон Windows дээр "--threads=auto" сонголт нь HPC болон үүлэн орчинд ихэвчлэн тохируулдаг маск болох CPU-ийн хамааралд тулгуурлан боломжтой процессоруудын тоог тодорхойлохыг оролддог.
    • “--math-mode=fast” параметрийг идэвхгүй болгосон бөгөөд үүний оронд семантикийг тодорхой тодорхойлсон “@fastmath” макро ашиглахыг зөвлөж байна.
    • "--threads" сонголт одоо "auto |" форматтай байна N[,auto|M]", энд M нь үүсгэх интерактив хэлхээний тоог заана (одоогоор auto гэдэг нь 1 гэсэн үг).
    • “—heap-size-hint=” сонголтыг нэмсэн. ", энэ нь идэвхтэй хог цуглуулах босгыг тогтоодог. Хэмжээг байт, килобайт (1000 КБ), мегабайт (300 МБ), гигабайт (1,5 ГБ)-аар тодорхойлж болно.
  • Multithreading-д гарсан өөрчлөлтүүд
    • «Threads.@spawn» теперь имеет опциональный первый аргумент со значением «:default» или «:interactive». Интерактивная задача требует малой задержки отклика и рассчитана быть короткой или часто выполняемой. Интерактивные задачи будут выполняться в интерактивных потоках, если они указаны при запуске Julia.
    • Julia-н ажиллах хугацаанаас гадуур ажиллаж байгаа Threads (жишээ нь C эсвэл Java) одоо Julia кодыг "jl_adopt_thread" ашиглан дуудаж болно. Энэ нь Жулиа кодыг "cfunction" эсвэл "@ccallable" нэвтрэх цэгээр оруулах үед автоматаар тохиолддог. Үүний үр дүнд урсгалын тоо одоо гүйцэтгэх явцад өөрчлөгдөж болно.
  • Номын сангийн шинэ функцууд
    • "Iterators.flatmap" шинэ функц.
    • Новая функция «pkgversion(m::Module)» для получения версии пакета, который загрузил данный модуль, аналогично «pkgdir(m::Module)».
    • "reduce(hcat, x::Vector{<:Vector})"-г дурын хэмжигдэхүүнд нэгтгэж, ямар ч давталт хийх боломжийг олгодог "стек(x)" шинэ функц. "Стек(f, x)" арга нь "mapreduce(f, hcat, x)"-ыг ерөнхийд нь илэрхийлдэг бөгөөд илүү үр дүнтэй байдаг.
    • Хуваарилагдсан санах ойд дүн шинжилгээ хийх шинэ макро "@хуваарилагдсан"-тай төстэй, хуваарилагдсан санах ойн нийт хэмжээг биш харин санах ойн хуваарилалтын тоог буцаадаг.
  • Номын сангийн шинэ боломжууд
    • «RoundFromZero» теперь работает для типов, отличных от «BigFloat».
    • "Dict"-ийг одоо "sizehint!" ашиглан гараар багасгаж болно.
    • Одоо "@time" нь хүчингүй аргуудыг дахин эмхэтгэхэд зарцуулсан цагийн хувийг тус тусад нь зааж өгдөг.
  • Стандарт номын санд гарсан өөрчлөлтүүд
    • Түлхүүр(::Dict), утгууд(::Dict) болон Set зэрэг Dict болон бусад үүсмэл объектуудын давталтын аргууд дахь давталтын асуудлыг зассан. Эдгээр давталтын аргыг одоо толь бичиг эсвэл багцыг өөрчлөх үйлдэл байхгүй бол хязгааргүй тооны хэлхээнд Dict эсвэл Set дээр зэрэгцээ дуудаж болно.
    • "!f" предикатын функцийг үгүйсгэх нь одоо нэргүй функцийн оронд "(!) ∘ f" нийлмэл функцийг буцаана.
    • Хэмжээний зүсмэлийн функцүүд одоо олон хэмжээст дээр ажилладаг: "бүр зүсэм", "бүр бүр" болон "бүр" нь "Зүсмэлүүд" объектыг буцаадаг бөгөөд энэ нь илүү үр дүнтэй аргуудаар хангахын тулд илгээх боломжийг олгодог.
    • Нийтийн API-д "@kwdef" макро нэмсэн.
    • "fld1" дээрх үйлдлийн дарааллын асуудлыг зассан.
    • Эрэмбэлэх нь одоо үргэлж цаг хугацааны хувьд тогтворждог (QuickSort нь шинэчлэгдсэн).
    • "Base.splat" одоо экспортлогдсон. Буцах утга нь нэргүй функцээс илүү "Base.Splat" төрөл бөгөөд үүнийг сайн гаргах боломжийг олгодог.
  • Багц менежер
    • "Багцын өргөтгөлүүд": Жулиа сессэд ачаалагдсан бусад багцаас кодын хэсэгчлэн ачаалах дэмжлэг. Энэ програм нь "Requires.jl" багцтай төстэй боловч урьдчилсан эмхэтгэл болон тохиргооны нийцтэй байдлыг дэмждэг.
  • Шугаман алгебрийн номын сан
    • Из-за риска путаницы с поэлементным делением удалены методы «a / b» и «b \ a» со скаляром «a» и вектором «b», которые были эквивалентны «a * pinv(b)».
    • 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-д хадгалдаг "numbered prompt" горимыг "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-д шаардлагатай байдаг.
  • Огноо: Хоосон мөрүүдийг хүчинтэй "ОгнооЦаг", "Огноо" эсвэл "Цаг"-ын утгуудаар буруу задлан шинжлэхээ больж, бүтээгчид болон задлан шинжлэхэд "ArgumentError" шидэх ба "tryparse" нь юу ч буцаадаггүй.
  • Багцыг тараасан
    • Багцын тохиргоо (идэвхтэй төсөл, "LOAD_PATH", "DEPOT_PATH") нь одоо орон нутгийн ажилчны процессуудыг нэмэх үед (жишээ нь "addprocs(N::Int)" эсвэл "--procs=N" командын мөрийн тугийг ашиглан) тархаж байна.
    • Орон нутгийн ажилчдын процессуудад зориулсан "addprocs" нь орчны хувьсагчдыг ажилчдын процесст дамжуулахын тулд "env" нэртэй аргументыг хүлээн авдаг болсон.
  • Юникод: "graphemes(s, m:n)" нь "s" дахь mth-аас n-р графемуудын дэд мөрийг буцаана.
  • DelimitedFiles багцыг системийн сангаас хассан бөгөөд одоо ашиглахын тулд тодорхой суулгасан байх ёстой тусдаа багц хэлбэрээр тараагдсан.
  • Гадаад хамаарал
    • Линукс дээр libstdc++ системийн номын сангийн хувилбарыг автоматаар илрүүлж, хэрэв шинэ бол түүнийг ачаална. "JULIA_PROBE_LIBSTDCXX=0" орчны хувьсагчийг тохируулснаар системийн хувилбараас үл хамааран хуучин libstdc++ суулгасан ачаалах ажиллагааг сэргээж болно.
    • "RUNPATH" хувьсагчийг тодорхойлж чадаагүй Линукс дээрх сангуудыг эвдэж болох julia хоёртын файлаас "RPATH"-г устгасан.
    • Улучшения инструментов: Вывод «MethodError» и методов (например из «methods(my_func)») теперь оформлен и раскрашен в соответствии с принципом вывода методов при трассировке стека.

    Эх сурвалж: opennet.ru

сэтгэгдэл нэмэх