Julia 1.11: Fitur teratas dan pembaruan penting

 – Beragampengetahuan
10 mins read

Julia 1.11: Fitur teratas dan pembaruan penting – Beragampengetahuan

Oleh: Steven Whitaker

Diposting ulang dari:

Versi baru bahasa pemrograman Julia baru saja dirilis! Versi 1.11 saat ini merupakan versi stabil terbaru dari Julia.

Rilis ini merupakan rilis minor, yang berarti mencakup perbaikan bahasa dan perbaikan bug, namun juga harus sepenuhnya kompatibel dengan kode yang ditulis pada versi Julia sebelumnya (mulai dari versi 1.0 dan seterusnya).

Dalam postingan kali ini, kita akan melihat beberapa fitur dan peningkatan yang diperkenalkan pada Julia versi terbaru ini. Baca keseluruhan postingan atau klik tautan di bawah untuk beralih ke fitur yang Anda minati.

Jika Anda baru mengenal Julia (atau hanya perlu penyegaran), silakan lihat seri tutorial Julia kami, dimulai dengan cara menginstal Julia dan VS Code.

Aspek penting dari pembuatan versi semantik (juga disebut SemVer, yang diikuti oleh paket Julia dan Julia) adalah bahwa pengguna API publik memiliki akses. Intinya, SemVer mengklaim bahwa pembaruan paket kecil tidak akan merusak kompatibilitas dengan kode yang sudah ada yang menggunakan API publik. Namun, bagian kode lainnya bebas diubah dalam pembaruan kecil. Sebagai ilustrasi:

  • Jika saya punya sum([1, 2, 3]) dalam kode saya yang saya tulis di Julia 1.10, kode itu terus muncul kembali 6 di Julia 1.11 karena sum adalah bagian dari API publik Julia. Tapi itu mungkin rusak di Julia 2.0. (Namun, semoga saja tidak!)
  • Jika saya punya SomePackage._internal_function(0) pada kode yang saya tulis menggunakan SomePackage v1.2.0, mungkin saja gagal ketika SomePackage diupgrade ke v1.2.1 (karena misalnya: _internal_function telah dihapus). Perubahan tersebut diperbolehkan karena _internal_function bukan bagian dari API publik.

Jadi pertanyaannya adalah, bagaimana pengguna mengetahui apa itu API publik suatu paket? Secara historis, ada beberapa konvensi yang diikuti:

  • Nama yang akan diekspor (mis. export DataFrame) adalah bagian dari API publik.
  • Nama yang tidak diekspor diawali dengan garis bawah (misalnya: SomePackage._internal_function) bukan bagian dari API publik.

Tapi ada fungsi lain seperti ForwardDiff.gradient?Fungsi itulah yang menyebabkan 99% pengguna mengunduh paket ForwardDiff, tetapi tidak diekspor! Kabar baiknya adalah ini masih menjadi bagian dari API publik karena, pengelola ForwardDiff mengatakan demikian. Atau mungkin karena dokumentasinya mengatakan demikian. Atau mungkin karena cukup banyak orang yang menggunakannya? Terkadang tidak sepenuhnya jelas.

Namun sekarang di Julia 1.11, kode Anda dapat mengekspresikan API publik! Ini berkat fitur baru public kata kunci.Sekarang, semua simbol dicatat dengan publicadalah bagian dari API publik. (Perhatikan bahwa ini merupakan tambahan pada simbol yang diekspor, mis func akan dianggap sebagai API publik dengan keduanya export func atau public func.)

Cara menggunakan public sama dengan export.Misalnya:

module MyPackagepublic add1"""Docstring for a public function."""add1(x) = x + 1"""Docstring for a private function."""private_add1(x) = x + 1end

Dengan using MyPackagetidak ada ikon yang disediakan (kecuali MyPackage),Misalnya, add1 hanya dapat dipanggil melalui MyPackage.add1karena tidak ada yang diekspor dengan export.Dan keduanya MyPackage.add1(1) Dan MyPackage.private_add1(1) bekerja add1 bersifat publik dan private_add1 bersifat pribadi. Jadi, public kata kunci tidak mengubah cara kerja atau penggunaan MyPackage.

Namun, public kata kunci membuat beberapa perubahan perilaku. Perbedaan yang paling menonjol adalah ketika menampilkan dokumentasi dalam mode bantuan REPL:

help?> MyPackage.add1  Docstring for a public function.help?> MyPackage.private_add1   Warning      The following bindings may be internal; they may change or be removed in future versions:          MyPackage.private_add1  Docstring for a private function.

Lihat peringatan dengan private_add1?Peringatan tersebut, selain dokumentasi API publik yang lebih sederhana, dapat membantu mengurangi penggunaan paket internal (terutama penggunaan yang tidak disengaja), yang pada gilirannya dapat membantu meningkatkan stabilitas paket Julia.

