Ngaleupaskeun basa programming Julia 1.8

Pelepasan basa pamrograman Julia 1.8 sayogi, ngahijikeun kualitas sapertos kinerja tinggi, dukungan pikeun ngetik dinamis sareng alat-alat anu diwangun pikeun program paralel. 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.8:

  • Fitur basa anyar
    • Widang tina struct mutable ayeuna bisa annotated salaku konstanta pikeun nyegah eta tina dirobah sarta ngidinan optimasi.
    • Jenis annotations bisa ditambahkeun kana variabel global.
    • Asép Sunandar Sunarya n-dimensi kosong tiasa didamel nganggo sababaraha titik koma di jero kurung alun-alun, contona "[;;;]" nyiptakeun susunan 0x0x0.
    • Coba blok ayeuna bisa pilihan boga blok sejenna, nu dieksekusi langsung saatos awak utama lamun euweuh kasalahan anu dialungkeun.
    • @inline sareng @noinline tiasa ditempatkeun di jero badan fungsi, anu ngamungkinkeun anjeun ngémutan fungsi anonim.
    • @inline sareng @noinline ayeuna tiasa diterapkeun kana fungsi dina situs panggero atanapi blok pikeun maksakeun sauran fungsi anu saluyu kalebet (atanapi henteu kalebet).
    • ∀, ∃ jeung ∄ diwenangkeun jadi karakter identifier.
    • Ditambahkeun dukungan pikeun spésifikasi Unicode 14.0.0.
    • Module (: ngaran, palsu, palsu) métode bisa dipaké pikeun nyieun modul nu teu ngandung ngaran, teu ngimpor Base atanapi Core, tur teu ngandung rujukan pikeun sorangan.
  • Parobahan dina basa
    • Objék Tugas anu nembé diciptakeun (@spawn, @async, jsb) ayeuna gaduh world_age pikeun padika tina Tugas indung nalika didamel, ngamungkinkeun palaksanaan anu dioptimalkeun. Pilihan aktivasina saméméhna geus sadia ngagunakeun métode Base.invokelatest.
    • Unicode unbalanced bidirectional format directives ayeuna dilarang dina string jeung komentar pikeun nyegah suntik.
    • Base.ifelse ayeuna diartikeun salaku fungsi generik tinimbang builtin a, sahingga bungkusan manjangkeun harti na.
    • Unggal ngerjakeun kana variabel global ayeuna mimiti ngaliwatan panggero pikeun ngarobah (Sakur, x) atawa ngarobah (T, x) lamun variabel global dinyatakeun jadi tipe T. Sateuacan ngagunakeun variabel global, pastikeun yén invariant ngarobah (Sakur. , x) === x salawasna bener, disebutkeun eta bisa ngakibatkeun kabiasaan teu kaduga.
    • Fungsi-fungsi anu aya ayeuna sami sareng fungsi umum sareng tiasa diprogram sacara enumerasi nganggo metode.
  • Perbaikan kompiler / runtime
    • Waktos boot dikirangan sakitar 25%.
    • The compiler basis LLVM geus dipisahkeun ti perpustakaan runtime kana perpustakaan anyar, libjulia-codegen. Éta dimuat sacara standar, janten teu kedah aya parobihan nalika dianggo normal. Dina panyebaran anu henteu peryogi kompiler (contona, gambar sistem dimana sadaya kode anu diperyogikeun dikompilasi), perpustakaan ieu (sareng katergantungan LLVM na) ngan saukur tiasa dileungitkeun.
    • Inferensi tipe kondisional ayeuna dimungkinkeun ku cara ngirimkeun argumen kana metode. Contona, pikeun Base.ifelse (isa (x, Int), x, 0) mulih :: Int sanajan tipe x kanyahoan.
    • SROA (Scalar Replacement of Aggregates) tos ningkat: ngaleungitkeun sauran getfield kalayan widang global anu terus-terusan, ngaleungitkeun struktur anu tiasa dirobih kalayan widang anu teu diinisialisasi, ningkatkeun kinerja sareng nanganan telepon getfield bersarang.
    • Inferensi tipe ngalacak rupa-rupa éfék-épék samping sareng henteu turun. Panyebaran konstan dipertimbangkeun, anu sacara signifikan ningkatkeun kinerja waktos kompilasi. Dina sababaraha kasus, contona, nelepon ka fungsi nu teu bisa inlined tapi teu mangaruhan hasilna bakal dipiceun dina runtime. Aturan pikeun épék tiasa ditimpa sacara manual nganggo Base.@assume_effects macro.
    • Precompilation (kalayan diréktif precompilation eksplisit atawa workloads husus) ayeuna ngahemat kode leuwih tipe-diartikeun, hasilna gancang palaksanaan munggaran-waktu. Sakur kombinasi metode/tipe anyar anu dibutuhkeun ku pakét anjeun, henteu paduli dimana metode éta didefinisikeun, ayeuna tiasa di-cache dina file precompilation upami aranjeunna disebat ku metode anu aya dina pakét anjeun.
  • Parobahan kana Pilihan Jalur Komando
    • Paripolah standar pikeun ngawaskeun deklarasi @inbounds ayeuna janten pilihan otomatis dina "--check-bounds=yes|no|otomatis".
    • Pilihan anyar "--strip-metadata" pikeun ngahapus docstrings, inpormasi lokasi sumber, sareng nami variabel lokal nalika nyiptakeun gambar sistem.
    • Pilihan anyar "--strip-ir" pikeun ngidinan kompiler pikeun ngahapus perwakilan kode sumber panengah nalika ngawangun gambar sistem. Gambar anu dihasilkeun ngan bakal tiasa dianggo upami "--compile=all" dianggo atanapi upami sadaya kode anu diperyogikeun tos disusun.
    • Upami karakter "-" ditetepkeun tibatan nami file, maka kode anu tiasa dieksekusi dibaca tina aliran input standar.
  • parobahan rojongan multithreading
    • Threads.@threads sacara standar ngagunakeun pilihan scheduling anyar: dinamis, nu béda ti mode saméméhna yén iterasi bakal dijadwalkeun dinamis sakuliah thread worker sadia tinimbang ditugaskeun ka unggal thread. Modeu ieu ngamungkinkeun panyebaran loop anu langkung saé sareng @spawn sareng @threads.
  • fungsi perpustakaan anyar
    • eachsplit (str) pikeun ngaéksekusi pamisah (str) sababaraha kali.
    • allequal(itr) pikeun nguji naha sakabéh elemen dina iterator sarua.
    • hardlink (src, dst) bisa dipaké pikeun nyieun tumbu teuas.
    • setcpuaffinity (cmd, cpus) pikeun nyetél afinitas inti prosésor kana prosés anu diluncurkeun.
    • diskstat(path=pwd()) pikeun meunangkeun statistik disk.
    • Macro @showtime anyar pikeun nampilkeun garis anu dievaluasi sareng laporan @time.
    • LazyString sareng lazy"str" ​​​​makro parantos ditambah pikeun ngadukung konstruksi puguh pesen kasalahan dina jalur kasalahan.
    • Ngalereskeun masalah konkurensi dina Dict sareng objék turunan sanésna sapertos konci (:: Dict), nilai (:: Dict) sareng Set. Métode Iterasi ayeuna tiasa disebat dina kamus atanapi set, salami teu aya telepon anu ngarobih kamus atanapi set.
    • @time sareng @timev ayeuna gaduh pedaran pilihan, anu ngamungkinkeun anjeun ngémutan sumber laporan waktos, contona. @time "Evaluating foo" foo ().
    • rentang nyokot boh eureun atawa panjang salaku hijina argumen keyword na.
    • precision na setprecision ayeuna narima basa salaku keyword a
    • Obyék stop kontak TCP ayeuna nyadiakeun métode closewrite tur ngarojong pamakéan mode satengah buka.
    • extrema ayeuna narima argumen init.
    • Iterators.countfrom ayeuna narima sagala jenis nu ngahartikeun hiji + metoda.
    • @time ayeuna allocates nu% waktu spent recompiling métode jeung tipe robah.
  • Parobahan Perpustakaan Standar
    • Tombol kalawan nilai Euweuh ayeuna dihapus tina lingkungan di addenv.
    • Iterators.reverse (jeung kituna panungtungan) ngarojong eachline.
    • Fungsi panjang pikeun rentang tina jenis nu tangtu euweuh pariksa keur integer ngabahekeun. Fungsi anyar, checked_length, sayogi; ngandung logika kontrol transfer bit. Upami diperlukeun, make SaferIntegers.jl pikeun ngawangun tipe rentang.
    • The Iterators.Reverse iterator implements eachindex ngabalikeun lamun mungkin.
  • Manajer Paket
    • Indikator ⌃ sareng ⌅ anyar di gigireun bungkusan dina status "pkg>" dimana versi anyarna sayogi. ⌅ nunjukkeun yén versi anyar teu tiasa dipasang.
    • Anyar luntur :: argumen Bool mun Pkg.status (--katinggaleun jaman atawa -o dina modeu REPL) pikeun nembongkeun informasi ngeunaan bungkusan tina versi saméméhna.
    • Compat anyar :: argumen Bool mun Pkg.status (--compat atanapi -c dina modeu REPL) pikeun nembongkeun sagala [compat] éntri dina Project.toml.
    • Anyar "pkg> compat" (jeung Pkg.compat) mode pikeun nyetel éntri kasaluyuan proyék. Nyadiakeun redaktur interaktif ngaliwatan "pkg> compat" atawa kontrol rékaman langsung via "pkg> Foo 0.4,0.5", nu bisa ngamuat rékaman ayeuna ngaliwatan tab parantosan. Maksudna, "pkg> compat Fo " otomatis diropéa kana "pkg>Foo 0.4,0.5" pikeun ngidinan ngédit éntri nu geus aya.
    • Pkg ayeuna ngan ukur nyobian ngaunduh bungkusan tina server pakét upami server ngawas pendaptaran anu ngandung pakét.
    • Pkg.instantiate ayeuna bakal ngaluarkeun peringatan nalika Project.toml teu sinkron sareng Manifest.toml. Hal ieu dilakukeun dumasar kana hash tina deps proyék jeung rékaman compat (widang séjén teu dipaliré) dina manifest nalika resolving eta, ku kituna sagala parobahan deps Project.toml atawa rékaman compat bisa ditandaan tanpa resolving.
    • Upami "pkg> add" teu tiasa mendakan pakét kalayan nami anu dipasihkeun, éta ayeuna bakal nyarankeun bungkusan anu nami anu sami anu tiasa ditambihan.
    • Versi julia disimpen dina manifest euweuh kaasup angka ngawangun, hartina master ayeuna bakal ditulis salaku 1.9.0-DEV.
    • Test abort "pkg>" ayeuna bakal dideteksi leuwih konsistén, sarta bakal bener balik ka REPL.
  • InteractiveUtils
    • Macro @time_imports anyar pikeun ngalaporkeun waktos anu dihabiskeun pikeun ngimpor bungkusan sareng kagumantunganana, nyorot waktos kompilasi sareng kompilasi deui salaku persentase impor.
  • aljabar liniér
    • Submodul BLAS ayeuna ngadukung fungsi BLAS spr! level-2.
    • Perpustakaan baku LinearAlgebra.jl ayeuna sagemblengna bebas tina SparseArrays.jl, boh tina kode sumber sareng sudut pandang nguji unit. Salaku konsekuensi, arrays sparse teu deui balik (implicitly) ku métode ti LinearAlgebra dilarapkeun ka Base atanapi LinearAlgebra objék. Khususna, ieu nyababkeun parobahan parobihan di handap ieu:
      • Concatenations maké matriks "sparse" husus (misalna diagonal) ayeuna balik matriks padet; Salaku konsekuensi, widang D1 jeung D2 objék SVD dijieun ku getproperty panggero ayeuna matrices padet.
      • Metoda sarupa (:: SpecialSparseMatrix, :: Tipe, :: Dims) balik matrix null padet. Hasilna, produk tina dua-, tilu-, jeung matriks tridiagonal simetris saling ngakibatkeun generasi matriks padet. Salaku tambahan, ngawangun matriks anu sami sareng tilu argumen tina matriks "sparse" khusus tina matriks (non-statis) ayeuna gagal kusabab "nol (:: Type{Matrix{T}})".
  • Printf
    • %s jeung %c ayeuna make argumen textwidth pikeun pormat lebar.
  • keureutan
    • Profil beban CPU ayeuna ngarékam metadata kalebet utas sareng tugas. Profile.print () boga argumen groupby anyar nu ngidinan Anjeun pikeun grup threads, tugas atawa subthreads / tugas, tugas / threads, sarta threads sarta tugas argumen nyadiakeun nyaring. Sajaba ti, persentase utilization ayeuna dilaporkeun boh salaku sakabéh atawa per thread, gumantung kana naha thread dianggurkeun atawa henteu dina unggal sampel. Profile.fetch () ngawengku metadata anyar sacara standar. Pikeun kasaluyuan mundur sareng konsumen éksternal data profil, éta tiasa dikaluarkeun ku ngalangkungan include_meta=false.
    • Modul Profile.Allocs anyar ngidinan Anjeun pikeun profil alokasi memori. A renik tumpukan tina tipe jeung ukuran unggal alokasi memori dirékam, sarta sample_rate argumen ngamungkinkeun jumlah configurable of alokasi bisa skipped, ngurangan kinerja overhead.
    • Propil CPU durasi tetep ayeuna tiasa dijalankeun ku pangguna nalika tugas dijalankeun tanpa ngamuat profil heula, sareng laporanna bakal ditingalikeun nalika ngajalankeun. Dina MacOS sareng FreeBSD, pencét ctrl-t atanapi nelepon SIGINFO. Pikeun platform sejen, aktipkeun SIGUSR1, i.e. % maehan -USR1 $ julia_pid. Ieu teu sadia dina Windows.
  • REPL
    • RadioMenu ayeuna ngadukung potong kompas keyboard tambahan pikeun pilihan langsung pilihan.
    • Runtuyan "?(x, y" dituturkeun ku mencét TAB mintonkeun sadaya métode nu bisa disebut kalawan argumen x, y, .... (A spasi ngarah nyegah anjeun asup kana mode pitulung.) "MyModule.?(x, y " ngawatesan pilarian kana "MyModule". Mencét TAB merlukeun sahenteuna hiji argumen tina tipe leuwih spésifik ti Sakur. Atawa ngagunakeun SHIFT-TAB tinimbang TAB pikeun ngidinan sagala métode cocog.
    • Variabel global anyar err ngidinan Anjeun pikeun meunangkeun iwal panganyarna, sarupa jeung kabiasaan ans kalawan respon panungtungan. Ngasupkeun err reprints inpo iwal.
  • SparseArrays
    • Dipindahkeun kode SparseArrays ti gudang Julia kana gudang SparseArrays.jl éksternal.
    • The concatenation anyar fungsi sparse_hcat, sparse_vcat, sarta sparse_hvcat balik tipe SparseMatrixCSC paduli jenis argumen input. Ieu janten diperlukeun pikeun ngahijikeun mékanisme pikeun gluing matrices sanggeus misahkeun LinearAlgebra.jl jeung kode SparseArrays.jl.
  • logging
    • Tingkat logging standar BelowMinLevel, Debug, Info, Warn, Error and AboveMaxLevel ayeuna diékspor ti perpustakaan Logging standar.
  • Unicode
    • Ditambahkeun fungsi isequal_normalized pikeun mariksa kasaruaan Unicode tanpa sacara eksplisit ngawangun string anu dinormalisasi.
    • Fungsi Unicode.normalize ayeuna narima kecap konci charttransform, nu bisa dipaké pikeun nyadiakeun pemetaan karakter custom, sarta fungsi Unicode.julia_chartransform ogé disadiakeun pikeun baranahan pemetaan dipaké nalika Julia parser normalizes identifiers.
  • ujian
    • '@test_throws "some message" triggers_error ()' ayeuna tiasa dianggo pikeun nguji naha téks kasalahan anu ditampilkeun ngandung kasalahan "sababaraha pesen", henteu paduli jinis iwal husus. Ekspresi biasa, daptar string, sareng fungsi anu cocog ogé dirojong.
    • @testset foo () ayeuna tiasa dianggo pikeun ngadamel set tés tina fungsi anu dipasihkeun. Ngaran kasus tés nyaéta nami fungsi anu disebut. Fungsi anu disebut tiasa ngandung @test sareng definisi @testset anu sanés, kalebet pikeun nelepon ka fungsi anu sanés, bari ngarékam sadaya hasil tés panengah.
    • TestLogger na LogRecord ayeuna diékspor ti perpustakaan Test baku.
  • Disebarkeun
    • SSHManager ayeuna ngadukung benang padamel sareng bungkus csh/tcsh via metode addprocs () sareng parameter shell=:csh.
  • Parobihan anu sanés
    • GC.enable_logging (leres) bisa dipaké pikeun log unggal operasi kempelan sampah jeung waktu jeung jumlah memori dikumpulkeun.

sumber: opennet.ru

Tambahkeun komentar