1 पॉइंट द्वारा GN⁺ 2024-08-26 | 1 टिप्पणियां | WhatsApp पर शेयर करें

C में Rust compiler क्यों लिखें?

  • हाल में गतिविधि कम होने के कई कारण रहे

    • परिवार में मृत्यु जैसी निजी घटनाएँ
    • नौकरी में ज़िम्मेदारियों का बढ़ना
    • open source के प्रति उत्साह में कमी
    • एक नए प्रोजेक्ट पर ध्यान केंद्रित करना
  • यह प्रोजेक्ट शुद्ध C में Rust compiler लिखने का है

    • C++ या flex, yacc, Makefile के बिना, पूरी तरह शुद्ध C में लिखा गया
    • प्रोजेक्ट का नाम Dozer है

ऐसा क्यों किया जा रहा है?

  • bootstrapping और उसके महत्व को समझना ज़रूरी है
    • Rust code चलाने के लिए compiler चाहिए
    • Rust का मुख्य compiler rustc है
    • rustc Rust में लिखा गया है, और Rust code compile करने के लिए उसी की ज़रूरत होती है
    • rustc को compile करने के लिए rustc के पुराने संस्करण की आवश्यकता होती है
    • rustc का शुरुआती संस्करण OCaml में लिखा गया था
    • OCaml compiler को Guile से compile किया जा सकता है, और Guile C में लिखा गया है

अवरोही सिद्धांत

  • Bootstrappable Builds प्रोजेक्ट का परिचय

    • 512-byte binary seed से शुरुआत
    • साधारण compiler से धीरे-धीरे अधिक जटिल compiler तैयार करना
    • अंततः TinyCC, GCC, Linux आदि को compile करना संभव
  • इस प्रक्रिया में Rust बहुत देर से आता है

    • mrustc का उपयोग करके rustc 1.56 संस्करण को compile किया जाता है
    • यदि आप C++ के आने से पहले Rust का उपयोग करना चाहते हैं, तो यह संभव नहीं है
  • Dozer का लक्ष्य C में bootstrappable Rust compiler बनाना है

    • इसे TinyCC से bootstrap किया जा सकना चाहिए

योजना

  • पिछले दो महीनों से Dozer पर काम चल रहा है

    • इसे TinyCC और cproc से compile किया जा सकता है
    • backend के रूप में QBE का उपयोग
    • फिलहाल lexer और parser का कुछ हिस्सा पूरा
    • macro/module expansion को अभी टाला जा रहा है
    • typecheck में केवल i32 समर्थित है
    • code generation अभी अपर्याप्त है
  • आगे की योजना

    • Dozer को धीरे-धीरे विकसित करके बुनियादी libc sample, libcore, और rustc को compile करने योग्य बनाना
    • cargo जैसा एक टूल बनाना ताकि Rust package compile किए जा सकें
    • auto-generated code को हटाना
    • rustc और cargo को compile करने की प्रक्रिया बनाना

GN⁺ का सार

  • यह लेख शुद्ध C में Rust compiler लिखने वाले एक प्रोजेक्ट की कहानी है
  • इसमें bootstrapping के महत्व और उसके माध्यम से Rust compiler बनाने की प्रक्रिया समझाई गई है
  • Dozer प्रोजेक्ट का लक्ष्य C में bootstrappable Rust compiler बनाना है
  • यह प्रोजेक्ट बेहद चुनौतीपूर्ण है, और इसकी सफलता अनिश्चित है, लेकिन प्रयास अपने-आप में सार्थक है

1 टिप्पणियां

 
GN⁺ 2024-08-26
Hacker News की राय
  • Rust को bootstrap करने के लिए, C में proto-Rust लिखने के बाद proto-Rust में पूरा Rust compiler लिखना बेहतर होगा

    • proto-Rust में borrow checker या macro support नहीं होगा, memory free नहीं की जाएगी, और अच्छा code generate करने की भी ज़रूरत नहीं होगी
    • proto-Rust, Rust syntax वाला C जैसा होगा
    • यह रास्ता क्यों नहीं चुना गया, यह जानने की जिज्ञासा है
  • शौकिया तौर पर Rust में एक C compiler लिखा जा रहा है, और इसे "Small C Compiler" कहा जा रहा है

    • backend के रूप में Cranelift का उपयोग होता है, और compiler architecture plugable और hackable है
    • printf("Hello World!") को handle कर सकने तक इसे open source करने की योजना नहीं है
    • preprocessor और parser को implement करने की कोशिश चल रही है, और rust-peg तथा HimeCC में योगदान दिया जा रहा है
    • typedef समस्या के कारण अकादमिक जगत का समाधान क्या है, यह जानना चाहते हैं
  • hardware में भी वही bootstrap समस्या मौजूद है

    • कंप्यूटर पहले से बने कंप्यूटर और software से बनाए जाते हैं
    • यह सोचने लायक एक दिलचस्प विषय है
  • bootstrap के फायदे समझने के लिए 4 links तक जाना पड़ा

    • उम्मीद थी कि शीर्षक का "क्यों" वाला हिस्सा उसी कारण को समझाएगा
  • bootstrap chain में C++ आ जाने पर bootstrap लगभग समाप्त हो जाता है

    • Rust का उपयोग करना हो तो उसे C++ के आने से पहले इस्तेमाल करना चाहिए
    • अच्छा होगा अगर Rust compiler को C से bootstrap किया जा सके
    • लेकिन rustc के पुराने versions, rustc के ही पुराने versions से compile होते हैं
    • OCaml compiler को Guile से सफलतापूर्वक compile किया जा सकता है
    • लेखक C++ चरण हटाकर C चरण को प्राथमिकता देता है
    • लेखक की प्रेरणा स्पष्ट नहीं है
  • target system पर नया binary बनाने के लिए rustc को उस system का support करना होगा

    • अगर rustc में वह support जोड़ दिया जाए, तो वह खुद को build कर सकता है
  • Scheme में C++ interpreter या compiler लिखने की कल्पना करें

    • Scheme से सीधे मौजूदा gcc तक पहुँचना एक बड़ा shortcut होगा
    • लेकिन आम राय यह है कि C++ compiler लिखना लगभग असंभव है
  • पूरे stack को देखें तो यह "trusting trust" समस्या को bypass करने का एक तरीका हो सकता है

  • QBE को backend के रूप में उपयोग करना पसंद आया

    • Rust और LLVM के साथ इसकी तुलना देखना दिलचस्प होगा
    • शुभकामनाएँ
  • bootstrap प्रक्रिया में toolchain के एक हिस्से के रूप में FORTH के उपयोग पर विचार किया जा सकता है