پرش به مطلب اصلی

نقشه‌راه توسعه‌ی یکپارچه Wave + Whale نسخه ۲

این سند نقشه راهی است که فرآیند توسعه یکپارچه زبان Wave و زنجیره ابزار کامپایلر Whale را به صورت مرحله به مرحله مرتب کرده است. Wave و Whale در ابتدا به عنوان اجزای جداگانه شروع می‌شوند، اما هدف نهایی آنها این است که به یک اکوسیستم زبان مستقل و کاملاً یکپارچه تبدیل شوند.

کل مراحل توسعه از جریان زیر پیروی می‌کند.

پیش-آلفا → پیش-بتا → آلفا → بتا → نسخه کاندیدا → انتشار

هر مرحله بر اساس نتایج مرحله قبلی پیش می‌رود و پس از تکمیل یک مرحله، فرض بر این است که توسعه به صورت یک‌طرفه به ساختار قبلی باز نمی‌گردد.


مرحله پیش بتا

هدف از مرحله Pre-Beta این است که فرنته‌اند زبان Wave را تکمیل کرده و کل قابلیت‌های زبان را بر مبنای بکند LLVM پیاده‌سازی کند. در این مرحله، Whale مورد استفاده قرار نمی‌گیرد و کامپایل و اجرا به طور کامل از طریق LLVM انجام می‌شود.

گسترش نگارشی در این مرحله انجام نمی‌شود. هدف اصلی این است که همه عناصر نگارشی را بر اساس مشخصات از پیش تعریف شده به کار واقعی درآورید. تمرکز بر تثبیت ساختار فرنته‌اند با کیفیت پیام‌های خطا، بررسی نوع و پردازش دایره متغیرها است.

دامنه پیاده‌سازی شامل اعلان و خروجی متغیر، عملیات‌های پایه، تعریف و فراخوانی توابع، عبارات شرطی (if / else if / else) و حلقه‌های تکرار (while / break / continue) است که همگی در این مرحله تکمیل می‌شوند. همچنین شامل خروجی فرمت، مشخص کردن نوع به صورت صریح، طراحی نشانگر به شکل ptr<T> و طراحی آرایه به شکل array<T, N> نیز است.

در این مرحله، کامپایلر Wave به طور کامل با Rust نوشته می‌شود و برای ایجاد LLVM IR و اجرای AOT از inkwell و llvm-sys استفاده می‌کند.


مرحله Alpha

هدف از مرحله Alpha این است که بکند Whale معرفی شود و ساختاری برای استفاده همزمان از LLVM و Whale برقرار شود. LLVM همچنان بکند اصلی باقی می‌ماند و Whale به صورت گزینه‌ای به عنوان بکند قابل استفاده اضافه می‌شود.

هنگام اجرای کد Wave، می‌توانید با استفاده از گزینه --backend انتخاب کنید کدام بک‌اند از بین LLVM و Whale استفاده شود.

wavec run main.wave --backend=whale
wavec run main.wave --backend=llvm

در این مرحله، ساختار IR خود Whale را طراحی و تعریف می‌کنیم. عناصر کلیدی مانند Instruction، Value، و Block را سازماندهی کرده و مبدل AST Wave به Whale IR را پیاده‌سازی می‌کنیم.

همچنین یک ژنراتور کد برای Whale پیاده‌سازی کنید که به صورت اسمبلی یا باینری قابل اجرا باشد. در LLVM، نوعی که پیاده‌سازی آن دشوار یا ناکارآمد است، مانند نوع اعداد صحیح بزرگ i1024 یا ساختارهای پیشرفته پوینتر، به عنوان قابلیت‌های مخصوص Whale در این مرحله معرفی می‌شوند.

به عنوان نقطهٔ چک، باید بتوانید از بک‌اند Whale "Hello World" را چاپ کنید، همچنین اعلان و تخصیص متغیرات، مدیریت پوینتر، و ابزارهای اشکال‌زدایی IR به درستی کار کنند. این مرحله ای است که در آن تبدیل Wave به Whale IR به‌طور واقعی انجام می‌شود.


مرحله Beta

هدف از مرحله Beta، انتقال کامل به Whale و حذف وابستگی به LLVM است. از این مرحله به بعد، کامپایل و اجرای Wave فقط از Whale استفاده خواهد کرد.

وابستگی‌ها و ماژول‌های مربوط به LLVM به طور کامل حذف شده و مسیر تولید و اجرای کد بر اساس Whale بهینه می‌شود. ساده و سریع کردن جریان از تولید تا اجرای IR، چالش اصلی است.

یک پاس بهینه‌سازی برای Whale IR طراحی کنید و سرعت تولید کد و بهره‌وری اجرای را بهبود ببخشید. تمامی گرامرهای Wave باید در این مرحله بر مبنای بک‌اند Whale به طور کامل پشتیبانی شوند.

از نظر آزمایش، تمامی تست‌های واحد و سوئیت کامل تست‌ها اجرا می‌شوند و همچنین سازگاری با WSON و کتابخانه استاندارد و امکان ساخت متقابل پلتفرم Whale بررسی می‌شود.


مرحله RC (Release Candidate)

هدف از مرحله RC، شروع بوت‌استرپ Wave است. از این مرحله به بعد، پیاده‌سازی Rust کامپایلر Wave به تدریج حذف شده و کامپایلر Wave با زبان خودش بازنویسی می‌شود.

موتور تولید IR Wave را بر اساس Whale بازنویسی کرده و منطق اصلی کامپایلر و کتابخانه‌های std / core را با کد Wave جایگزین می‌کنیم. از طریق این فرآیند، Whale وارد مرحله میزبانی خود می‌شود.

در صورت موفقیت بوت‌استرپ، اولین کامپایلر بومی Wave متولد می‌شود.


مرحله انتشار (v0.0.1)

مرحله Release به معنای اولین انتشار رسمی Wave است. در این مرحله، Wave و Whale اکوسیستم زبانی مستقل و کاملاً یکپارچه‌ای را تشکیل می‌دهند.

عناصر انتشار شامل زبان Wave و کتابخانه استاندارد، ابزار زنجیره‌ای کامپایلر Whale، مدیریت بسته Vex و قالب داده WSON می‌شوند.

در این مرحله، Wave دارای کامپایلری است که به طور کامل با کد Wave نوشته شده و بهینه‌سازی‌های Whale باید تکمیل شده باشند. جریان ساخت و توزیع از طریق Vex تثبیت شده و ممکن است ساخت‌های کراس OS مثل vex build --windows امکان‌پذیر باشند.


استراتژی متای توسعه

توسعه Wave + Whale تنها یک پیشرفت مرحله‌ای نیست، بلکه مبتنی بر یک استراتژی واضح انجام می‌شود. در استراتژی قطار+ریل، همزمان با توسعه Whale، بک‌اند Wave نیز تشکیل می‌شود و به طور هم‌زمان ساختار بک‌اند و طراحی زبان توسعه می‌یابد.

در مرحله Alpha، استراتژی انشعاب بک‌اند از طریق گزینه --backend نقش مهمی ایفا کرده و پایه‌ای برای مقایسه و بریک‌نیگ مستقیم LLVM و Whale فراهم می‌کند.

پس از RC، ساختار برعکس شده و کد Wave به طور کامل از طریق Whale خودش را کامپایل می‌کند و برنامه ساختار برعکس به‌طور جدی پیشرفت می‌کند.