basa programming Julia 1.9 sadia

Pelepasan basa program Julia 1.9 parantos diterbitkeun, ngagabungkeun kualitas sapertos kinerja tinggi, dukungan pikeun ngetik dinamis sareng alat-alat anu diwangun pikeun paralel program. Sintaksis Julia caket sareng MATLAB, nginjeum sababaraha unsur tina Ruby sareng Lisp. Metoda manipulasi string reminiscent of Perl. Kodeu proyék disebarkeun dina lisénsi MIT.

Fitur utama basa:

  • Kinerja luhur: salah sahiji tujuan konci proyék nyaéta pikeun ngahontal prestasi anu caket sareng program C. Kompiler Julia dumasar kana karya proyék LLVM sareng ngahasilkeun kode mesin asli anu efisien pikeun seueur platform target;
  • Ngarojong rupa-rupa paradigma program, kalebet unsur-unsur program berorientasi obyék sareng fungsional. Perpustakaan standar nyadiakeun, antara séjén, fungsi pikeun Asynchronous I / O, kontrol prosés, logging, profil, sarta manajemén pakét;
  • Ketik dinamis: basa teu merlukeun definisi eksplisit jenis pikeun variabel, sarupa jeung basa programming scripting. Modeu interaktif dirojong;
  • Kamampuhan pilihan pikeun sacara eksplisit nangtukeun jenis;
  • Sintaksis idéal pikeun komputasi numerik, komputasi ilmiah, pembelajaran mesin, sareng visualisasi data. Rojongan pikeun seueur jinis data numerik sareng alat pikeun paralélisasi itungan.
  • Kamampuhan pikeun nelepon langsung fungsi ti perpustakaan C tanpa lapisan tambahan.

