1 पॉइंट द्वारा GN⁺ 4 시간 전 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • Rust 1.97.0 stable रिलीज़ कंपाइल आउटपुट के symbol जनरेशन तरीके और build warning हैंडलिंग फ्लो को बदलती है, और rustup update stable से अपडेट किया जा सकता है
  • symbol mangling v0 अब stable का डिफ़ॉल्ट है, जिससे Rust-विशेष symbol naming system पर स्विच होता है, और पुराना Itanium ABI-आधारित तरीका हटाने की दिशा में बढ़ रहा है
  • Cargo अब RUSTFLAGS=-Dwarnings की जगह CARGO_BUILD_WARNINGS से warnings को allow, warn, deny के रूप में नियंत्रित करता है, जिससे CI और local build policy को अलग रखना आसान हो जाता है
  • rustc अब सफल link के बाद भी linker output को linker_messages warning के रूप में दिखाता है, और यह lint फिलहाल warnings lint group से प्रभावित नहीं होता
  • standard library में RepeatN के लिए Default, UEFI पर std::fs::File के लिए Send, integer और NonZero bit methods, और const context में char::is_control की stabilization शामिल है

Rust 1.97.0 अपडेट

  • Rust 1.97.0 एक stable रिलीज़ है, और जिन उपयोगकर्ताओं ने पहले rustup से Rust इंस्टॉल किया है, वे इसे नीचे दिए गए कमांड से अपडेट कर सकते हैं
rustup update stable
  • अगर rustup नहीं है, तो इसे Rust वेबसाइट के rustup इंस्टॉल पेज से प्राप्त किया जा सकता है
  • विस्तृत बदलाव detailed release notes for 1.97.0 में संकलित हैं
  • यदि आप भविष्य की रिलीज़ के परीक्षण में भाग लेना चाहते हैं, तो rustup default beta या rustup default nightly से beta/nightly चैनल इस्तेमाल कर सकते हैं, और मिले हुए bugs को Rust issue tracker में रिपोर्ट कर सकते हैं

stable में बदला हुआ compile/build व्यवहार

  • symbol mangling v0 डिफ़ॉल्ट रूप से सक्षम

    • जब Rust को object file या binary में compile किया जाता है, तो function, static आदि हर item के पास globally unique symbol होना चाहिए
    • अलग-अलग Rust programs को साथ में link करते समय collision से बचने के लिए, Rust मूल item name में module path, defining crate, generics जैसी context जानकारी शामिल करके नाम को mangle करता है
    • पुरानी mangling scheme Itanium ABI पर आधारित थी, जिसका उपयोग C++ में भी कुछ मामलों में होता है
    • नई scheme generic parameter instantiation values को सुरक्षित रखती है, और उस mismatch को कम करती है जहाँ कुछ हिस्से ही Itanium ABI का उपयोग करते थे, इसलिए custom demangling अब भी ज़रूरी पड़ता था
    • Rust 1.59 से -Csymbol-mangling-version=v0 के जरिए Rust-विशेष mangling scheme चुनी जा सकती थी, और नवंबर 2025 से यह nightly में डिफ़ॉल्ट रूप से लागू थी
    • Rust 1.97 में यह scheme stable Rust का डिफ़ॉल्ट बन जाती है, और legacy mangling अब केवल nightly में सक्षम की जा सकती है
    • मौजूदा योजना legacy mangling को पूरी तरह हटाने की है
    • अधिक जानकारी के लिए पुराना लेख switching to v0 mangling on nightly देखें
  • Cargo में warning control

    • CI में warnings को build failure मानना एक सामान्य प्रथा है, और पहले इसके लिए आमतौर पर RUSTFLAGS=-Dwarnings का उपयोग किया जाता था
    • Rust 1.97 से Cargo warnings और build success के संबंध को सीधे नियंत्रित करता है
      • allow: warnings छिपाता है
      • warn: डिफ़ॉल्ट, जो warnings दिखाता है लेकिन fail नहीं करता
      • deny: warnings को अस्वीकार करता है और build को fail कर देता है
    • चूँकि यह फीचर Cargo config से नियंत्रित होता है, इसलिए यह default build cache को invalidate नहीं करता
    • अगर refactoring के बाद errors ठीक करते समय आप warning noise को अस्थायी रूप से कम करना चाहते हैं, तो इसे इस तरह चला सकते हैं
