Basa pemrograman Julia 1.9 kasedhiya

Rilis basa pamrograman Julia 1.9 wis diterbitake, nggabungake kualitas kayata kinerja dhuwur, dhukungan kanggo ngetik dinamis lan alat sing dibangun kanggo program paralel. Sintaks Julia cedhak karo MATLAB, nyilih sawetara unsur saka Ruby lan Lisp. Cara manipulasi string kaya Perl. Kode proyek disebarake miturut lisensi MIT.

Fitur utama basa:

  • Kinerja dhuwur: salah sawijining tujuan utama proyek kasebut yaiku nggayuh kinerja sing cedhak karo program C. Compiler Julia adhedhasar karya proyek LLVM lan ngasilake kode mesin asli sing efisien kanggo akeh platform target;
  • Ndhukung macem-macem paradigma pemrograman, kalebu unsur pemrograman berorientasi obyek lan fungsional. Pustaka standar nyedhiyakake, antara liya, fungsi kanggo I/O asinkron, kontrol proses, logging, profiling, lan manajemen paket;
  • Ngetik dinamis: basa ora mbutuhake definisi eksplisit jinis kanggo variabel, padha karo basa pemrograman skrip. Mode interaktif didhukung;
  • Kemampuan opsional kanggo nemtokake jinis kanthi jelas;
  • Sintaksis sing cocog kanggo komputasi numerik, komputasi ilmiah, pembelajaran mesin, lan visualisasi data. Dhukungan kanggo akeh jinis data numerik lan alat kanggo paralelisasi petungan.
  • Kemampuan kanggo langsung nelpon fungsi saka perpustakaan C tanpa lapisan tambahan.