Singkatnya public kata kunci tidak mengubah perilaku atau penggunaan paket, ia menyediakan mekanisme untuk menyatakan API publik dan memberikan peringatan saat melihat dokumentasi tentang fungsi internal. Hal ini, pada gilirannya, dapat meningkatkan stabilitas paket Julia karena paket tersebut lebih mematuhi API publik.

Baca lebih lanjut tentang public di panduan pengguna Julia.

Sekarang ada titik masuk standar ketika menjalankan skrip dari baris perintah.

Julia 1.11 diperkenalkan @main makro. Makro ini, ketika ditempatkan dalam skrip dan ketika skrip dijalankan melalui baris perintah, akan memberitahu Julia untuk menjalankan fungsi bernama mainsetelah menjalankan kode dalam skrip.main akan dilewati satu Vector milik Stringberisi argumen baris perintah yang diteruskan ke skrip.

Untuk digunakan @maincukup sertakan dalam skrip Anda pada barisnya sendiri setelah ditentukan main fungsi. (Jika @main terjadi sebelum penetapan mainMisalnya di awal script akan muncul error, jadi urutannya penting.)

Tentunya untuk melakukan hal tersebut harus ada fungsinya maindengan metode yang memerlukannya Vector{String} sebagai satu-satunya masukan.

Mari kita lihat contoh untuk mengilustrasikan cara kerjanya. Misalkan kita memiliki yang berikut ini test.jl:

print_val(x) = print(x)function main(args)    print_val(args)end@main

Jika kita menjalankan file ini di REPLwith include("test.jl")fungsi print_val Dan mainakan ditentukan, tapi main tidak akan dipanggil. Ini adalah perilaku yang sama seperti sebelumnya @main tidak hadir.

Sebaliknya jika kita menjalankan file ini melalui baris perintah julia test.jlfungsi print_val Dan mainakan ditentukan dan kemudian main akan dipanggil dengan argumen baris perintah sebagai input. Sebagai ilustrasi:

  • julia test.jl akan menelepon main(String[])(karena tidak ada argumen baris perintah yang diteruskan).
  • julia test.jl 1 hello akan menelepon main(["1", "hello"]).

Karena @mainfile Julia dapat memiliki perilaku berbeda tergantung apakah dijalankan sebagai skrip atau tidak.

Jika Anda familiar dengan Python,@main dapat mengingatkan Anda tentangif __name__ == "__main__".Namun, ada satu perbedaan signifikan:

  • Dengan Python, jika script1.py impor script2.pyDan script2.py ada pemeriksaan “jika utama”, sedang berjalan script1.py sebagai skrip tidak akan berjalan script2.pyadalah kode “jika utama”.
  • Di Julia, jika script1.jl termasuk script2.jlDan script2.jl kegunaan @mainberlari script1.jl seperti naskahakan berlari script2.jl‘S main fungsi.(Teknis:Kecuali script1.jl ditentukan dengan tepat main metode, dalam hal ini script1.jl‘S main akan dipanggil, meskipun script1.jl tidak termasuk @main.)

Ini sama sekali bukan milik Julia @main itu buruk atau salah; penting untuk mengetahui bahwa cara kerjanya berbeda dari Python. Dan sangat menyenangkan sekarang memiliki titik masuk standar untuk skrip Julia!

Baca lebih lanjut tentang @main di panduan pengguna Julia.

Julia 1.11 memperkenalkan paket perpustakaan standar StyledStrings.jl yang baru. Paket ini menyediakan cara mudah untuk menambahkan gaya pada string. StyledStrings membuat pencetakan string bergaya jauh lebih mudah daripada menelepon printstyledterutama bila bagian string yang berbeda memiliki gaya yang berbeda.

Cara termudah untuk membuat string bergaya adalah dengan styled"...".Misalnya:

using StyledStringsstyled_string = styled"{italic:This} is a {bold,bright_cyan:styled string}!"

Kemudian, saat mencetak string yang diberi gaya, akan ditampilkan sesuai dengan anotasi yang diberikan.

Selain itu, karena informasi gaya disimpan bersama string, informasi tersebut dapat dengan mudah disimpan di seluruh operasi string seperti menggabungkan string atau mendapatkan substring.

Lihat dokumentasi untuk informasi selengkapnya tentang variasi anotasi berbeda yang didukung StyledStrings.

Dan inilah beberapa pembicaraan Julia Bang di JuliaCon 2024:

Geser StyledStrings

Julia 1.11 memudahkan penentuan secara terprogram apakah suatu fungsi memiliki docstring atau tidak. Hal ini dapat berguna, misalnya untuk pengujian CI, untuk memastikan paket didokumentasikan sepenuhnya.

