इस प्रोजेक्ट के बारे में
rucc एक प्रारंभिक चरण का अनुकूलित C कंपाइलर है जो Rust में लिखा गया है। README के अनुसार, परियोजना का लक्ष्य सीढ़ी SQLite है, फिर प्रसिद्ध C परियोजनाओं का मध्य स्तर, फिर PostgreSQL, और अंततः Linux कर्नेल, इस सीढ़ी पर कोई स्रोत पैच अनुमति नहीं है। README स्पष्ट रूप से कहता है कि अभी तक कोई C कंपाइल नहीं होता। M0 और M1 पूर्ण हैं, संस्करण v0.1.0 और v0.2.0 के रूप में टैग किए गए हैं। M0 ने वर्कस्पेस, जाँची गई लेयर नियम, ड्राइवर का तर्क विश्लेषण और चरण योजना, जॉब शेड्यूलर, और Linux, macOS और Windows पर CI को कवर किया। M1 प्रीप्रोसेसर है, जिसे पूरा बताया गया है: अनुवाद चरण, हाइड सेट मैक्रो विस्तार, _Pragma और #embed जैसे निर्देश, #include_next और #pragma once के साथ समावेश समाधान, __has_* परिवार, और लक्ष्य विवरण से उत्पन्न पूर्वनिर्धारित मैक्रो। rucc -E a.c को एक वास्तविक प्रीप्रोसेसर के रूप में वर्णित किया गया है जिसका आउटपुट glibc और musl हेडर सेट्स पर एक संदर्भ कंपाइलर के साथ तुलना (diff) किया जाता है। rucc a.c वर्तमान में चरण योजना प्रिंट करता है और बताता है कि प्रीप्रोसेसिंग के बाद के चरण अभी कार्यान्वित नहीं हैं।
डिज़ाइन अनुभाग कई योजित या कार्य‑प्रगति विकल्पों का वर्णन करता है। रिवाइट नियम और निर्देश चयन पैटर्न एक ही DSL में लिखे जाते हैं; वही नियम पाठ मैचर में संकलित किया जाता है और CI में एक SMT सॉल्वर को दिया जाता है, और वे नियम जिन्हें सॉल्वर निर्वहन नहीं कर सकता, नियम सेट में नहीं wchodते। IR का इरादा जहर और undef दोनों से मुक्त होना है। अचक्रीय e‑ग्राफ़ को रिवाइट, स्थिरांक मोड़न और वैश्विक कोड गति के लिए योजना बनाई गई है, जिसमें एक e‑ग्राफ़ रिवाइटर और एक पारंपरिक पास पाइपलाइन दोनों बनाई गई हैं और मापी गई हैं ताकि एक विजेता चुना जा सके। एक लेयर नियम cargo xtask layers द्वारा जाँचा जाता है, जो क्रेट्स को रैंक आवंटित करता है ताकि कोई क्रेट केवल कड़ाई से 낮은 रैंक वाले क्रेट्स पर निर्भर रह सके। कंपाइल पथ का लक्ष्य बाहरी असेंबलर या लिंकर न रखना है: निर्देश बाइट्स में एन्कोड किए जाते हैं, ELF, Mach-O और COFF इन‑प्रोजेक्ट में लिखे जाते हैं, और DWARF इन‑प्रोजेक्ट में उत्सर्जित किया जाता है। README कहता है कि 1.0 से पहले लिंकिंग अभी भी वास्तविक लिंकर पर शेल आउट करती है, और यह प्रश्न खुला है कि क्या यह सत्य रहेगा।
README लक्ष्यों को सही होने, कंपाइल थ्रूपुट, कोड गुणवत्ता और पोर्टेबिलिटी पर मापने योग्य दावों के रूप में फ्रेम करता है, और विधि और रिपोर्टिंग नियम spec/16-performance.md में रखे जाते हैं जब तक परिणाम मौजूद नहीं होते। README में वर्णित रिपॉजिटरी लेआउट में कंपाइलर के लिए क्रेट्स, नियम DSL कंपाइलर और SMT वेरिफायर के लिए build‑tools क्रेट्स, लक्ष्य के लिए संकलित रनटाइम क्रेट्स, बीस स्पेसिफ़िकेशन दस्तावेज़ plus सत्रह क्रॉस‑कंपाइलेशन दस्तावेज़, उत्पन्न दस्तावेज़, xtask बिल्ड ऑटोमेशन, और परीक्षण शामिल हैं। स्थापना विकल्पों में Linux, macOS और Windows के लिए पूर्व‑निर्मित बाइनरी शामिल हैं, जिनके साथ SHA-256 फ़ाइलें और बिल्ड प्रमाणपत्र attestations हैं, साथ ही cargo install rucc भी। निर्माण को git clone, cargo build --release के रूप में दस्तावेज़ीकृत किया गया है, जिसमें configure, CMake, Python बिल्ड में नहीं है, और build.rs और xtask के बाहर कोई कोड जनरेशन नहीं है। कार्यों में cargo xtask layers, cargo xtask style, और cargo xtask ci शामिल हैं। README बाहर के दायरे की वस्तुओं की सूची देता है: C++, MSVC डायलेक्ट एक्सटेंशन, एक JIT, MSan, और एक CompCert‑शैली सत्यापित कंपाइलर। लाइसेंस Apache-2.0 है।
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.