CARGO_BUILD_WARNINGS=allow cargo check
  • CI में warnings को अस्वीकार करने के लिए CARGO_BUILD_WARNINGS=deny सेट किया जा सकता है
  • --keep-going के साथ उपयोग करने पर यह पहले failed package पर रुकने के बजाय सभी errors और warnings इकट्ठा कर सकता है
  • विस्तृत सेटिंग्स Cargo की build.warnings documentation में हैं
  • linker output अब डिफ़ॉल्ट रूप से दिखेगा

    • rustc उपयोगकर्ता की ओर से linker को कॉल करता है, और पहले link सफल होने पर linker output को डिफ़ॉल्ट रूप से छिपा देता था
    • Rust 1.97 से linker messages डिफ़ॉल्ट रूप से दिखाए जाते हैं, और वे नीचे जैसी warning lint के रूप में आउटपुट होते हैं
warning: linker stderr: ignoring deprecated linker optimization setting '1'
  |
  = note: `#[warn(linker_messages)]` on by default
  • rustc सामान्य linker messages को फ़िल्टर करता है जिन्हें false positive या intended behavior के रूप में पहचाना गया है
  • nightly में इस output को अब न छिपाने के बाद कई defects ठीक किए गए
  • फिलहाल linker_messages एक special lint है, और यह warnings lint group से प्रभावित नहीं होता
  • आम तौर पर rustc linker output को बहुत सूक्ष्म रूप से नियंत्रित नहीं कर पाता, और output कुछ platforms पर ही दिखाई दे सकता है
  • यदि linker का output false positive लगे, तो आप issue सबमिट कर सकते हैं
  • warning छिपाने के लिए lint level को allow पर सेट किया जा सकता है, और Cargo.toml में नीचे दिया गया lints section जोड़ा जा सकता है
[lints.rust]
linker_messages = "allow"

स्थिर किए गए API

संबंधित changelog

1 टिप्पणियां

 
GN⁺ 4 시간 전
Lobste.rs की राय
  • Rust 1.97 में Cargo के लिए warnings और build success के रिश्ते को control कर पाना एक बहुत अच्छा नया feature है
    refactoring के बाद errors ठीक करते समय अगर warnings बाधा बनें, तो CARGO_BUILD_WARNINGS=allow cargo check से उन्हें थोड़ी देर के लिए छिपाया जा सकता है, और CI में CARGO_BUILD_WARNINGS=deny से warnings को failure की तरह treat किया जा सकता है। --keep-going के साथ इस्तेमाल करने पर यह पहले failed package पर रुकने के बजाय सभी errors और warnings इकट्ठा कर सकता है

  • upgrade को कुछ समय टालना बेहतर हो सकता है। लगता है कि इसमें miscompilation bug है
    https://github.com/rust-lang/rust/issues/159035

    • दिलचस्प बात यह है कि यह miscompilation पहले से 10 releases तक मौजूद था, लेकिन पहले यह बस थोड़ा-सा out-of-bounds read करता था; अब लगता है कि यह कहीं ज्यादा बाहर तक read कर रहा है, जिससे segfault हो रहा है
    • यह LLVM bug था। अच्छी बात है कि fix काफी straightforward लगता है
      https://github.com/llvm/llvm-project/pull/208683
  • शानदार। सोच रहा हूं कि क्या कोई यहां pattern types implementation की progress का summary दे सकता है

  • अफसोस, never type इस बार भी stabilize नहीं हुआ। अगले release की उम्मीद है

    • “never type का नाम उसकी stabilization date पर पड़ा है” वाला मजाक भी अब लगभग पुराना पड़ता जा रहा है
    • compiler team के एक member ने RustWeek में never type पर talk दी थी। stabilization की संभावना का बेहतर अंदाजा लगाने में यह मदद कर सकती है, इसलिए इसे देखने की सिफारिश है: https://www.youtube.com/watch?v=3jM4cnEVrLc