Parobihan utama dina Julia 1.9:

  • Fitur basa anyar
    • Ngidinan tugas dilakukeun dina modul anu sanés nganggo "setproperty! (:: Modul, :: Simbol, x)".
    • Sababaraha assignments teu di posisi final diwenangkeun. Contona, senar "a, b..., c = 1, 2, 3, 4" bakal diolah jadi "a = 1; b…, = 2, 3; c = 4". Ieu diatur via Base.split_rest.
    • Literal karakter tunggal ayeuna ngadukung sintaksis anu sami sareng literal string; jelema. Sintaksis tiasa ngagambarkeun urutan UTF-8 anu teu sah, sakumaha anu diidinan ku jinis Char.
    • Ditambahkeun dukungan pikeun spésifikasi Unicode 15.
    • Kombinasi tina tuples sareng tuple karakter anu namina ayeuna tiasa dianggo salaku parameter jinis.
    • Anyar diwangun-di fungsi "getglobal (:: Modul, :: Simbol [, urutan]) "Jeung" setglobal! (:: Modul, :: Simbol, x [, urutan]) "pikeun maca jeung nulis éksklusif pikeun variabel global. Metodeu getglobal ayeuna kedah langkung dipikaresep tibatan metode getfield pikeun ngaksés variabel global.
  • Parobahan dina basa
    • Makro "@invoke" anu diwanohkeun dina versi 1.7 ayeuna diékspor sareng sayogi dianggo. Salaku tambahan, ayeuna nganggo metode "Core.Typeof(x)" tinimbang "Sakur" dina kasus dimana annotation tipe disingkahkeun pikeun argumen "x". Ieu diperlukeun pikeun mastikeun yén jenis diliwatan salaku argumen anu diprosés leres.
    • Aktipkeun ékspor fungsi "invokelatest" sareng makro "@invokelatest", diwanohkeun dina versi 1.7.
  • Perbaikan kompiler / runtime
    • Nyata ngurangan waktu pikeun palaksanaan munggaran (TTFX - Waktos pikeun palaksanaan munggaran). Precompiling pakét ayeuna nyimpen kode asli dina "pkgimage", hartina kode anu dihasilkeun ku prosés precompilation moal perlu recompiled sanggeus pakét dieusian. Pamakéan mode pkgimages tiasa dinonaktipkeun nganggo pilihan "--pkgimages=no".
    • Masalah pajeulitna kuadrat anu dipikanyaho tina inferensi tipe parantos dibenerkeun, sareng inferensi nganggo kirang memori sacara umum. Sababaraha kasus ujung kalawan fungsi panjang otomatis dihasilkeun (saperti ModelingToolkit.jl kalawan persamaan diferensial parsial jeung model kausal badag) compile leuwih gancang.
    • Nelepon kalawan argumen tanpa tipe beton ayeuna tiasa Uni-beulah dioptimalkeun pikeun suntik atawa résolusi statik, sanajan aya sababaraha calon béda-tipe pikeun dispatch. Ieu bisa ngaronjatkeun kinerja dina situasi nu tangtu dimana jenis objék teu pinuh statically ngumbar, ku statis resolving "@nospecialize-d" situs panggero jeung Ngahindarkeun recompilation.
    • Sadaya kagunaan makro @pure dina modul Base geus diganti ku Base.@assume_effects.
    • Nelepon pikeun invoke(f, invokesig, args...) kalawan tipe kirang spésifik ti ilaharna dipaké pikeun f(args...) euweuh ngabalukarkeun iket jadi recompiled.
  • Parobahan kana Pilihan Jalur Komando
    • Dina Linux sareng Windows, pilihan "--threads=auto" ayeuna nyobian nangtukeun jumlah prosesor anu sayogi dumasar kana afinitas CPU, masker anu biasana disetél dina lingkungan HPC sareng awan.
    • Parameter "--math-mode = gancang" ditumpurkeun, tinimbang nu eta disarankeun pikeun make makro "@fastmath", nu geus jelas ngartikeun semantik.
    • Pilihan "--threads" ayeuna dina format "otomatis | N[,otomatis|M]", dimana M nuduhkeun jumlah utas interaktif anu bakal dijieun (ayeuna otomatis hartina 1).
    • Ditambahkeun pilihan "—heap-size-hint=" ", anu netepkeun bangbarung saatosna ngumpulkeun sampah aktip dimimitian. Ukuranna tiasa ditetepkeun dina bait, kilobyte (1000 KB), megabyte (300 MB), atanapi gigabyte (1,5 GB).
  • Parobahan dina multithreading
    • "Threads.@spawn" ayeuna gaduh argumen kahiji pilihan sareng nilai ": standar" atanapi ": interaktif". Hiji tugas interaktif merlukeun latency respon low sarta dirancang pikeun jadi pondok atawa sering dipigawé. tugas interaktif bakal ngajalankeun on threads interaktif lamun maranéhna dieusian nalika dimimitian Julia.
    • Thread anu ngajalankeun di luar runtime Julia (sapertos ti C atanapi Java) ayeuna tiasa nelepon kode Julia nganggo "jl_adopt_thread". Ieu lumangsung sacara otomatis nalika ngasupkeun kode Julia ngaliwatan "cfunction" atawa titik éntri "@ccallable". Salaku konsekuensi, jumlah threads ayeuna bisa robah salila palaksanaan.
  • fungsi perpustakaan anyar
    • fungsi anyar "Iterators.flatmap".
    • Fungsi anyar "pkgversion (m :: Module)" pikeun meunangkeun versi pakét anu dimuat modul dibikeun, sarupa jeung "pkgdir (m :: Module)".
    • Fungsi anyar "tumpukan (x)" nu generalizes "ngurangan (hcat, x :: Véktor {<: Véktor})" kana sagala diménsi sarta ngidinan sagala iterator of iterators. Metodeu "tumpukan (f, x)" ngageneralisasi "mapreduce (f, hcat, x)" sareng langkung éfisién.
    • Makro anyar pikeun nganalisis alokasi memori "@allocations", sarupa jeung "@allocated", iwal eta mulih jumlah alokasi memori, tinimbang ukuran total memori disadiakeun.
  • fitur perpustakaan anyar
    • "RoundFromZero" ayeuna dianggo pikeun jinis sanés "BigFloat".
    • "Dict" ayeuna tiasa dikirangan sacara manual nganggo "sizehint!"
    • "@time" ayeuna sacara misah nangtukeun persentase waktos anu dianggo pikeun nyusun ulang metode anu teu sah.
  • Parobahan kana perpustakaan baku
    • Ngalereskeun masalah konkurensi dina metode iterasi pikeun Dict sareng objék turunan sanésna sapertos konci (:: Dict), nilai (:: Dict) sareng Set. Métode iterasi ieu ayeuna tiasa disebat dina Dict atanapi Set paralel pikeun jumlah utas anu henteu terbatas, salami teu aya tindakan anu ngarobih kamus atanapi set.
    • Negating fungsi predikat "!f" ayeuna mulih fungsi komposit "(!) ∘ f" tinimbang hiji fungsi anonim.
    • Fungsi keureut dimensi ayeuna tiasa dianggo dina sababaraha dimensi: "eachslice", "eachrow" sareng "eachcol" ngabalikeun objek "Slices" anu ngamungkinkeun pangiriman nyayogikeun metode anu langkung efisien.
    • Nambahkeun makro "@kwdef" kana API umum.
    • Ngalereskeun masalah sareng urutan operasi dina "fld1".
    • Asihan ayeuna salawasna stabil waktos (QuickSort parantos didesain ulang).
    • "Base.splat" ayeuna diékspor. Nilai balik mangrupakeun tipe "Base.Splat" tinimbang hiji fungsi anonim, sahingga bisa kaluaran nicely.
  • Manajer Paket
    • "Package Extensions": Rojongan pikeun ngamuat snippet kode tina bungkusan sanés anu dimuat dina sési Julia. Aplikasina sami sareng pakét "Requires.jl", tapi kompilasi sareng kompatibilitas setélan dirojong.
  • Perpustakaan LinearAljabar
    • Kusabab résiko kabingungan jeung division unsur-wijaksana, dipiceun "a / b" jeung "b \ a" métode kalawan skalar "a" jeung vektor "b", nu éta sarua jeung "a * pinv (b)".
    • Nyauran BLAS sareng LAPACK ayeuna nganggo "libblastrampoline (LBT)". OpenBLAS disayogikeun sacara standar, tapi ngawangun gambar sistem sareng perpustakaan BLAS / LAPACK sanés henteu didukung. Gantina, eta disarankeun pikeun ngagunakeun mékanisme LBT pikeun ngaganti BLAS / LAPACK kalawan set sejen aya perpustakaan.
    • "lu" ngarojong strategi rotasi matrix anyar, "RowNonZero ()", nu milih unsur rotasi non-enol munggaran pikeun pamakéan ku jenis arithmetic anyar jeung pikeun tujuan latihan.
    • "normalize (x, p = 2)" ayeuna ngarojong sagala spasi vektor dinormalisasi "x", kaasup skalar.
    • Jumlah standar benang BLAS ayeuna sami sareng jumlah utas CPU dina arsitektur ARM sareng satengah jumlah utas CPU dina arsitéktur sanés.
  • Printf: Pesen kasalahan anu didamel deui pikeun senar anu salah formatna supados langkung gampang dibaca.
  • Profil: Fungsi anyar "Profile.take_heap_snapshot (file)", nu nyerat file dina format ".heapsnapshot" basis JSON dirojong dina Chrome.
  • Acak: randn sareng randexp ayeuna dianggo pikeun sagala jinis AbstractFloat anu ngahartikeun rand.
  • REPL
    • Mencét kombinasi konci "Alt-e" ayeuna muka input ayeuna dina editor. Eusi (upami dirobah) bakal dieksekusi nalika anjeun kaluar ti éditor.
    • Kontéks modul ayeuna aktip di REPL bisa dirobah (Utama sacara standar) ngagunakeun fungsi "REPL.activate (:: Modul)" atawa ku cara nuliskeun modul dina REPL tur mencét kombinasi konci "Alt-m".
    • Mode "numbered ajakan", nu prints angka pikeun tiap input sarta output sarta nyimpen hasil ngoleksi di Out, bisa diaktipkeun maké "REPL.numbered_prompt! ()".
    • Tab parantosan mintonkeun argumen keyword sadia.
  • SuiteSparse: Kode dipindahkeun pikeun "SuiteSparse" solver ka "SparseArrays.jl". Solvers ayeuna diékspor deui ku "SuiteSparse.jl".
  • SparseArrays
    • "SuiteSparse" solvers ayeuna sadia salaku "SparseArrays" submodules.
    • Modeu panyalindungan benang UMFPACK sareng CHOLMOD parantos ningkat ku ngaleungitkeun variabel global sareng nganggo konci. Multi-threaded "ldiv!" objék UMFPACK ayeuna bisa dieksekusi aman.
    • Fungsi ékspérimén "SparseArrays.allowscalar (:: Bool)" ngidinan Anjeun pikeun nganonaktipkeun atawa ngaktipkeun indexing skalar of arrays sparse. Pungsi ieu dirancang pikeun ngadeteksi indexing skalar acak tina "SparseMatrixCSC" objék, nu mangrupakeun sumber umum tina masalah kinerja.
  • modeu failsafe anyar pikeun suites test nu terminates a test ngajalankeun mimiti dina acara gagal atawa kasalahan. Setel boh via "@testset kwarg failfast = leres" atanapi "ékspor JULIA_TEST_FAILFAST = leres". Ieu kadang diperlukeun dina CI ngajalankeun pikeun nampa pesen kasalahan mimiti.
  • Kaping: Senar kosong henteu deui salah parsed salaku nilai "DateTime", "Dates" atanapi "Times" anu sah sareng ngalungkeun "ArgumentError" dina konstruktor sareng parsing, sedengkeun "tryparse" teu ngabalikeun nanaon.
  • Paket Disebarkeun
    • Konfigurasi pakét (proyék aktip, "LOAD_PATH", "DEPOT_PATH") ayeuna disebarkeun nalika nambihan prosés pagawé lokal (misalna nganggo "addprocs (N:: Int)" atanapi nganggo bandéra garis paréntah "--procs = N").
    • "addprocs" pikeun prosés worker lokal ayeuna narima argumen ngaranna "env" pikeun ngalirkeun variabel lingkungan kana prosés worker.
  • Unicode: "graphemes(s, m:n)" mulihkeun substring tina mth ka nth graphemes dina "s".
  • Paket DelimitedFiles parantos dipiceun tina perpustakaan sistem sareng ayeuna disebarkeun salaku pakét anu misah anu kedah dipasang sacara eksplisit pikeun dianggo.
  • kagumantungan éksternal
    • Dina Linux, versi perpustakaan sistem libstdc ++ otomatis dideteksi sareng, upami langkung énggal, éta dimuat. The libstdc ++ diwangun-di kabiasaan loading heubeul, paduli versi sistem, bisa dibalikeun ku netepkeun variabel lingkungan "JULIA_PROBE_LIBSTDCXX = 0".
    • Dipiceun "RPATH" tina julia binér, nu bisa megatkeun perpustakaan di Linux Ubuntu nu gagal pikeun nangtukeun variabel "RUNPATH".
    • Perbaikan alat: Kaluaran "MethodError" sareng metode (contona tina "metode (my_func)") ayeuna diformat sareng diwarnaan saluyu sareng prinsip kaluaran metode dina jejak tumpukan.

    sumber: opennet.ru

Tambahkeun komentar