Calling Conventions
تستخدم جوليا ثلاث اتفاقيات استدعاء لأربعة أغراض مميزة:
Name | Prefix | Purpose |
---|---|---|
Native | julia_ | Speed via specialized signatures |
JL Call | jlcall_ | Wrapper for generic calls |
JL Call | jl_ | Builtins |
C ABI | jlcapi_ | Wrapper callable from C |
Julia Native Calling Convention
تم تصميم اتفاقية الاتصال الأصلية للاتصالات السريعة غير العامة. عادةً ما تستخدم توقيعًا متخصصًا.
- تُهمل أشباح LLVM (أنواع الطول الصفري).
- تُمرر القيم المتجهة والقياسية في LLVM بواسطة القيمة.
- تُمرر تجميعات LLVM (المصفوفات والهياكل) عن طريق المرجع.
تُعاد القيم الصغيرة كقيم إرجاع LLVM. تُعاد القيم الكبيرة عبر اتفاقية "إرجاع الهيكل" (sret
)، حيث يقدم المتصل مؤشراً إلى فتحة الإرجاع.
قد يتم تمثيل حجة أو قيم إرجاع تكون عبارة عن مجموعة متجانسة أحيانًا كمتجه LLVM بدلاً من مصفوفة LLVM.
JL Call Convention
تستخدم اتفاقية JL Call للوظائف المدمجة والتوزيع العام. يتم إعلان الوظائف المكتوبة يدويًا باستخدام هذه الاتفاقية عبر الماكرو JL_CALLABLE
. تستخدم الاتفاقية بالضبط 3 معلمات:
F
- تمثيل جوليا للدالة التي يتم تطبيقهاargs
- مؤشر إلى مصفوفة من المؤشرات إلى الصناديقnargs
- طول المصفوفة
قيمة الإرجاع هي مؤشر إلى صندوق.
C ABI
تتيح أغلفة C ABI استدعاء جوليا من C. يقوم الغلاف باستدعاء دالة باستخدام اتفاقية الاستدعاء الأصلية.
تُعبر التوائم دائمًا كصفائف C.