Calling Conventions

تستخدم جوليا ثلاث اتفاقيات استدعاء لأربعة أغراض مميزة:

NamePrefixPurpose
Nativejulia_Speed via specialized signatures
JL Calljlcall_Wrapper for generic calls
JL Calljl_Builtins
C ABIjlcapi_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.