Skip to main content

Wave + Whale ஒருங்கிணைந்த மேம்பாட்டு சாலை வரைபடம் v2

இந்த ஆவணம் 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> வடிவத்தின் வரிசை வடிவமைப்பை உள்ளடக்கியது.

இந்த கட்டத்தில், அனைத்து Wave கம்பைலர்களும் Rust என எழுதப்பட்டுள்ளன, LLVM IR உருவாக்கம் மற்றும் AOT செயல்படுத்துவதற்கு inkwell மற்றும் llvm-sys ஐப் பயன்படுத்துகிறது.


ஆல்பா நிலை

Whale பின்தளத்தை அறிமுகப்படுத்தி, LLVM மற்றும் Whaleஐ இணையாகப் பயன்படுத்தும் கட்டமைப்பை நிறுவுவதே ஆல்பா நிலையின் குறிக்கோள். LLVM இயல்புநிலை பின்தளமாக இருக்கும், மேலும் Whale விருப்ப பின்தளமாக சேர்க்கப்படும்.

Wave குறியீட்டை இயக்கும் போது, --backend விருப்பம், LLVM அல்லது Whale என்ற பின்தளத்தை நீங்கள் தேர்வு செய்ய அனுமதிக்கிறது.

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

இந்த கட்டத்தில், நாங்கள் Whale இன் IR கட்டமைப்பை வடிவமைத்து வரையறுக்கிறோம். அறிவுறுத்தல், மதிப்பு மற்றும் தொகுதி போன்ற முக்கிய கூறுகளை ஒழுங்கமைக்கவும், Wave AST ஐ Whale IR ஆக மாற்றும் IR ஜெனரேட்டரைச் செயல்படுத்துகிறது.

Whaleக்கான குறியீடு ஜெனரேட்டரையும் நாங்கள் செயல்படுத்துகிறோம், அதை அசெம்பிளி அல்லது பைனரி வடிவத்தில் இயக்கக்கூடியதாக ஆக்குகிறோம். LLVM இல், i1024 போன்ற மிகப் பெரிய முழு எண் வகைகள் போன்ற செயல்படுத்த கடினமான அல்லது திறனற்ற வகைகள், மேம்பட்ட சுட்டி கட்டமைப்புகள் Whale-குறிப்பிட்ட அம்சங்களாக இந்த கட்டத்தில் அறிமுகப்படுத்தப்படுகின்றன.

ஒரு சோதனைச் சாவடியாக, Whale பின்தளத்தில் இருந்து Hello World வெளியீடு சாத்தியமாக வேண்டும். மாறி அறிவிப்பு மற்றும் ஒதுக்கீடு, சுட்டி கையாளுதல் மற்றும் IR பிழைத்திருத்த கருவிகள் பொதுவாக செயல்பட வேண்டும். Wave → Whale IR மாற்றம் உண்மையில் நடந்து கொண்டிருக்கும் நிலை இதுவாகும்.


பீட்டா நிலை

பீட்டா கட்டத்தின் குறிக்கோள் Whale க்கு முழுமையாக மாறுவது மற்றும் LLVM சார்புகளை அகற்றுவது ஆகும். இந்தப் படியிலிருந்து, Wave இன் தொகுத்தல் மற்றும் செயல்படுத்தல் Whale ஐ மட்டுமே பயன்படுத்தும்.

அனைத்து LLVM-தொடர்புடைய சார்புகளும் தொகுதிகளும் அகற்றப்பட்டன. குறியீடு உருவாக்கம் மற்றும் செயல்படுத்தும் பாதை Whale அடிப்படையில் உகந்ததாக உள்ளது. முக்கிய பணி IR உருவாக்கத்தில் இருந்து இயக்கத்தை எளிமையாகவும் வேகமாகவும் மாற்றுவதாகும்.

Whale IRக்கான தேர்வுமுறை பாஸை வடிவமைக்கவும், குறியீடு உருவாக்க வேகம் மற்றும் செயல்படுத்தும் திறனை மேம்படுத்துகிறது. Wave இன் அனைத்து இலக்கணங்களும் இந்த கட்டத்தில் Whale பின்தளத்தில் முழுமையாக ஆதரிக்கப்பட வேண்டும்.

சோதனை பக்கத்தில், நாங்கள் யூனிட் சோதனைகள் மற்றும் முழு சோதனை தொகுப்புகள் இரண்டையும் செய்கிறோம். WSON மற்றும் நிலையான நூலக இணக்கத்தன்மை மற்றும் குறுக்கு-தளம் Whale உருவாக்கத்தை சரிபார்க்கிறது.


RC (வெளியீட்டு வேட்பாளர்) நிலை

Wave ஐ பூட்ஸ்ட்ராப்பிங் செய்வதே RC கட்டத்தின் குறிக்கோள். இந்தப் படியிலிருந்து, Wave கம்பைலரின் Rust செயலாக்கத்தை படிப்படியாக அகற்றுவோம், Wave கம்பைலரை Wave மொழியில் மீண்டும் எழுதுவதன் மூலம் தொடங்குகிறோம்.

Whale ஐ அடிப்படையாகக் கொண்டு, Wave ஐ மீண்டும் எழுதுகிறோம் கம்பைலர் கோர் லாஜிக் மற்றும் எஸ்டிடி/கோர் லைப்ரரிகளை 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 பின்தளத்தை ஒரே நேரத்தில் கட்டமைக்கும் ரயில்+ரயில் உத்தியைப் பின்பற்றுவதன் மூலம், பின்தள அமைப்பு மற்றும் மொழி வடிவமைப்பை இணையாக உருவாக்குகிறோம்.

ஆல்பா கட்டத்தில், --backend விருப்பத்தின் மூலம் பின்தளத்தில் கிளைக்கும் உத்தி முக்கிய பங்கு வகிக்கிறது. இது LLVM மற்றும் Whale ஐ நேரடியாக ஒப்பிட்டு சரிபார்ப்பதற்கான அடிப்படையை வழங்குகிறது.

RC க்குப் பிறகு, கட்டமைப்பு தலைகீழாக மாற்றப்படுகிறது, Wave குறியீடு Wave ஐ Whale வழியாகத் தொகுத்துக்கொள்வதன் மூலம், கட்டமைப்புத் தலைகீழ்த் திட்டம் முழு வீச்சில் உள்ளது.