2 पॉइंट द्वारा GN⁺ 2023-12-19 | 1 टिप्पणियां | WhatsApp पर शेयर करें

GCC-आधारित Rust कंपाइलर डेवलपमेंट की प्रगति

  • GCC-आधारित Rust कंपाइलर प्रोजेक्ट gccrs 2014 में शुरू हुआ था और इसका लक्ष्य GNU Compiler Collection(GCC) के भीतर Rust कंपाइलर को इम्प्लीमेंट करना है.
  • gccrs का लक्ष्य GCC 13 रिलीज़ में शामिल होना था, लेकिन यह हासिल नहीं हो सका और अब लक्ष्य GCC 14 (जिसकी रिलीज़ 2024 के मध्य में अपेक्षित है) में शामिल होना है.
  • gccrs का लक्ष्य Rust version 1.49 है, जो const generics के आने से पहले का आख़िरी version है.
  • gccrs प्रोजेक्ट के महत्वपूर्ण सिद्धांतों में से एक यह है कि Rust का कोई "superset" नहीं बनाया जाएगा, बल्कि rustc के आउटपुट को ज्यों का त्यों दोहराया जाएगा.
  • Rust standard library कई "crates" से बनी है, और gccrs इनमें से core और alloc crate के compilation को support करने पर फोकस कर रहा है.
  • gccrs में फिलहाल कई फीचर की कमी के कारण ये crates compile नहीं हो पा रहे हैं; borrow checker की अनुपस्थिति और GCC में unsupported LLVM intrinsics इसकी बड़ी समस्याएँ हैं.

GCC ecosystem के फ़ायदों का उपयोग

  • gccrs डेवलपमेंट का एक मुख्य कारण यह है कि इससे GCC के security plugins का उपयोग संभव हो सके.
  • gccrs का उपयोग पहले से Sega Dreamcast homebrew community में हो रहा है, और GCC plugins का उपयोग करके unsafe Rust code का static analysis किया जा सकता है.
  • gccrs के प्रयासों के ज़रिए Rust specification में अतिरिक्त फीचर योगदान किए जा सके हैं, और टीम Rust की official specification लिखने के काम में भाग लेना चाहती है.

डेवलपमेंट में मौजूद फीचर्स

  • gccrs में अभी भी कई core features गायब हैं, जिनमें async/await, GCC में मौजूद न होने वाले LLVM intrinsics, और format_args!() macro शामिल हैं.
  • Polonius project एक borrow checker इम्प्लीमेंट करता है जो rustc के मौजूदा borrow checker की कमियों को दूर करने के लिए अलग algorithm से reference lifetimes की गणना करता है.
  • format_args!() macro पर काम शुरू हो चुका है, और यह दूसरे string formatting macros को दिए जाने वाले arguments तैयार करने के लिए ज़रूरी है.

rustc_codegen_gcc

  • rustc_codegen_gcc gccrs की तुलना में अधिक परिपक्व और सीमित दायरे वाला एक दूसरा GCC-आधारित Rust प्रोजेक्ट है.
  • rustc_codegen_gcc, libgccjit library का उपयोग करके rustc के LLVM backend API से जुड़ता है और rustc तथा GCC के बाद के चरणों में compilation करता है.
  • अक्टूबर 2023 तक rustc_codegen_gcc बिना किसी अतिरिक्त patch के Rust for Linux को compile कर सकता है.

Rust for Linux

  • Rust for Linux प्रोजेक्ट rustc या rustc_codegen_gcc का उपयोग करके kernel के लिए Rust code build करने के तरीकों पर documentation प्रदान करता है.
  • gccrs का लक्ष्य Rust for Linux support करना है, लेकिन फिलहाल समर्थित rustc version के साथ बड़े अंतर के कारण यह अभी काफ़ी दूर की बात लगती है.