Owah-owahan utama ing Julia 1.9:

  • Fitur basa anyar
    • Ngidini tugas digawe ing modul liyane nggunakake "setproperty!(:: Modul, :: Simbol, x)".
    • Multiple assignments ora ing posisi final diijini. Contone, string "a, b…, c = 1, 2, 3, 4" bakal diproses minangka "a = 1; b…, = 2, 3; c = 4". Iki ditangani liwat Base.split_rest.
    • Literal karakter tunggal saiki ndhukung sintaksis sing padha karo literal string; sing. Sintaks bisa makili urutan UTF-8 sing ora bener, kaya sing diidini dening jinis Char.
    • Dhukungan tambahan kanggo spesifikasi Unicode 15.
    • Kombinasi tuples lan tuple karakter sing dijenengi saiki bisa digunakake minangka parameter jinis.
    • New dibangun ing fungsi "getglobal (:: Modul, :: Simbol [, urutan]) "Lan" setglobal! (:: Modul, :: Simbol, x [, urutan]) "kanggo maca lan nulis eksklusif kanggo variabel global. Metode getglobal saiki kudu luwih disenengi tinimbang metode getfield kanggo ngakses variabel global.
  • Owah-owahan ing basa
    • Makro "@invoke" sing dienal ing versi 1.7 saiki wis diekspor lan kasedhiya kanggo digunakake. Kajaba iku, saiki nggunakake metode "Core.Typeof(x)" tinimbang "Sembarang" yen anotasi jinis diilangi kanggo argumen "x". Iki perlu kanggo mesthekake yen jinis liwati minangka argumen diproses kanthi bener.
    • Ngaktifake ekspor fungsi "invokelatest" lan makro "@invokelatest", sing dikenalake ing versi 1.7.
  • Compiler / dandan runtime
    • Suda sacara signifikan wektu kanggo eksekusi pisanan (TTFX - Wektu kanggo eksekusi pisanan). Precompiling paket saiki nyimpen kode asli ing "pkgimage", tegese kode sing digawe dening proses precompilation ora perlu dikompilasi maneh sawise paket dimuat. Panggunaan mode pkgimages bisa dipateni nggunakake opsi "--pkgimages=no".
    • Masalah kerumitan kuadrat sing dikenal babagan inferensi jinis wis diatasi, lan inferensi nggunakake memori sing kurang sakabΓ¨hΓ©. Sawetara kasus pinggiran kanthi fungsi dawa sing digawe kanthi otomatis (kayata ModelingToolkit.jl kanthi persamaan diferensial sebagean lan model sebab-akibat gedhe) nglumpukake luwih cepet.
    • Telpon kanthi argumentasi tanpa jinis konkrit saiki bisa dioptimalake Union-spliting kanggo injeksi utawa resolusi statis, sanajan ana macem-macem jinis calon sing dikirim. Iki bisa ningkatake kinerja ing kahanan tartamtu ing ngendi jinis obyek ora ditanggulangi kanthi statis, kanthi ngrampungake situs panggilan "@nospecialize-d" kanthi statis lan ngindhari kompilasi ulang.
    • Kabeh panggunaan makro @pure ing modul Base wis diganti karo Base.@assume_effects.
    • Telpon kanggo invoke(f, invokesig, args...) kanthi jinis sing kurang spesifik tinimbang biasane digunakake kanggo f(args...) ora nyebabake paket kasebut dikompilasi maneh.
  • Owah-owahan ing Pilihan Command Line
    • Ing Linux lan Windows, pilihan "--threads=auto" saiki nyoba nemtokake jumlah prosesor sing kasedhiya adhedhasar afinitas CPU, topeng sing biasane disetel ing lingkungan HPC lan awan.
    • Parameter "--math-mode = cepet" dipateni, tinimbang sing disaranake nggunakake makro "@fastmath", sing nduweni semantik sing jelas.
    • Opsi "--threads" saiki ana ing format "otomatis | N[,otomatis|M]", ing ngendi M nuduhake jumlah utas interaktif sing bakal digawe (saiki tegese otomatis 1).
    • Opsi sing ditambahake "β€”heap-size-hint=" ", sing nyetel batesan sawise pengumpulan sampah aktif diwiwiti. Ukuran bisa ditemtokake ing bita, kilobyte (1000 KB), megabyte (300 MB), utawa gigabyte (1,5 GB).
  • Owah-owahan ing multithreading
    • "Threads.@spawn" saiki duwe argumen pisanan opsional kanthi nilai ": default" utawa ": interaktif". Tugas interaktif mbutuhake latensi respon sing sithik lan dirancang supaya cendhak utawa kerep ditindakake. Tugas interaktif bakal mbukak ing utas interaktif yen wis ditemtokake nalika miwiti Julia.
    • Utas sing mlaku ing njaba runtime Julia (kayata saka C utawa Jawa) saiki bisa nelpon kode Julia nggunakake "jl_adopt_thread". Iki kedadeyan kanthi otomatis nalika ngetik kode Julia liwat "cfunction" utawa titik entri "@ccallable". AkibatΓ©, jumlah utas saiki bisa diganti sajrone eksekusi.
  • Fungsi perpustakaan anyar
    • Fungsi anyar "Iterators.flatmap".
    • Fungsi anyar "pkgversion (m :: Modul)" kanggo entuk versi paket sing ngemot modul sing diwenehake, padha karo "pkgdir (m :: Modul)".
    • Fungsi anyar "tumpukan (x)" sing generalizes "ngurangi (hcat, x :: Vektor {<: Vektor})" kanggo sembarang dimensi lan ngidini sembarang iterator iterator. Metode "tumpukan (f, x)" umumake "mapreduce (f, hcat, x)" lan luwih efisien.
    • Makro anyar kanggo nganalisa memori sing diparengake "@allocations", padha karo "@allocated", kajaba sing ngasilake jumlah alokasi memori, tinimbang ukuran total memori sing diparengake.
  • Fitur perpustakaan anyar
    • "RoundFromZero" saiki bisa digunakake kanggo jinis liyane saka "BigFloat".
    • "Dict" saiki bisa dikurangi kanthi manual nggunakake "sizehint!"
    • "@time" saiki nemtokake persentase wektu sing digunakake kanggo ngumpulake maneh metode sing ora bener.
  • Owah-owahan menyang perpustakaan standar
    • Ndandani masalah konkurensi ing metode pengulangan kanggo Dict lan obyek asal liyane kayata tombol (:: Dict), nilai (:: Dict) lan Set. Cara pengulangan iki saiki bisa diarani ing Dict utawa Set paralel kanggo jumlah utas sing ora ana watesan, anggere ora ana tumindak sing ngowahi kamus utawa nyetel.
    • Ngilangi fungsi predikat "!f" saiki ngasilake fungsi gabungan "(!) ∘ f" tinimbang fungsi anonim.
    • Fungsi irisan ukuran saiki bisa digunakake ing pirang-pirang dimensi: "eachslice", "eachrow" lan "eachcol" ngasilake obyek "Slices" sing ngidini pengiriman nyedhiyakake cara sing luwih efisien.
    • Nambahake makro "@kwdef" menyang API umum.
    • Ndandani masalah karo urutan operasi ing "fld1".
    • Urut saiki tansah stabil wektu (QuickSort wis dirancang maneh).
    • "Base.splat" saiki diekspor. Nilai bali iku jinis "Base.Splat" tinimbang fungsi anonim, saΓ©ngga bisa output apik.
  • Manajer Paket
    • "Package Extensions": Dhukungan kanggo ngemot potongan kode saka paket liyane sing dimuat ing sesi Julia. Aplikasi kasebut padha karo paket "Requires.jl", nanging kompatibilitas pra-kompilasi lan setelan didhukung.
  • Pustaka Aljabar Linear
    • Amarga risiko kebingungan karo divisi unsur-wicaksana, dibusak "a / b" lan "b \ a" cara karo skalar "a" lan vektor "b", kang padha karo "a * pinv (b)".
    • Nelpon BLAS lan LAPACK saiki nggunakake "libblastrampoline (LBT)". OpenBLAS diwenehake kanthi standar, nanging mbangun gambar sistem karo perpustakaan BLAS / LAPACK liyane ora didhukung. Nanging, disaranake nggunakake mekanisme LBT kanggo ngganti BLAS / LAPACK karo perpustakaan liyane sing wis ana.
    • "lu" ndhukung strategi rotasi matriks anyar, "RowNonZero ()", sing milih unsur rotasi non-nol pisanan kanggo nggunakake jinis aritmetika anyar lan kanggo tujuan latihan.
    • "normalize (x, p = 2)" saiki ndhukung sembarang spasi vektor normal "x", kalebu skalar.
    • Jumlah utas BLAS standar saiki padha karo jumlah utas CPU ing arsitektur ARM lan setengah saka jumlah utas CPU ing arsitektur liyane.
  • Printf: Pesen kesalahan sing digarap maneh kanggo senar sing salah format supaya luwih gampang diwaca.
  • Profil: Fungsi anyar "Profile.take_heap_snapshot (file)", sing nulis file ing format ".heapsnapshot" basis JSON sing didhukung ing Chrome.
  • Random: randn lan randexp saiki bisa digunakake kanggo jinis AbstractFloat sing nemtokake rand.
  • REPL
    • Mencet kombinasi tombol "Alt-e" saiki mbukak input saiki ing editor. Isi (yen diowahi) bakal dieksekusi nalika sampeyan metu saka editor.
    • Konteks modul saiki aktif ing REPL bisa diganti (Main minangka standar) nggunakake fungsi "REPL.activate (:: Modul)" utawa ngetik modul ing REPL lan mencet kombinasi tombol "Alt-m".
    • Mode "cepet nomer", kang prints nomer kanggo saben input lan output lan nyimpen asil ngetung ing Out, bisa diaktifake nggunakake "REPL.numbered_prompt! ()".
    • Tab completion nampilake argumen tembung kunci sing kasedhiya.
  • SuiteSparse: Dipindhah kode kanggo "SuiteSparse" solver kanggo "SparseArrays.jl". Solvers saiki diekspor maneh dening "SuiteSparse.jl".
  • SparseArrays
    • Pemecah "SuiteSparse" saiki kasedhiya minangka submodul "SparseArrays".
    • Mode proteksi benang UMFPACK lan CHOLMOD wis apik kanthi ngilangi variabel global lan nggunakake kunci. Multi-threaded "ldiv!" Objek UMFPACK saiki bisa dieksekusi kanthi aman.
    • Fungsi eksperimen "SparseArrays.allowscalar (:: Bool)" ngidini sampeyan mateni utawa ngaktifake indeksasi skalar saka susunan jarang. Fungsi iki dirancang kanggo ndeteksi indeksasi skalar acak saka obyek "SparseMatrixCSC", kang sumber umum saka masalah kinerja.
  • Mode failsafe anyar kanggo suite test sing mungkasi test run ing awal yen ana kegagalan utawa kesalahan. Setel liwat "@testset kwarg failfast = bener" utawa "ekspor JULIA_TEST_FAILFAST = bener". Iki kadhangkala perlu ing CI mbukak kanggo nampa pesen kesalahan awal.
  • Tanggal: String kosong ora diurai maneh kanthi bener minangka nilai "DateTime", "Dates" utawa "Times" lan malah mbuwang "ArgumentError" ing konstruktor lan parsing, dene "tryparse" ora ngasilake apa-apa.
  • Paket Distribusi
    • Konfigurasi paket (proyek aktif, "LOAD_PATH", "DEPOT_PATH") saiki disebarake nalika nambah pangolahan buruh lokal (contone nggunakake "addprocs (N:: Int)" utawa nggunakake flag baris printah "--procs = N").
    • "addprocs" kanggo pangolahan buruh lokal saiki nampa argumen sing jenenge "env" kanggo ngirim variabel lingkungan menyang proses buruh.
  • Unicode: "graphemes(s, m:n)" ngasilake substring saka mth menyang nth graphemes ing "s".
  • Paket DelimitedFiles wis dibusak saka perpustakaan sistem lan saiki disebarake minangka paket kapisah sing kudu diinstal kanthi jelas kanggo digunakake.
  • Ketergantungan eksternal
    • Ing Linux, versi perpustakaan sistem libstdc ++ kanthi otomatis dideteksi lan, yen luwih anyar, dimuat. Prilaku loading libstdc ++ lawas, preduli saka versi sistem, bisa dibalΓ¨kakΓ© kanthi nyetel variabel lingkungan "JULIA_PROBE_LIBSTDCXX = 0".
    • Mbusak "RPATH" saka binar julia, sing bisa ngilangi perpustakaan ing Linux sing gagal nemtokake variabel "RUNPATH".
    • Alat dandan: Output saka "MethodError" lan cara (contone saka "methods(my_func)") saiki format lan colored ing sesuai karo prinsip output saka cara ing tilak tumpukan.

    Source: opennet.ru

Add a comment