Julia 1.9 dasturlash tili mavjud

Julia 1.9 dasturlash tilining chiqarilishi chop etildi, u yuqori unumdorlik, dinamik yozishni qo'llab-quvvatlash va parallel dasturlash uchun o'rnatilgan vositalar kabi fazilatlarni o'zida mujassam etgan. Julia sintaksisi MATLAB ga yaqin, ba'zi elementlar Ruby va Lispdan olingan. String manipulyatsiyasi usuli Perlni eslatadi. Loyiha kodi MIT litsenziyasi ostida tarqatiladi.

Tilning asosiy xususiyatlari:

  • Yuqori samaradorlik: loyihaning asosiy maqsadlaridan biri C dasturlariga yaqin ishlashga erishishdir. Julia kompilyatori LLVM loyihasiga asoslangan va ko'plab maqsadli platformalar uchun samarali mahalliy mashina kodini yaratadi;
  • Turli xil dasturlash paradigmalarini, shu jumladan ob'ektga yo'naltirilgan va funktsional dasturlash elementlarini qo'llab-quvvatlash. Standart kutubxona boshqa narsalar qatorida asinxron kiritish-chiqarish, jarayonni boshqarish, jurnalga yozish, profil yaratish va paketlarni boshqarish funksiyalarini taqdim etadi;
  • Dinamik yozish: til skript dasturlash tillariga o'xshab, o'zgaruvchilar turlarini aniq belgilashni talab qilmaydi. Interaktiv rejimni qo'llab-quvvatlaydi;
  • Turlarni aniq belgilashning ixtiyoriy qobiliyati;
  • Raqamli hisoblar, ilmiy hisoblar, mashinalarni o'rganish tizimlari va ma'lumotlarni vizualizatsiya qilish uchun juda yaxshi sintaksis. Ko'p sonli ma'lumotlar turlarini va hisoblarni parallellashtirish vositalarini qo'llab-quvvatlash.
  • Qo'shimcha qatlamlarsiz C kutubxonalaridan funktsiyalarni to'g'ridan-to'g'ri chaqirish imkoniyati.

