عن المشروع
rucc هو مترجم C مُحسِّن في مراحله الأولى مكتوب بلغة Rust. وفقًا لملف README، فإن سلم استهداف المشروع يبدأ بـ SQLite، ثم طبقة متوسطة من مشاريع C المشهورة، يليها PostgreSQL، وأخيرًا نواة Linux، مع منع أي تعديلات على المصدر في هذا السلم. ويُشير الملف بوضوح إلى أن المشروع لا يزال غير قادر على ترجمة C. تم الانتهاء من المرحلتين M0 وM1 وتم وضع العلامات v0.1.0 وv0.2.0 عليهما. غطت M0 مساحة العمل (workspace)، وقاعدة التدقيق الطبقي (layer rule)، وتحليل معاملات السائق وخطة المراحل، وجدول المهام، واختبارات التكامل المستمر على أنظمة Linux وmacOS وWindows. أما M1 فهي وحدة المعالجة المسبقة التي وُصفت بأنها مكتملة: مراحل الترجحة، توسيع宏 مجموعة الإخفاء، التوجيهات بما في ذلك _Pragma و#embed، حل.Include مع #include_next و#pragma once، عائلة __has_*، وال宏 المُعرّفة مسبقًا المُستخلصة من وصف الهدف. يُوصف rucc -E a.c كمعالج مسبق حقيقي يتم مقارنة خرجّه بالترجيح diffs ضد مترجم مرجعي عبر مجموعات رؤوس glibc وmusl. بعد تشغيل rucc a.c يعرض حاليًا خطة المراحل ويُبلّغ بأن المراحل التالية للمعالجة المسبقة غير مُنَفَّذة.
يصف قسم التصميم عدة خيارات مُخطَّط لها أو قيد التطوير. تُكتب قواعد إعادة الكتابة وأنماط اختيار التعليمات بلغة DSL واحدة؛ حيث يتم تجميع نص القاعدة نفسها في المatcher وإعطائها إلى محلل SMT في اختبارات CI، والقواعد التي لا يستطيع المحلل إثباتها لا تدخل مجموعة القواعد. يُفترض أن يكون ممثل IR خاليًا من السموم (poison) والقيم غير المحددة (undef). من المخطط استخدام رسوم بيانية متدرجة acyclic e-graphs لإعادة الكتابة وطوي الثوابت ونقل الكود العالمي، مع بناء وقياس كلٍ من معيد كتابة e-graph وسلسلة الحزم التقليدية لاختيار الأفضل. تتحقق قاعدة الطبقة باستخدام cargo xtask layers، التي تُسنم الرتب للوحدات النمطية بحيث لا يعتمد أي Crates إلا على وحدات ذات رتب أقل صراحةً. تهدف مسار الترجمة إلى عدم وجودAssembler أو linker خارجي: حيث تُشفَّر التعليمات إلى بايتات، ويتم كتابة صيغ ELF وMach-O وCOFF داخل المشروع، مع إصدار DWARF داخليًا. يذكر ملف README أن ربط الصيغ لا يزال يستدعي linker حقيقي قبل إصدار 1.0، وأن ما إذا كان هذا سيستمر يمثل مسألة مفتوحة.
يطرح ملف README الأهداف كمطالب قابلة للقياس في صحة الترجمة وإنتاجية التجميع وجودة الكود وقابلية النقل، مع وضع منهجية وقواعد الإبلاغ في spec/16-performance.md قبل وجود النتائج. يشمل هيكل المستودع الموضح في الملف وحدات نمطية للمترجم، وأدوات بناء لمترجم لغة DSL للقواعد والتحقق SMT، ووحدات زمنية تُجمع للهدف، وعشرين مستندًا مواصفات وخمس عشرة وثيقة ترجمة عبر platforms، ووثائق مُولَّدة، وأدوات xtask لأتمتة البناء، واختبارات. تشمل خيارات التثبيت ثنائيات مُسبقة العد لكل من Linux وmacOS وWindows مع ملفات SHA-256 وشهادات أصل البناء، بالإضافة إلى تثبيت عبر 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++ وامتدادات dialect MSVC وJIT وMSan ومترجم مُتحقَّق منهجيًا على غرار CompCert. الترخيص Apache-2.0.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.