خارطة طريق التطوير المتكامل Wave + Whale الإصدار 2
هذه الوثيقة هي خارطة طريق مرتبة بشكل مرحلي لعملية التطوير المدمج بين لغة Wave وأداة ترجمة Whale. Wave وWhale يبدآن كعناصر منفصلة في البداية، ولكن الهدف النهائي هو التكامُل في نظام بيئي للغة موحَّد ومستقل.
يتبع إجمالي مراحل التطوير التدفق التالي.
pre-alpha → pre-beta → alpha → beta → rc → release
كل مرحلة تعتمد على نتائج المرحلة السابقة، وبمجرد الانتهاء من مرحلة لا يمكن العودة إلى الهياكل السابقة، حيث يقوم على تطوير أحادي الاتجاه.
مرحلة ما قبل بيتا
تهدف مرحلة ما قبل بيتا إلى إكمال الواجهة الأمامية للغة Wave وتنفيذ جميع وظائف اللغة استنادًا إلى الخلفية LLVM. في هذه المرحلة، لا يتم استخدام Whale، وتتم عمليات التحويل والتنفيذ بشكل كامل عبر LLVM.
لن يتم توسيع قواعد اللغة نفسها في هذه المرحلة. الهدف الرئيسي هو تفعيل جميع العناصر النحوية بناءً على المواصفات المحددة مسبقاً. يركز على استقرار هيكل الواجهة الأمامية مثل جودة رسائل الأخطاء، وفحص الأنواع، ومعالجة مجالات المتغيرات.
يشمل نطاق التنفيذ إعلان المتغيرات والإخراج، العمليات الأساسية، تعريف الدوال واستدعاءها،
الجمل الشرطية (if / else if / else)، الحلقات التكرارية (while / break / continue) والتي تُكمل جميعها في هذه المرحلة.
كما يتضمن إخراج التنسيق، تحديد الأنواع الصريحة ، تصميم المؤشرات بشكل ptr<T>، وتصميم المصفوفات بشكل array<T, N>.
في هذه المرحلة، يتم كتابة كافة الأجزاء باستخدام Rust، ويتم استخدام inkwell و llvm-sys لإنشاء LLVM IR وتنفيذ AOT.
مرحلة ألفا
هدف مرحلة ألفا هو إدخال الواجهة الخلفية Whale وإقامة هيكل لاستخدام LLVM وWhale جنبًا إلى جنب. ستظل LLVM الواجهة الخلفية الأساسية، وسيتم تضمين Whale كواجهة خلفية اختيارية.
عند تنفيذ كود Wave، يمكن اختيار الواجهة الخلفية المستخدمة بين LLVM وWhale باستخدام الخيار --backend.
wavec run main.wave --backend=whale
wavec run main.wave --backend=llvm
في هذه المرحلة، نقوم بتصميم وتعريف هيكل IR الخاص بـ Whale نفسه. نقوم بتنظيم المكونات الأساسية مثل Instruction, Value, Block، وتنفيذ مولد IR الذي يحول Wave AST إلى Whale IR.
كما نقوم بتنفيذ مولد كود لـ Whale، ليمكن تنفيذه في شكل مجموعة أو بشكل ثنائي.
في هذه المرحلة، يتم تقديم أنواع يصعب تنفيذها في LLVM أو غير فعالة، مثل نوع العدد الصحيح الكبير i1024 أو
هياكل المؤشرات المتقدمة كميزات مخصصة لـ Whale.
كمعلم، يجب أن يكون إخراج Hello World ممكنًا على الواجهة الخلفية لـ Whale، ويجب أن تعمل أدوات الإعلان وتخصيص المتغيرات ومعالجة المؤشرات وتصحيح IR بشكل طبيعي. هذه هي المرحلة التي يتم فيها التحويل من Wave إلى Whale IR بشكل فعلي.
مرحلة بيتا
هدف مرحلة بيتا هو التحويل الكامل إلى Whale والتخلص من الاعتماد على LLVM. من هذه المرحلة، يتم تجميع وتنفيذ Wave باستخدام Whale فقط.
سيتم إزالة جميع تبعيات ووحدات LLVM، وسيتم تحسين مسار إنشاء الكود وتنفيذه على أساس Whale. المهمة الأساسية هي جعل تدفق إنشاء IR إلى التنفيذ بسيطًا وسريعًا.
تصميم مهام تحسين لWhale IR، وتحسين سرعة إنشاء الكود وكفاءة التنفيذ. يجب دعم جميع قواعد Wave بشكل كامل وفقًا للواجهة الخلفية لـ Whale في هذه المرحلة.
من حيث الاختبار، يتم إجراء اختبار الوحدات واختبار جميع البيانات، والتحقق من توافق WSON والمكتبة القياسية، وكذلك التحقق من إمكانية بناء Whale عبر المنصات المختلفة.
مرحلة RC (Release Candidate)
هدف مرحلة RC هو بدء عملية الإقلاع الرئيسي لـ Wave. في هذه المرحلة، نبدأ في إزالة تنفيذ Rust لـ Wave Compiler تدريجياً، ونبدأ في إعادة كتابة Compiler باستخدام لغة Wave نفسها.
نعيد كتابة مولد IR لـ Wave بناءً على Whale، ونستبدل منطق Compiler الأساسي والمكتبات std / core بكود Wave. من خلال هذه العملية، يدخل Whale في مرحلة الاستضافة الذاتية.
عند نجاح الإقلاع الرئيسي، سيولد أول Compiler محلي لـ Wave.
مرحلة الإصدار (v0.0.1)
تعني مرحلة الإصدار الإصدار الرسمي الأول لـ Wave. في هذه المرحلة، يشكل Wave وWhale نظامًا بيئيًا لغويًا مستقلاً ومتكاملاً تمامًا.
تشمل مكونات الإصدار لغة Wave والمكتبة القياسية، سلسلة أدوات Compiler لـ Whale، مدير الحزم Vex، وأيضًا تنسيق البيانات WSON.
يجب أن تملك Wave في هذه المرحلة Compiler مكتوبًا بالكامل بكود Wave،
ويجب أن تكتمل تحسينات Whale.
يجب أن يتم ترسيخ تدفق البناء والتوزيع عبر Vex،
ويجب أن يكون البناء عبر الأنظمة مثل vex build --windows ممكنًا.
استراتيجية تطوير الميتا
يتم تطوير Wave + Whale ليس فقط كمرحلة تنفيذ، بل يتم بناء على استراتيجية واضحة. نعتمد على استراتيجية القطار+السكة في تطوير Whale بينما نعمل على تكوين الواجهة الخلفية لـ Wave، لتطوير كل من هيكلة الخلفية وتصميم اللغة بشكل متزامن.
في مرحلة ألفا، يلعب الخيار --backend دورًا مهمًا في استراتيجية التفرع الخلفية،
ويوفر الأساس للمقارنة المباشرة بين LLVM وWhale والتحقق منها.
بعد RC، سيتم عكس الهيكلة، وسيتم تنفيذ خطة عكس الهيكلة التي تجعل موجة الكود تترجم نفسها عبر Whale.