Julia 1.9 da asosiy o'zgarishlar:

  • Yangi til xususiyatlari
    • "setproperty!(::Module, ::Symbol, x)" yordamida boshqa modulda topshiriqlarni bajarishga ruxsat bering.
    • Yakuniy holatda bo'lmagan bir nechta topshiriqlarga ruxsat beriladi. Masalan, “a, b…, c = 1, 2, 3, 4” qatori “a = 1; b…, = 2, 3; c = 4". Bu Base.split_rest orqali amalga oshiriladi.
    • Bitta belgili harflar endi satr literallari bilan bir xil sintaksisni qo'llab-quvvatlaydi; bular. Sintaksis Char tipi ruxsat berganidek, noto'g'ri UTF-8 ketma-ketligini ko'rsatishi mumkin.
    • Unicode 15 spetsifikatsiyasi uchun qo'shimcha qo'llab-quvvatlash.
    • Endi tip parametrlari sifatida kortejlar va nomlangan belgilar kortejlarining ichki o'rnatilgan kombinatsiyalaridan foydalanish mumkin.
    • Yangi oʻrnatilgan funksiyalar “getglobal(::Module, ::Symbol[, order])” va “setglobal!(::Module, ::Symbol, x[, order])” faqat global oʻzgaruvchilarni oʻqish va yozish uchun. Endi global o'zgaruvchilarga kirish uchun getfield usulidan getglobal usuli afzal bo'lishi kerak.
  • Tildagi o'zgarishlar
    • 1.7 versiyasida taqdim etilgan "@invoke" makros endi eksport qilinadi va foydalanish uchun mavjud. Bundan tashqari, u endi "x" argumenti uchun turdagi izoh qoldirilsa, "Har qanday" emas, balki "Core.Typeof(x)" usulidan foydalanadi. Bu argument sifatida berilgan turlarning to'g'ri qayta ishlanishini ta'minlash uchun zarur.
    • 1.7-versiyada kiritilgan "invokelatest" funksiyasi va "@invokelatest" makrosini eksport qilish yoqilgan.
  • Kompilyator/ish vaqti yaxshilanishi
    • Birinchi bajarilish vaqti sezilarli darajada qisqardi (TTFX - Birinchi bajarilish vaqti). Paketni oldindan kompilyatsiya qilish endi mahalliy kodni "pkgimage" da saqlaydi, ya'ni oldindan kompilyatsiya jarayoni tomonidan yaratilgan kod paket yuklangandan keyin qayta kompilyatsiya qilinishi shart emas. Pkgimages rejimidan foydalanish "--pkgimages=no" opsiyasi yordamida o'chirib qo'yilishi mumkin.
    • Xulosa turidagi ma'lum kvadratik murakkablik muammosi tuzatildi va xulosa umumiy xotiradan kamroq foydalanadi. Avtomatik ravishda yaratilgan uzun funksiyalarga ega (masalan, qisman differensial tenglamalarga ega ModelingToolkit.jl va katta sabab modellari kabi) ba'zi chekka holatlar ancha tezroq kompilyatsiya qilinadi.
    • Aniq turlari bo'lmagan argumentli qo'ng'iroqlar endi jo'natish uchun bir nechta turli turdagi nomzodlar mavjud bo'lsa ham, in'ektsiya yoki statik rezolyutsiya uchun Ittifoqqa bo'linishi optimallashtirilgan bo'lishi mumkin. Bu "@nospecialize-d" qo'ng'iroq saytlarini statik ravishda hal qilish va qayta kompilyatsiya qilishdan qochish orqali ob'ekt turlari to'liq statik ravishda hal qilinmagan muayyan vaziyatlarda ishlashni yaxshilashi mumkin.
    • Asosiy moduldagi @pure makrosidan barcha foydalanish Base.@assume_effects bilan almashtirildi.
    • Odatda f(args...) uchun ishlatiladigandan kamroq maxsus turlarga ega (f, invokesig, args...) chaqiruvlari endi paketni qayta kompilyatsiya qilishga olib kelmaydi.
  • Buyruqlar qatori parametrlari o'zgaradi
    • Linux va Windows tizimlarida "--threads=auto" opsiyasi endi protsessorlarning mavjud sonini protsessorga yaqinligi asosida aniqlashga harakat qiladi, bu niqob odatda HPC va bulutli muhitlarda o'rnatiladi.
    • "--math-mode=fast" parametri o'chirilgan, uning o'rniga aniq belgilangan semantikaga ega "@fastmath" makrosidan foydalanish tavsiya etiladi.
    • "--threads" opsiyasi endi "auto |." formatida N[,auto|M]", bu erda M yaratilishi kerak bo'lgan interaktiv oqimlar sonini bildiradi (hozirda avtomatik 1 degan ma'noni anglatadi).
    • “—heap-size-hint=” opsiyasi qo‘shildi ", bu chegarani belgilaydi, shundan so'ng faol axlat yig'ish boshlanadi. Hajmi baytlarda, kilobaytlarda (1000 KB), megabaytlarda (300 MB) yoki gigabaytlarda (1,5 GB) ko'rsatilishi mumkin.
  • Ko'p oqimdagi o'zgarishlar
    • "Threads.@spawn" endi ":default" yoki ":interactive" qiymati bilan ixtiyoriy birinchi argumentga ega. Interaktiv vazifa past javob kutish vaqtini talab qiladi va qisqa yoki tez-tez bajarilishi uchun mo'ljallangan. Interfaol vazifalar, agar ular Julia-ni ishga tushirishda ko'rsatilgan bo'lsa, interaktiv mavzularda ishlaydi.
    • Julia ish vaqtidan tashqarida ishlaydigan mavzular (masalan, C yoki Java'dan) endi Julia kodini "jl_adopt_thread" yordamida chaqirishi mumkin. Bu Julia kodini "cfunction" yoki "@ccallable" kirish nuqtasi orqali kiritishda avtomatik ravishda sodir bo'ladi. Natijada, endi bajarilish vaqtida iplar soni o'zgarishi mumkin.
  • Yangi kutubxona funktsiyalari
    • Yangi funksiya "Iterators.flatmap".
    • Yangi "pkgversion(m::Module)" funksiyasi "pkgdir(m::Module)"ga o'xshash berilgan modulni yuklagan paket versiyasini olish uchun.
    • "reduce(hcat, x::Vector{<:Vector})" ni istalgan o'lchamga umumlashtiradigan va iteratorlarning har qanday iteratoriga ruxsat beruvchi yangi "stack(x)" funksiyasi. “Stack(f, x)” usuli “mapreduce(f, hcat, x)”ni umumlashtiradi va samaraliroq.
    • Ajratilgan xotirani tahlil qilish uchun yangi makros "@ajratishlar", "@ajratilgan" ga o'xshash, bundan tashqari u ajratilgan xotiraning umumiy hajmini emas, balki ajratilgan xotira sonini qaytaradi.
  • Kutubxonaning yangi xususiyatlari
    • "RoundFromZero" endi "BigFloat" dan boshqa turlar uchun ishlaydi.
    • Endi "Dict" ni "sizehint!" yordamida qo'lda qisqartirish mumkin.
    • "@time" endi yaroqsiz usullarni qayta kompilyatsiya qilishga sarflangan vaqt foizini alohida belgilaydi.
  • Standart kutubxonaga o'zgartirishlar
    • Dict va kalitlar(::Dict), qiymatlar(::Dict) va Set kabi boshqa olingan obyektlar uchun iteratsiya usullarida parallellik muammosi tuzatildi. Ushbu takrorlash usullari endi lug'at yoki to'plamni o'zgartiruvchi harakatlar bo'lmasa, cheksiz miqdordagi iplar uchun Dict yoki Set-da parallel ravishda chaqirilishi mumkin.
    • “!f” predikat funksiyasini inkor qilish endi anonim funksiya o‘rniga “(!) ∘ f” kompozit funksiyasini qaytaradi.
    • O'lchov tilim funksiyalari endi bir nechta o'lchamlarda ishlaydi: "har bir bo'lak", "har bir qator" va "har bir" "Slices" ob'ektini qaytaradi, bu esa samaraliroq usullarni taqdim etish uchun jo'natish imkonini beradi.
    • Umumiy API ga "@kwdef" makros qo'shildi.
    • "fld1" da operatsiyalar tartibi bilan bog'liq muammo tuzatildi.
    • Saralash endi har doim barqaror (QuickSort qayta ishlab chiqilgan).
    • "Base.splat" endi eksport qilinmoqda. Qaytish qiymati anonim funksiyadan ko'ra "Base.Splat" turi bo'lib, uni chiroyli tarzda chiqarish imkonini beradi.
  • Paket menejeri
    • "Paket kengaytmalari": Julia sessiyasida yuklangan boshqa paketlardan kod parchasini yuklashni qo'llab-quvvatlash. Ilova "Requires.jl" to'plamiga o'xshaydi, lekin oldindan kompilyatsiya va sozlash mosligi qo'llab-quvvatlanadi.
  • LinearAlgebra kutubxonasi
    • Elementlar bo'yicha bo'linish bilan chalkashlik xavfi tufayli, "a * pinv (b)" ga ekvivalent bo'lgan "a" va vektor "b" bilan "a/b" va "b\a" usullari olib tashlandi.
    • BLAS va LAPACKni chaqirish endi "libblastrampoline (LBT)" dan foydalanadi. OpenBLAS sukut boʻyicha taqdim etiladi, lekin tizim tasvirini boshqa BLAS/LAPACK kutubxonalari bilan yaratish qoʻllab-quvvatlanmaydi. Buning o'rniga, BLAS/LAPACK ni boshqa mavjud kutubxonalar to'plami bilan almashtirish uchun LBT mexanizmidan foydalanish tavsiya etiladi.
    • "lu" yangi arifmetik turlar va o'qitish maqsadlarida foydalanish uchun nolga teng bo'lmagan birinchi aylanish elementini tanlaydigan yangi "RowNonZero()" matritsasini aylantirish strategiyasini qo'llab-quvvatlaydi.
    • "normalize(x, p=2)" endi har qanday normallashtirilgan vektor maydoni "x", shu jumladan skalerlarni ham qo'llab-quvvatlaydi.
    • BLAS iplarining standart soni endi ARM arxitekturalaridagi protsessor iplari soniga va boshqa arxitekturadagi protsessor iplari sonining yarmiga teng.
  • Printf: Yaxshiroq o'qilishi uchun noto'g'ri formatlangan satrlar uchun qayta ishlangan xato xabarlari.
  • Profil: Chrome’da qo‘llab-quvvatlanadigan JSON-asosidagi “.heapsnapshot” formatida fayl yozuvchi “Profile.take_heap_snapshot(file)” yangi funksiyasi.
  • Tasodifiy: randn va randexp endi randni aniqlaydigan har qanday AbstractFloat turi uchun ishlaydi.
  • REPL
    • "Alt-e" tugmalar birikmasini bosish endi muharrirda joriy kiritishni ochadi. Tarkib (agar o'zgartirilgan bo'lsa) tahrirlovchidan chiqqaningizda bajariladi.
    • REPLda faol bo'lgan joriy modul konteksti "REPL.activate(::Module)" funksiyasi yordamida yoki modulni REPLga kiritish va "Alt-m" tugmalar birikmasini bosish orqali o'zgartirilishi mumkin (sukut bo'yicha Asosiy).
    • Har bir kirish va chiqish uchun raqamlarni chop etadigan va olingan natijalarni Out-da saqlaydigan "raqamli so'rov" rejimi "REPL.numbered_prompt!()" yordamida faollashtirilishi mumkin.
    • Jadvalni yakunlash mavjud kalit so'z argumentlarini ko'rsatadi.
  • SuiteSparse: "SuiteSparse" hal qiluvchi uchun kod "SparseArrays.jl" ga ko'chirildi. Yechimlar endi "SuiteSparse.jl" tomonidan qayta eksport qilinadi.
  • SparseArrays
    • "SuiteSparse" hal qiluvchilar endi "SparseArrays" submodullari sifatida mavjud.
    • UMFPACK va CHOLMOD ipni himoya qilish rejimlari global o'zgaruvchilarni yo'q qilish va qulflardan foydalanish orqali yaxshilandi. Ko'p tarmoqli "ldiv!" UMFPACK obyektlari endi xavfsiz tarzda bajarilishi mumkin.
    • “SparseArrays.allowscalar(::Bool)” eksperimental funksiyasi siyrak massivlarning skaler indekslanishini o‘chirish yoki yoqish imkonini beradi. Ushbu funktsiya "SparseMatrixCSC" ob'ektlarining tasodifiy skalyar indekslanishini aniqlash uchun mo'ljallangan, bu esa ishlash muammolarining umumiy manbai hisoblanadi.
  • Sinov to'plamlari uchun yangi ishlamay qo'yish rejimi, xatolik yoki xatolik yuz berganda sinovni erta tugatadi. “@testset kwarg failfast=true” yoki “eksport JULIA_TEST_FAILFAST=true” orqali sozlang. Bu ba'zan xato xabarlarini erta olish uchun CI ishlanmalarida kerak bo'ladi.
  • Sanalar: bo'sh satrlar endi noto'g'ri "DateTime", "Sana" yoki "Vaqt" qiymatlari sifatida tahlil qilinmaydi va buning o'rniga konstruktorlar va tahlil qilishda "ArgumentError" ni chiqaradi, "tryparse" esa hech narsa qaytarmaydi.
  • Paket tarqatildi
    • Paket konfiguratsiyasi (faol loyiha, "LOAD_PATH", "DEPOT_PATH") endi mahalliy ishchi jarayonlarni qo'shganda (masalan, "addprocs(N::Int)" yordamida yoki "--procs=N" buyruq qatori bayrog'i yordamida) tarqaladi.
    • Mahalliy ishchi jarayonlar uchun "addprocs" endi muhit o'zgaruvchilarini ishchi jarayonlarga o'tkazish uchun "env" nomli argumentni qabul qiladi.
  • Unicode: "graphemas(s, m:n)" pastki qatorni "s" da m-dan n-chi grafemaga qaytaradi.
  • DelimitedFiles to'plami tizim kutubxonalaridan olib tashlandi va endi foydalanish uchun aniq o'rnatilishi kerak bo'lgan alohida paket sifatida tarqatildi.
  • Tashqi bog'liqliklar
    • Linuxda libstdc++ tizim kutubxonasining versiyasi avtomatik tarzda aniqlanadi va agar u yangiroq bo'lsa, u yuklanadi. Eski libstdc++ oʻrnatilgan yuklash harakati, tizim versiyasidan qatʼi nazar, “JULIA_PROBE_LIBSTDCXX=0” muhit oʻzgaruvchisini oʻrnatish orqali tiklanishi mumkin.
    • Julia binaridan "RPATH" olib tashlandi, u Linuxda "RUNPATH" o'zgaruvchisini aniqlay olmaydigan kutubxonalarni buzishi mumkin.
    • Asbobni takomillashtirish: "MetodError" va usullarning chiqishi (masalan, "methods(my_func)" dan) endi stek izidagi usullarni chiqarish printsipiga muvofiq formatlangan va ranglangan.

    Manba: opennet.ru

a Izoh qo'shish