मुख्य कंटेंट तक स्किप करें

Wave + Whale एकीकृत विकास रोडमैप v2

यह दस्तावेज 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 में लिखा गया है और LLVM IR उत्पादन और AOT निष्पादन के लिए inkwell और llvm-sys का उपयोग करता है।


अल्फा चरण

Alpha चरण का लक्ष्य Whale बैकएंड को स्थापित करना और LLVM और Whale को समानांतर उपयोग करने के लिए संरचना की स्थापना करना है। LLVM अभी भी मुख्य बैकएंड के रूप में उपयोग की जाती है, और Whale को एक वैकल्पिक बैकएंड के रूप में जोड़ा जाता है।

Wave कोड को चलाते समय --backend विकल्प के माध्यम से LLVM और Whale में से किस बैकएंड का उपयोग करना है, चुन सकते हैं।

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

इस चरण में Whale की स्वयं की IR संरचना को डिजाइन और परिभाषित किया जाता है। Instruction, Value, Block जैसे मुख्य घटकों को व्यवस्थित करते हैं, और Wave AST को Whale IR में बदलने वाला IR जनरेटर लागू करते हैं।

इसके अलावा, Whale के लिए कोड जनरेटर को लागू करके इसे असेम्बली या बाइनरी रूप में चलाने योग्य बनाते हैं। LLVM में लागू करने के लिए कठिन या अप्रभावी प्रकार, जैसे i1024 जैसी विशाल संख्या प्रकार या उन्नत पॉइंटर संरचना, Whale में इस चरण में पेश की जाती हैं।

चेकपॉइंट यह होना चाहिए कि Whale बैकएंड पर Hello World आउटपुट होना चाहिए, वेरिएबल डिक्लेरेशन और असाइनमेंट, पॉइंटर हैंडलिंग, IR डिबगिंग टूल सुचारू रूप से काम करने चाहिए। Wave → Whale IR रूपांतरण का यह वास्तव में लागू होने वाला चरण है।


बेटा चरण

Beta चरण का लक्ष्य Whale में पूर्ण स्थानांतरण और LLVM निर्भरता को हटाना है। इस चरण से Wave की कम्पाइल और निष्पादन केवल Whale का उपयोग करेंगे।

LLVM से संबंधित निर्भरताएं और मॉड्यूल पूरी तरह से हटाए जाते हैं, कोड जनरेशन और निष्पादन पथ को Whale के मानक पर अनुकूलित किया जाता है। IR जनरेशन से निष्पादन तक के प्रवाह को सरल और तीव्र बनाना मुख्य कार्य है।

Whale IR के लिए अनुकूलन पास को डिजाइन करते हैं, और कोड जनरेशन गति व निष्पादन दक्षता में सुधार करते हैं। Wave की सभी सिंटैक्स को इस चरण में Whale बैकएंड के मानक पर पूरी तरह से समर्थन किया जाना चाहिए।

परीक्षण के दृष्टिकोण से, यूनिट परीक्षण और पूर्ण परीक्षण सूट दोनों का प्रदर्शन किया जाता है, और WSON और मानक लाइब्रेरी की संगतता, क्रॉस-प्लेटफ़ॉर्म Whale बिल्ड के साथ सत्यापित किया जाता है।


RC (रिलीज़ उम्मीदवार) चरण

RC चरण का उद्देश्य Wave के बूटस्ट्रैप की शुरुआत करना है। इस चरण से Wave कंपाइलर के Rust कार्यान्वयन को धीरे-धीरे हटाते हैं, और Wave भाषा द्वारा Wave कंपाइलर को फिर से लिखना शुरू करते हैं।

Whale के आधार पर Wave IR जनरेटर को पुनः लिखते हैं, और कंपाइलर की मुख्य लॉजिक और std / core लाइब्रेरी को Wave कोड में बदलते हैं। इस प्रक्रिया के माध्यम से Whale आत्म-होस्टिंग चरण में प्रवेश करता है।

बूटस्ट्रैप के सफल होने पर, पहला Wave-नेटिव कंपाइलर उत्पन्न होगा।


रिलीज़ चरण (v0.0.1)

रिलीज़ चरण Wave की आधिकारिक पहली रिलीज़ का संकेत है। इस बिंदु पर, Wave और Whale पूरी तरह से एकीकृत स्वतंत्र भाषा पारिस्थितिकी तंत्र बनाते हैं।

रिलीज़ घटकों में Wave भाषा और मानक लाइब्रेरी, Whale कंपाइलर टूलचेन, Vex पैकेज मैनेजर, और WSON डेटा फॉर्मेट शामिल हैं।

इस चरण का Wave पूर्ण रूप से Wave कोड में तैयार किया गया कंपाइलर है, और Whale का अनुकूलन पूरा होना चाहिए। Vex के माध्यम से बिल्ड और डिप्लॉयमेंट प्रवाह स्थापित हो गया है, और vex build --windows जैसे क्रॉस OS बिल्ड भी संभव होने चाहिए।


विकास मेटा रणनीति

Wave + Whale विकास केवल एक चरण प्रगति नहीं है, बल्कि स्पष्ट रणनीति के आधार पर किया जाता है। Whale का विकास करते हुए साथ ही Wave बैकएंड का निर्माण करते हुए, ट्रेन+रेल रणनीति को अपनाया जाता है और बैकएंड संरचना और भाषा डिजाइन को एकसाथ विक्सित करते हैं।

Alpha चरण में --backend विकल्प के माध्यम से बैकएंड शाखा रणनीति मत्त्वपूर्ण भूमिका निभाती है, और LLVM और Whale की सीधे तुलना और सत्यापन करने के लिए मंच प्रदान करती है।

RC के बाद संरचना उलट जाती है, Wave कोड Whale के माध्यम से Wave को स्वयं संकलित करने की रेल संरचना योजना पूरी तरह से शुरू की जाती है।