Ada dua fungsi untuk tujuan ini. Yang pertama adalah Docs.hasdocdigunakan untuk menanyakan fungsi tertentu.hasdoc membutuhkan dua input: modul untuk mencari dan memberi nama (sebagai Symbol) dari fungsinya. Misalnya:

julia> Docs.hasdoc(Base, :sum)true

Fungsi lain yang disediakan adalah Docs.undocumented_namesmengembalikan daftar nama publik modul tanpa docstring. (Perhatikan bahwa nama publik menyertakan simbol yang diekspor melalui exportserta simbol-simbol yang dinyatakan diadopsi oleh publik public.)Misalnya:

julia> module Example       export f1, f4       public f2, f5       "Exported, documented"       f1() = 1       "Public, documented"       f2() = 2       "Internal, documented"       f3() = 3              f4() = 4              f5() = 5              f6() = 6       endMain.Examplejulia> Docs.undocumented_names(Example)3-element Vector{Symbol}: :Example :f4 :f5

Menarik untuk melihat alat apa yang muncul untuk memanfaatkan fungsi-fungsi ini.

itu @timed makro memberikan informasi waktu yang lebih lengkap di Julia 1.11.

Sebelum,@timed memberikan informasi tentang waktu proses dan alokasi/pengumpulan sampah, tetapi tidak memberikan informasi tentang waktu kompilasi. Sekarang, waktu kompilasi sudah termasuk.

Tapi kenapa peduli? @timedKapan @time Sudahkah Anda memberikan semua informasi itu? Karena @time dikodekan keras untuk dicetak stdoutartinya tidak ada cara untuk menangkap informasi, misalnya untuk tujuan logging.

Saya sebenarnya punya proyek yang ingin saya alihkan hasilnya @timeke file log. Saya tidak bisa menggunakannya begitu saja redirect_stdiokarena itu juga akan mengarahkan output dari kode waktunya. Saya akhirnya menggunakannya @timed dengan Base.time_printuntuk menghasilkan laporan log, tapi saya kecewa @timed tidak memberi saya informasi tentang waktu kompilasi. Nah, sekarang ada!

Kuis populer: Manakah dari berikut ini yang merupakan cara yang benar untuk membuat rangkaian bilangan logaritma yang berjarak sama?

  1. log.(range(exp(a), exp(b), N))
  2. exp.(range(log(a), log(b), N))

Kadang-kadang saya perlu menggunakan angka-angka yang berjarak logaritmik, tidak terlalu sering sehingga saya harus mengingat ekspresi mana yang harus digunakan, tetapi cukup sering saya merasa tidak menyukai latihan-latihan secara mental. Saya harus melaluinya setiap saat hanya untuk mengingat di mana harus meletakkan nomor itu. exppasir logs.Mungkin saya harus meluangkan waktu untuk menghafal jawabannya…

Tapi sekarang itu tidak penting! Jawaban yang benar bukanlah 1 atau 2, tapi logrange(a, b, N)!Berikut adalah contoh penggunaan:

julia> logrange(1, 10, 5)5-element Base.LogRange{Float64, Base.TwicePrecision{Float64}}: 1.0, 1.77828, 3.16228, 5.62341, 10.0

Saya tahu ini perubahan yang cukup kecil tetapi merupakan tambahan logrange di Julia 1.11 mungkin adalah perubahan yang paling saya sukai. Saya sangat senang melihat berita ini!

Dalam postingan ini, kita mempelajari tentang beberapa fitur dan peningkatan baru yang diperkenalkan di Julia 1.11. Pembaca yang penasaran dapat melihat catatan rilis untuk mengetahui daftar lengkap perubahannya.

Perhatikan juga bahwa dengan rilis baru, Julia 1.10 kini akan menjadi versi LTS (dukungan jangka panjang), menggantikan Julia 1.6. Akibatnya, Julia 1.10 akan menerima pembaruan pemeliharaan, bukan Julia 1.6 (sekarang tidak lagi didukung) hingga versi LTS berikutnya diumumkan. Jika Anda ingin mempelajari lebih lanjut tentang perubahan yang dibawa Julia 1.10, lihat postingan kami!

Apa yang paling Anda sukai di Julia 1.11? Beri tahu kami di komentar di bawah!

]]>

Contents

Software Terbaru Saat Ini



Aplikasi yang sedang trend saat ini

object oriented programming, programming language, programming adalah, web programming, belajar programming, tournament software, software, software adalah, contoh software, apa itu software, pengertian software, aplikasi, aplikasi penghasil uang, aplikasi bokep, aplikasi video, programming

#Julia #Fitur #teratas #dan #pembaruan #penting

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *