1 poin oleh GN⁺ 4 jam lalu | 1 komentar | Bagikan ke WhatsApp
  • Rilis stable Rust 1.97.0 mengubah cara pembuatan simbol pada hasil kompilasi dan alur penanganan peringatan build, dan dapat diperbarui dengan rustup update stable
  • symbol mangling v0 kini menjadi nilai bawaan stable, beralih ke skema nama simbol khusus Rust, sementara cara lama berbasis Itanium ABI bergerak menuju penghapusan
  • Cargo kini mengendalikan peringatan lewat CARGO_BUILD_WARNINGS alih-alih RUSTFLAGS=-Dwarnings, sehingga lebih mudah memisahkan kebijakan CI dan build lokal dengan allow, warn, dan deny
  • rustc kini menampilkan keluaran linker sebagai peringatan linker_messages bahkan saat proses link berhasil, dan lint ini saat ini tidak dipengaruhi oleh grup lint warnings
  • Pustaka standar mencakup stabilisasi Default untuk RepeatN, Send untuk std::fs::File pada UEFI, metode bit untuk integer dan NonZero, serta char::is_control dalam const context

Pembaruan Rust 1.97.0

  • Rust 1.97.0 adalah rilis stable, dan pengguna yang sebelumnya memasang Rust dengan rustup dapat memperbaruinya dengan perintah berikut
rustup update stable
  • Jika belum memiliki rustup, Anda bisa mendapatkannya dari halaman instalasi rustup di situs web Rust
  • Rincian perubahan tersedia dalam detailed release notes for 1.97.0
  • Untuk ikut menguji rilis mendatang, Anda dapat memakai kanal beta/nightly dengan rustup default beta atau rustup default nightly, dan bug yang ditemukan bisa dilaporkan ke Rust issue tracker

Perubahan perilaku kompilasi dan build di stable

  • symbol mangling v0 diaktifkan secara bawaan

    • Saat Rust dikompilasi menjadi object file atau biner, setiap item seperti fungsi dan static harus memiliki symbol yang unik secara global
    • Untuk menghindari benturan saat beberapa program Rust yang berbeda ditautkan bersama, Rust melakukan mangling pada nama dengan memasukkan konteks seperti jalur modul, crate tempat definisi berada, dan generic ke nama item asli
    • Skema mangling lama didasarkan pada Itanium ABI, yang juga dipakai dalam C++
    • Skema baru mempertahankan nilai instansiasi parameter generic dan mengurangi masalah ketidakkonsistenan karena sebelumnya hanya sebagian yang memakai Itanium ABI, sehingga custom demangling tetap diperlukan
    • Sejak Rust 1.59, skema mangling khusus Rust dapat dipilih dengan -Csymbol-mangling-version=v0, dan sejak November 2025 telah menjadi nilai bawaan di nightly
    • Di Rust 1.97, skema ini menjadi nilai bawaan untuk stable Rust, sementara mangling legacy hanya dapat diaktifkan di nightly
    • Rencana saat ini adalah menghapus sepenuhnya mangling legacy
    • Detail lebih lanjut dapat dilihat pada tulisan sebelumnya switching to v0 mangling on nightly
  • Kontrol peringatan di Cargo

    • Di CI, memperlakukan peringatan sebagai kegagalan build adalah praktik umum, dan sebelumnya biasanya dilakukan dengan RUSTFLAGS=-Dwarnings
    • Mulai Rust 1.97, Cargo langsung mengendalikan hubungan antara peringatan dan keberhasilan build
      • allow: menyembunyikan peringatan
      • warn: nilai bawaan, menampilkan peringatan tanpa membuat build gagal
      • deny: menolak peringatan dan memperlakukan build sebagai gagal
    • Karena perilaku fitur ini ditentukan oleh konfigurasi Cargo, fitur ini tidak membatalkan cache build bawaan
    • Jika Anda ingin sementara mengurangi noise peringatan saat memperbaiki error setelah refaktor, Anda bisa menjalankannya seperti berikut
CARGO_BUILD_WARNINGS=allow cargo check
  • Di CI, Anda dapat menetapkan CARGO_BUILD_WARNINGS=deny untuk menolak peringatan
  • Jika dipakai bersama --keep-going, Anda dapat mengumpulkan semua error dan peringatan tanpa berhenti di package pertama yang gagal
  • Konfigurasi lebih rinci tersedia di dokumentasi Cargo untuk build.warnings
  • Keluaran linker kini ditampilkan secara bawaan

    • rustc memanggil linker atas nama pengguna, dan sebelumnya keluaran linker biasanya disembunyikan jika proses link berhasil
    • Mulai Rust 1.97, pesan linker ditampilkan secara bawaan sebagai warning lint seperti berikut
warning: linker stderr: ignoring deprecated linker optimization setting '1'
  |
  = note: `#[warn(linker_messages)]` on by default
  • rustc memfilter pesan linker umum yang telah diidentifikasi sebagai false positive atau perilaku yang memang dimaksudkan
  • Setelah keluaran ini tidak lagi disembunyikan di nightly, berbagai cacat telah diperbaiki
  • Saat ini linker_messages adalah lint khusus, dan tidak dipengaruhi oleh grup lint warnings
  • Dalam banyak kasus rustc tidak bisa mengendalikan keluaran linker secara presisi, dan keluaran ini juga bisa muncul hanya pada platform tertentu
  • Jika tampak sebagai keluaran false positive dari linker, Anda dapat mengirimkan issue
  • Untuk menyembunyikan peringatan ini, Anda dapat mengatur level lint ke allow dengan menambahkan bagian lints berikut ke Cargo.toml
[lints.rust]
linker_messages = "allow"

API yang distabilkan

Log perubahan terkait

1 komentar

 
GN⁺ 4 jam lalu
Pendapat di Lobste.rs
  • Di Rust 1.97, Cargo kini bisa mengendalikan hubungan antara peringatan dan keberhasilan build, dan ini fitur baru yang sangat bagus
    Jika peringatan mengganggu saat memperbaiki error setelah refactoring, Anda bisa menyembunyikannya sementara dengan CARGO_BUILD_WARNINGS=allow cargo check, dan di CI Anda bisa membuat peringatan dianggap gagal dengan CARGO_BUILD_WARNINGS=deny. Jika dipakai bersama --keep-going, proses tidak akan berhenti di paket pertama yang gagal dan bisa mengumpulkan semua error serta peringatan

  • Mungkin lebih baik menunda upgrade sebentar. Sepertinya ada bug miscompile
    https://github.com/rust-lang/rust/issues/159035

    • Menariknya, miscompile ini ternyata sudah ada selama 10 rilis; sebelumnya hanya membaca sedikit di luar batas, tetapi sekarang tampaknya membaca jauh lebih jauh hingga menyebabkan segfault
    • Ternyata ini bug LLVM. Untungnya, perbaikannya tampak cukup langsung
      https://github.com/llvm/llvm-project/pull/208683
  • Keren. Saya penasaran apakah ada yang bisa merangkum perkembangan implementasi pattern type di sini

  • Sayangnya, never type lagi-lagi belum distabilkan kali ini. Menantikan rilis berikutnya

    • Lelucon bahwa “never type dinamai dari tanggal stabilisasinya” juga tampaknya sudah hampir basi
    • Salah satu anggota tim compiler membawakan presentasi tentang never type di RustWeek. Ini mungkin membantu memperkirakan prospek stabilisasinya dengan lebih baik, jadi saya rekomendasikan untuk menontonnya: https://www.youtube.com/watch?v=3jM4cnEVrLc