מפת דרכים לפיתוח משולב של Wave + Whale גירסה 2
מסמך זה הוא מפת דרכים שמארגן שלב אחר שלב את תהליך הפיתוח המאוחד של שפת Wave וכלי ההידור Whale. Wave ו-Whale מתחילים כחלקים נפרדים, אך בשלב הסופי המטרה היא להתאחד לאקוסיסטמת שפה עצמאית אחת.
כל שלבי הפיתוח עוקבים אחרי הזרימה הבאה.
pre-alpha → pre-beta → alpha → beta → rc → release
כל שלב מתבסס על התוצאות של השלב הקודם, ומדובר בפיתוח חד-כיווני שבו לאחר סיום שלב אין חזרה למבנה קודם.
שלב Pre-Beta
המטרה של שלב Pre-Beta היא להשלים את החזית של שפת Wave ולהטמיע את כל הפונקציות של השפה בהתבסס על פחות אחורית LLVM. בשלב זה Whale לא בשימוש, ההידור וההפעלה מבוצעים לחלוטין דרך LLVM.
אין לבצע עבודה להרחבת התחביר עצמו בשלב זה. המטרה המרכזית היא לגרום לכלל רכיבי התחביר המוגדרים מראש להתפקד בפועל בהתאם להגדירים. מתרכזים בסטביליזציה של מבנה החזית כולל איכות הודעות שגיאה, בדיקת סוגים, וטיפול בטווחי משתנים.
היקף המימוש כולל הכרזת משתנים והדפסה, פעולות בסיסיות, הגדרת ופונקציות קריאה,
התניות (if / else if / else), ולולאות (while / break / continue) המושלמים אף הם בשלב זה.
כמו כן, כלולים הוצאת פורמט, הגדרת סוג מפורשת, עיצוב מצביע ptr<T>,
ועיצוב מערך array<T, N>.
בשלב זה, הקומפיילר של Wave כולו כתוב ב-Rust, ומשתמש ב-inkwell וב-llvm-sys כדי ליצור LLVM IR ולהריץ AOT.
שלב Alpha
המטרה של שלב Alpha היא להכניס את Whale כ-backend ולהקים מבנה המאפשר שימוש מקביל עם LLVM ו-Whale. LLVM נשמר כ-backend ברירת המחדל, ו-Whale נוסף כ-backend לבחירה.
בעת הרצת קוד Wave, ניתן לבחור איזה backend להשתמש באמצעות האפשרות --backend בין LLVM ל-Whale.
wavec run main.wave --backend=whale
wavec run main.wave --backend=llvm
בשלב זה מעוצבת ומוגדרת מבנה ה-IR של Whale עצמו. מרכזים רכיבים עיקריים כגון Instruction, Value, Block, ומממשים IR Generator הממיר את Wave AST ל-Whale IR.
כמו כן, נממש יוצר קוד עבור Whale, שיהיה ניתן להרצה כ-assembly או בצורה בינארית.
ב-LLVM, סוגים שקשה או לא יעיל ליישם, כמו למשל סוגים של מספרים שלמים גדולים כמו i1024,
ומבני מצביע מתקדמים, מוצגים בשלב זה כתכונות בלעדיות ל-Whale.
בנקודת הבקרה צריך להציג ב-Whale backend את Hello World, וכן על הכרזת משתנים, שיוך, טיפול במצביעים וכלי איתור שגיאות IR לתפקד כראוי. שלב זה הוא שבו מתבצע המרת Wave → Whale IR בפועל.
שלב Beta
המטרה של שלב Beta היא לעבור לחלוטין ל-Whale ולהסיר את התלות ב-LLVM. משלב זה, הקומפילציה וההרצה של Wave מתבצעות באמצעות Whale בלבד.
התלות והמודולים הקשורים ב-LLVM מסולקים, ולאופטימיזציה של ייצור הקוד ונתיב הריצה מבוצעת בהתאמה ל-Whale. האתגר המרכזי הוא להפוך את זרימת ה-IR מהיצירה ועד להרצה לפשוטה ומהירה.
עיצוב מסלולי אופטימיזציה עבור Whale IR, ושיפור מהירות יצירת הקוד ויעילות ההרצה. כל התחביר של Wave צריך להיות נתמך באופן מלא על בסיס Whale backend בשלב זה.
מבחינת הבדיקות, נבצע בדיקות יחידה וסוויטת בדיקות כוללת, ונבדוק את תאימות ה-WSON והספריות הסטנדרטיות ומה האפשרות לבניית Whale על פני פלטפורמות שונות.
שלב RC (מועמד לשחרור)
המטרה של שלב ה-RC היא להתחיל בבוטסטרפ של Wave. משלב זה, נתחיל להסיר בהדרגה את מימוש הקומפיילר של Wave ב-Rust, ולהתחיל לכתוב מחדש את הקומפיילר בשפת Wave עצמה.
נכתוב מחדש את יוצר ה-IR של Wave על בסיס Whale, ונחליף את לוגיקת הליבה של הקומפיילר והספריות std / core בקוד Wave. דרך תהליך זה, Whale נכנס לשלב ה-self-hosting.
כאשר הבוטסטרפ יצליח, יוולד הקומפיילר הראשון שהוא Wave טהור.
שלב Release (v0.0.1)
שלב ה-Release מציין את ההוצאה הרשמית הראשונה של Wave. בשלב זה, Wave ו-Whale יוצרים מערכת אקולוגית של שפה עצמאית ומשולבת לחלוטין.
מרכיבי ההוצאה כוללים את שפת Wave והספריות הסטנדרטיות, הערכה של קומפיילר Whale, מנהל חבילות Vex, ותבנית הנתונים WSON.
Wave בשלב זה צריך להריץ קומפיילר הכתוב כולו בקוד Wave,
ועל האופטימיזציה של Whale להיות גמורה.
תהליך הבנייה וההפצה דרך Vex מתאמץ,
ועתה אפשר לבנות להרצת קרוס-OS באמצעות vex build --windows.
אסטרטגיית מטא לפיתוח
הפיתוח של Wave + Whale מבוסס ע ל אסטרטגיה ברורה ולא רק על התקדמות פשוטה בשלבים. האסטרטגיה של רכבת+מסילה מאומצת לפיתוח Whale, במקביל לבניית ה-backend של Wave, כך מתאפשרת התקדמות משולבת בעיצוב המבנה והקוד.
בשלב Alpha, האסטרטגיה של התפצלות backend באמצעות האופציה --backend ממלאת תפקיד חשוב,
ומספקת בסיס להשוואה ובדיקה ישירה בין LLVM ל-Whale.
לאחר RC, המבנה מתהפך, והתוכנית היא ש-Wave יקמפל את עצמו באמצעות Whale בצורה משולבת.