FFI
Wave மொழியில் வெளிப்புறமாக செயல்படுத்தப்படும் அழைப்பு செயல்பாடுகளுக்கான FFI (வெளிப்புற செயல்பாடு இடைமுகம்) விவரக்குறிப்பை இந்த ஆவணம் விவரிக்கிறது. FFI மூலம், Wave நிரல்கள் பிற மொழிகளில் எழுதப்பட்ட சொந்த நூலகங்களுடன் நேரடியாக இடைமுகம் செய்ய முடியும்.
கண்ணோட்டம்
Wave இன் FFI அறிவிப்பு அடிப்படையில் செயல்படுகிறது. Wave குறியீட்டில் வெளிப்புற செயல்பாடுகள் செயல்படுத்தப்படவில்லை, மேலும் எந்த ABI (பயன்பாடு பைனரி இடைமுகம்) செயல்பாட்டைப் பின்பற்றுகிறது என்பதை மட்டும் குறிப்பிடவும். இணைக்கும் கட்டத்தில் வெளிப்புற நூலகங்களிலிருந்து உண்மையான செயலாக்கம் தீர்க்கப்படுகிறது.
FFI தொகுக்கும் நேரத்தில் ஒரு செயல்பாட்டின் இருப்பை மட்டுமே அறிவி க்கிறது, மேலும் ஒரு இயங்கக்கூடிய கோப்பை உருவாக்கும் போது இணைப்பான் உண்மையான குறியீட்டை இணைக்கிறது.
வெளிப்புற அறிவிப்பு
வெளிப்புற செயல்பாடுகள் வெளிப்புற முக்கிய சொல்லைப் பயன்படுத்தி அறிவிக்கப்படுகின்றன.
தற்போது, Waveக்கு ABI விவரக்குறிப்பு தேவைப்படுகிறது, மேலும் extern(c) மட்டுமே ஆதரிக்கப்படுகிறது.
extern(c) fun function_name(args...) -> return_type;
ABI ஐக் குறிப்பிடவும்
extern அறிவிப்பு ABI ஐக் குறிப்பிட வேண்டும்.
தற்போது ஆதரிக்கப்படும் ABI c ஆகும்.
extern(c) fun printf(fmt: ptr<u8>);
extern(rust) போன்ற அறிவிப்புகள் பாகுபடுத ்தப்படலாம் என்றாலும், சொற்பொருள் பகுப்பாய்வு படியின் போது பிழைகள் ஏற்படும்.
செயல்பாட்டு நிலை வெளிப்புற அறிவிப்பு
வெளிப்புற செயல்பாட்டை அறிவிக்கும்போது, அதை பின்வருமாறு எழுதுங்கள்:
extern(c) fun InitWindow(width: i32, height: i32, title: ptr<u8>);
இந்த அறிவிப்பு C ABI ஐப் பின்தொடரும் InitWindow குறியீடுகள் வெளிப்புற நூலகத்தில் உள்ளன.
தொகுதி-நிலை வெளிப்புற அறிவிப்பு
ஒரே ABI ஐப் பயன்படுத்தும் பல வெளிப்புற செயல்பாடுகள் இருந்தால், அவை தொகுதி வடிவத்தில் அறிவிக்கப்படலாம்.
extern(c) {
fun InitWindow(width: i32, height: i32, title: ptr<u8>);
fun CloseWindow();
fun BeginDrawing();
fun EndDrawing();
}
பிளாக்-லெவல் பிரகடனங்கள், செயல்பாட்டு நிலை அறிவிப்புகளுடன் முற்றிலும் ஒத்ததாக இருக்கும், மேலும் அவை வாசிப்புத்திறன் மற்றும் கட்டமைப்பிற்கான தொடரியல் ஆகும்.
சின்னம் பெயரிடுதல்
சில ABI இல், Wave செயல்பாட்டுப் பெயர்கள் மற்றும் உண்மையான இணைப்பான் சின்னப் பெயர்கள் பொருந்தாமல் இருக்கலாம். இந்த வழக்கில், வெளிப்புற செயல்பாடு ஒரு சர மாக இணைக்கப்படும் உண்மையான குறியீட்டின் பெயரை நீங்கள் குறிப்பிடலாம்.
செயல்பாட்டு நிலை சின்னம் பதவி
extern(c, "puts")
fun rust_func(i32);
rust_funcக்கான அழைப்புகள் உண்மையான இணைப்புச் சின்ன மாக puts ஐப் பயன்படுத்தும் என்பதை இந்த அறிவிப்பு குறிப்பிடுகிறது.
தொகுதி-நிலை சின்னம் பதவி
ஒவ்வொரு செயல்பாட்டிற்குப் பிறகும் தனித்தனி குறியீட்டுப் பெயர்களைக் குறிப்பிட தொகுதி-நிலை அறிவிப்புகள் உங்களை அனுமதிக்கின்றன.
extern(c) {
fun my_puts(ptr<i8>) "puts";
fun my_strlen(ptr<i8>) "strlen";
}
சுட்டி வகை
சுட்டிகள் ptr<T> வடிவத்தில் வெளிப்படுத்தப்படுகின்றன.
ptr<u8>
ptr<MyStruct>
ptr<T> ஆனது வெளிப ்புற மொழிகளில் உள்ள சுட்டிகளுடன் நேரடியாக ஒத்துள்ளது, மேலும் நினைவக உரிமை அல்லது வாழ்க்கைச் சுழற்சி Wave ஆல் நிர்வகிக்கப்படுவதில்லை.
கட்டமைப்பைப் பயன்படுத்தவும்
கட்டமைப்புகளை வாதங்கள் அல்லது வெளிப்புற செயல்பாடுகளின் மதிப்புகளை திரும்பப் பெறலாம்.
struct Color {
r: u8,
g: u8,
b: u8,
a: u8,
}
FFI இல் கட்டமைப்புகளைப் பயன்படுத்தும் போது, புல வரிசை அறிவிக்கப்பட்ட வரிசையைப் பராமரிக்கிறது மற்றும் ABI க்கு தேவையான நினைவக அமைப்பைப் பின்பற்றுகிறது.
வெளிப்புற செயல்பாடு அழைப்பு
extern என அறிவிக்கப்பட்ட செயல்பாடுகள் வழக்கமான செயல்பாடுகளைப் போலவே அழைக்கப்படுகின்றன.
fun main() -> i32 {
InitWindow(800, 600, "Wave");
BeginDrawing();
EndDrawing();
CloseWindow();
return 0;
}
அழைக்கும் போது தொடரியல் வேறுபாடுகள் இல்லை, மேலும் அழைப்பு மரபுகள் மற்றும் குறியீட்டு இணைப்பு ஆகியவை ABI மற்றும் இணைப்பாளரால் முழுமையாகக் கையாளப்படுகின்றன.
இணைக்கிறது
வெளிப்புற செயல்பாட்டின் உண்மையான செயல்படுத்தல் இணைக்கும் கட்டத்தில் வெளிப்புற நூலகத்திலிருந்து வழங்கப்படுகிறது. Wave கம்பைலர் வெளிப்புற செயல்பாட்டு அழைப்புகளைக் கொண்ட பொருள் கோப்புகளை உருவாக்குகிறது, மேலும் இணைப்பான் குறிப்பிட்ட நூலகங்கள் மூலம் குறியீடுகளைத் தீர்க்கிறது.
நூலக விவரக்குறிப்பு உருவாக்க கருவி மற்றும் CLI விருப்பத்தின் மூலம்.
கட்டுப்பாடுகள்
Wave பின்வரும் அம்சங்களை வழங்கவில்லை:
- செயல்பாடு சுட்டிக்காட்டி
- திரும்ப திரும்ப செயல்பாடு
- தானியங்கி நினைவக மேலாண்மை
- விதிவிலக்கு கையாளுதல் மொழிகளுக்கு இடையே ஒருங்கிணைப்பு
இந்த அம்சங்கள் எதிர்கால பதிப்புகளில் தனித்தனியாக குறிப்பிடப்படலாம்.
