প্রকল্প সম্পর্কে
rucc হলো Rust-এ লেখা একটি প্রাথমিক পর্যায়ের অপ্টিমাইজড C কম্পাইলার। 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 হেডার সেটের বিপরীতে একটি রেফারেন্স কম্পাইলারের সাথে তুলনা করা হয়। বর্তমানে rucc a.c কেবল ফেজ প্ল্যান প্রিন্ট করে এবং রিপোর্ট করে যে প্রিপ্রসেসিং-পরবর্তী ফেজগুলো এখনও বাস্তবায়িত হয়নি।
ডিজাইন সেকশনে বেশ কিছু পরিকল্পিত বা চলমান সিদ্ধান্তের কথা বলা হয়েছে। রিরাইট রুলস এবং ইন্সট্রাকশন সিলেকশন প্যাটার্নগুলো একটি নির্দিষ্ট DSL-এ লেখা হয়; একই রুল টেক্সট ম্যাচারে কম্পাইল করা হয় এবং CI-তে একটি SMT সলভারের কাছে পাঠানো হয়, এবং সলভার যে রুলগুলো প্রমাণ করতে পারে না সেগুলো রুল সেটে প্রবেশ করে না। IR-এর লক্ষ্য হলো এতে কোনো poison বা undef না থাকা। রিরাইটিং, কনস্ট্যান্ট ফোল্ডিং এবং গ্লোবাল কোড মোশনের জন্য অ্যাসাইক্লিক e-graphs পরিকল্পিত, যেখানে একটি e-graph রিরাইটার এবং একটি প্রচলিত পাস পাইপলাইন—উভয়টি তৈরি করে পরিমাপ করা হবে যাতে সেরাটি বেছে নেওয়া যায়। একটি লেয়ার রুল cargo xtask layers দ্বারা যাচাই করা হয়, যা ক্রেটগুলোকে র্যাঙ্ক প্রদান করে যাতে একটি ক্রেট কেবল কঠোরভাবে নিম্নতর র্যাঙ্কের ক্রেটের ওপর নির্ভর করতে পারে। কম্পাইল পাথের লক্ষ্য হলো কোনো এক্সটারনাল অ্যাসেম্বলার বা লিঙ্কার ব্যবহার না করা: ইন্সট্রাকশনগুলো বাইটে এনকোড করা হয়, ELF, Mach-O এবং COFF প্রজেক্টের ভেতরেই লেখা হয় এবং DWARF প্রজেক্টের ভেতরেই এমিট করা হয়। README-তে উল্লেখ করা হয়েছে যে, ১.০ সংস্করণের আগে লিঙ্কিংয়ের জন্য এখনও একটি প্রকৃত লিঙ্কারের সাহায্য নেওয়া হয় এবং এটি বজায় থাকবে কি না তা একটি খোলা প্রশ্ন।
README-তে লক্ষ্যগুলোকে সঠিকতা, কম্পাইল থ্রুপুট, কোড কোয়ালিটি এবং পোর্টেবিলিটির পরিমাপযোগ্য দাবি হিসেবে উপস্থাপন করা হয়েছে, যার মেথডোলজি এবং রিপোর্টিং রুলস ফলাফল আসার আগেই spec/16-performance.md-তে রাখা হয়েছে। রিপোজিটরি লেআউটে কম্পাইলারের জন্য ক্রেট, রুল DSL কম্পাইলার এবং SMT ভেরিফায়ারের জন্য বিল্ড-টুলস, টার্গেটের জন্য কম্পাইল করা রানটাইম ক্রেট, ২০টি স্পেক ডকুমেন্ট এবং ১৭টি ক্রস-কম্পাইলেশন ডকুমেন্ট, জেনারেটেড ডকস, 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++, MSVC ডায়ালেক্ট এক্সটেনশন, JIT, MSan এবং CompCert-স্টাইল ভেরিফাইড কম্পাইলারের কথা উল্লেখ করা হয়েছে। এর লাইসেন্স হলো Apache-2.0।
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.