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
- Diijini nggawe tugas ing modul liyane nggunakake "setproperty!(:: Modul, :: Simbol, x)".
- Multiple assignments diijini ing posisi non-final. Contone, string "a, b…, c = 1, 2, 3, 4" bakal dianggep minangka "a = 1; b…, = 2, 3; c = 4". Iki ditangani dening Base.split_rest.
- Literal karakter tunggal saiki ndhukung sintaksis sing padha karo literal string; yaiku, sintaksis bisa makili urutan UTF-8 ora bener, minangka diijini dening jinis Char.
- Dhukungan tambahan kanggo spesifikasi Unicode 15.
- Kombinasi tuple bersarang 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 dikenalake ing 1.7 saiki diekspor lan kasedhiya kanggo digunakake. Kajaba iku, saiki nggunakake metode Core.Typeof(x) tinimbang Sembarang ing kasus ngendi anotasi jinis diilangi kanggo argumen x. Iki kanggo mesthekake yen jinis liwati minangka argumen ditangani kanthi bener.
- Ngaktifake ekspor fungsi "invokelatest" lan makro "@invokelatest" sing dikenalake ing versi 1.7.
- Compiler / dandan runtime
- Wektu kanggo eksekusi pisanan (TTFX) wis suda sacara signifikan. Paket precompilation saiki nyimpen kode mesin ing "pkgimage", tegese kode sing digawe dening precompilation ora perlu dikompilasi maneh sawise ngemot paket kasebut. Panggunaan mode pkgimages bisa dipateni kanthi pilihan "--pkgimages=no".
- Masalah kompleksitas kuadrat sing dikenal kanthi inferensi jinis wis diatasi, lan inferensi nggunakake memori sing kurang sakabèhé. Sawetara kasus pinggiran kanthi fungsi dawa sing digawe kanthi otomatis (umpamane ModelingToolkit.jl kanthi persamaan diferensial parsial lan model sebab-akibat gedhe) nglumpukake luwih cepet.
- Telpon kanthi argumentasi tanpa jinis tartamtu saiki bisa dioptimalake kanthi pamisah serikat kanggo injeksi utawa resolusi statis, sanajan ana macem-macem calon sing dikirim saka macem-macem jinis. 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=fast" wis dipateni, lan disaranake nggunakake makro "@fastmath", sing nduweni semantik sing jelas.
- Opsi "--threads" saiki duwe format "otomatis | N[,otomatis|M]", ing ngendi M nemtokake jumlah utas interaktif sing bakal digawe (saiki otomatis tegese 1).
- Opsi sing ditambahake "—heap-size-hint=" ", sing nyetel batesan sawise koleksi 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 ": default" utawa ": interaktif". Tugas interaktif mbutuhake latensi sing sithik lan dirancang supaya cendhak utawa kerep dieksekusi. Tugas interaktif bakal mbukak ing utas interaktif yen wis ditemtokake nalika Julia diwiwiti.
- Utas sing mlaku ing njaba runtime Julia (kayata saka C utawa Jawa) saiki bisa njaluk 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 nalika runtime.
- 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 nampa sembarang iterator iterator. Cara "tumpukan (f, x)" umum "mapreduce (f, hcat, x)" lan luwih efisien.
- Makro anyar kanggo nganalisa memori sing dialokasikan "@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 kanthi kapisah nuduhake persentase wektu sing digunakake kanggo nyusun ulang metode sing ora bener.
- Owah-owahan ing perpustakaan standar
- Masalah konkurensi wis diatasi 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 ing jumlah utas sing ora ana watesan, yen ora ana tumindak sing ngowahi kamus utawa nyetel.
- Negasi fungsi predikat "!f" saiki ngasilake fungsi gabungan "(!) ∘ f" tinimbang fungsi anonim.
- Fungsi ngiris dimensi saiki bisa digunakake ing pirang-pirang dimensi: saben irisan, saben baris, lan saben colokan kabeh ngasilake obyek Irisan, sing ngidini pengiriman nyedhiyakake cara sing luwih efisien.
- Makro "@kwdef" wis ditambahake menyang API umum.
- Ndandani masalah karo urutan operasi ing "fld1".
- Urut saiki tansah stabil saka wektu (QuickSort wis reworked).
- "Base.splat" saiki diekspor. Nilai bali saka jinis "Base.Splat" tinimbang fungsi anonim, saéngga bisa dicithak kanthi apik.
- Manajer Paket
- "Paket Ekstensi": Dhukungan kanggo ngemot potongan kode saka paket liyane sing dimuat ing sesi Julia. Padha ing panggunaan kanggo "Requires.jl" paket, nanging ndhukung precompilation lan kompatibilitas setelan.
- Pustaka Aljabar Linear
- Amarga risiko kebingungan karo pembagian unsur-wicaksana, metode "a / b" lan "b \ a" kanthi skalar "a" lan vektor "b" wis dibusak, sing padha karo "a * pinv (b)".
- "Libblastrampoline (LBT)" saiki digunakake kanggo njaluk BLAS lan LAPACK. OpenBLAS dikirim minangka 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 kasedhiya.
- "lu" ndhukung strategi rotasi matriks anyar "RowNonZero ()" sing milih unsur non-nol pisanan rotasi kanggo nggunakake jinis aritmetika anyar lan kanggo tujuan pendidikan.
- "normalize (x, p = 2)" saiki ndhukung sembarang spasi vektor norma "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 kanggo senar sing cacat wis digarap maneh supaya luwih gampang diwaca.
- Profil: Fungsi anyar "Profile.take_heap_snapshot (file)" sing nulis file ing format ".heapsnapshot" basis JSON sing didhukung Chrome.
- Random: randn lan randexp saiki bisa digunakake kanggo jinis AbstractFloat sing nemtokake rand.
- REPL
- Pencet Alt-e saiki mbukak input saiki ing editor. Isi (yen diganti) bakal dieksekusi nalika metu saka editor.
- Konteks modul saiki aktif ing REPL bisa diganti (kanthi standar iku Main) nggunakake fungsi "REPL.activate (:: Modul)" utawa ngetik modul ing REPL lan mencet kombinasi tombol "Alt-m".
- Mode "nomer cepet", kang prints nomer kanggo saben input lan output lan nyimpen asil evaluasi ing Out, bisa diaktifake karo "REPL.numbered_prompt! ()".
- Tab completion nampilake argumen tembung kunci sing kasedhiya.
- SuiteSparse: Kode kanggo "SuiteSparse" solver wis dipindhah menyang "SparseArrays.jl". Solvers saiki diekspor maneh dening "SuiteSparse.jl".
- SparseArrays
- Pemecah "SuiteSparse" saiki kasedhiya minangka submodul saka "SparseArrays".
- Mode proteksi benang UMFPACK lan CHOLMOD wis apik kanthi ngilangi variabel global lan nggunakake kunci. Multithreaded "ldiv!" obyek UMFPACK saiki bisa dieksekusi kanthi aman.
- Fungsi eksperimen "SparseArrays.allowscalar (:: Bool)" ngidini sampeyan mateni utawa ngaktifake indeksasi skalar saka susunan jarang. Fungsi iki dimaksudaké kanggo ndeteksi indeksasi skalar sengaja saka obyek "SparseMatrixCSC", kang sumber umum saka masalah kinerja.
- Mode failfast anyar kanggo set test sing mungkasi test run luwih awal yen gagal utawa kesalahan. Setel liwat "@testset kwarg failfast = bener" utawa "ekspor JULIA_TEST_FAILFAST = bener". Iki asring dibutuhake ing CI mbukak kanggo njaluk pesen kesalahan awal.
- Tanggal: String kosong ora diurai maneh kanthi bener minangka nilai DateTime, Dates, utawa Times sing sah lan malah mbuwang ArgumentError ing konstruktor lan parsing, dene tryparse ora ngasilake apa-apa.
- Paket sing disebarake
- Konfigurasi paket (proyek aktif, "LOAD_PATH", "DEPOT_PATH") saiki disebarake nalika nambah pangolahan buruh lokal (contone karo "addprocs (N:: Int)" utawa nganggo 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 m-th menyang grapheme n-th ing "s".
- Paket DelimitedFiles wis dipindhah metu 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 dimuat yen luwih anyar. Prilaku lawas loading dibangun ing libstdc ++ preduli saka versi sistem bisa dibalèkaké dening nyetel variabel lingkungan "JULIA_PROBE_LIBSTDCXX = 0".
- "RPATH" wis dibusak saka binar julia, sing bisa ngrusak perpustakaan ing Linux sing gagal nemtokake variabel "RUNPATH".
- Alat dandan: Output saka "MethodError" lan cara (contone saka "methods(my_func)") saiki format lan colored kanggo cocog karo output cara tumpukan.
Source: opennet.ru