GN⁺ की राय

  • gccrs प्रोजेक्ट का लक्ष्य Rust भाषा का GCC-आधारित कंपाइलर इम्प्लीमेंटेशन तैयार करना है, जो Rust ecosystem में विविधता ला सकता है और GCC security plugins जैसे मौजूदा tools का लाभ उठाने की क्षमता रखता है.
  • यह उल्लेखनीय है कि gccrs अभी Rust standard library के core हिस्सों को compile नहीं कर पाता, फिर भी Sega Dreamcast homebrew community में इसके वास्तविक उपयोग के उदाहरण पहले से मौजूद हैं.
  • यह लेख Rust भाषा के अलग-अलग कंपाइलर इम्प्लीमेंटेशन और उनसे ecosystem विस्तार की संभावनाओं पर दिलचस्प insight देता है.

1 टिप्पणियां

 
GN⁺ 2023-12-19
Hacker News राय
  • पहले कमेंट का सार:

    • लेख में gccrs के विकास की प्रेरणा पर किया गया दावा कमजोर लगा।
    • gccrs को GCC के security plugin का उपयोग करने के लिए विकसित किया जा रहा है।
    • Linux kernel में Rust support जोड़ने वाली 'Rust for Linux' पहल भी एक और कारण है।
    • कई kernel developers Linux kernel को केवल GNU toolchain से compile करना चाहते हैं, इसलिए यह एक महत्वपूर्ण प्रेरणा है।
    • GCC को backend के रूप में उपयोग करने का कारण समझाया गया है, लेकिन duplicate frontend की जरूरत क्यों है, इस पर पर्याप्त विवरण नहीं है.
    • C++ की गलतियों से सीखना चाहिए, और कई frontend platform के बीच development को कठिन बनाते हैं।
    • इस बात का ध्यान रखा जा रहा है कि gccrs 'GNU Rust' न बन जाए, और यह rustc के output को replicate करने की कोशिश कर रहा है।
  • दूसरे कमेंट का सार:

    • Rust को language standard की जरूरत है।
    • कई organizations और industries standard न होने पर Rust को adopt नहीं करेंगी।
    • C, C++, C#, JavaScript (ECMAScript) जैसी दूसरी भाषाओं के सभी standard हैं।
  • तीसरे कमेंट का सार:

    • GCC-RS के प्रति नकारात्मक प्रतिक्रिया देखकर हैरानी हुई।
    • यदि किसी भाषा के कई implementations नहीं हैं, तो वह भाषा अधूरी है।
  • चौथे कमेंट का सार:

    • gccrs, उन architectures के लिए Rust support संभव बनाएगा जिन्हें LLVM support नहीं करता।
  • पाँचवें कमेंट का सार:

    • ऐसा लगता है कि gccrs का rustc के bugs और quirks तक को replicate करने की कोशिश करना एक गलती है।
    • Rust की कोई औपचारिक specification नहीं है, और केवल एक reference implementation से उसे document करना लंबे समय की कमजोरी है।
    • मौजूदा code को सभी implementations पर चलाने योग्य बनाना उचित है, लेकिन इससे गलत फैसलों और bugs के स्थायी हो जाने की समस्या है।
    • Microsoft पुराने programs को चलते रहने देने के लिए बहुत प्रयास करता है।
    • Rust को language development के शुरुआती चरण में ही यह बोझ नहीं उठाना चाहिए।
    • भाषा को विकसित होने के लिए QA और QC को अपनाना होगा।
    • मजबूत standard वाली भाषाएँ इस सोच को स्वीकार करती हैं।
  • छठे कमेंट का सार:

    • lwn.net लिंक पोस्ट करने के लिए धन्यवाद, इससे subscription renew करने की याद आ गई।
  • सातवें कमेंट का सार:

    • Linux को पहले से ही clang का उपयोग करके compile किया जा सकता है।
    • GNU 'शुद्धता' के लिए ऐसे duplicate effort को विकसित और maintain करना मूल्यवान नहीं लगता।