مولد الارتباطات متعدد اللغات لمكتبتك.
أنشئ مكتبة قوية بلغة Rust، ويمكنك الوصول إليها بسهولة من لغتك المفضلة الثانية:
صمم .dll
/ .so
واحدًا في Rust، واستهلكه من أي مكان.
احصل على ميزات جودة الحياة (مثل الفئات والسلاسل) باللغات التي تحتوي عليها.
احصل دائمًا على واجهة برمجة تطبيقات معقولة ومتوافقة مع لغة C.
سير عمل غير مؤلم، ولا يتطلب أدوات خارجية.
من السهل دعم المزيد من اللغات، والواجهات الخلفية منفصلة تمامًا عن المشروع الرئيسي.
نحن نسعى جاهدين لجعل الارتباطات التي تم إنشاؤها لدينا خالية من التكلفة . يجب أن تكون اصطلاحية بقدر ما يمكن أن تكون قد كتبتها بنفسك، ولكن لا تخفي أبدًا الواجهة التي تريد كشفها بالفعل.
استخدم interoptopus::{ffi_function, ffi_type, Inventory, InventoryBuilder, function};#[ffi_type]pub struct Vec2 {pub x: f32,pub y: f32,}#[ffi_function]pub fn my_function(input: Vec2) {println! ("{}"، input.x)؛}// حدد واجهة FFI الخاصة بنا على أنها `ffi_inventory` يحتوي على // دالة واحدة `my_function`. الأنواع هي inferred.pub fn ffi_inventory() -> المخزون {InventoryBuilder::new().register(function!(my_function)).validate().inventory()}
لغة | قفص | إخراج العينة 1 |
---|---|---|
ج # | interoptopus_backend_csharp | Interop.cs |
ج | interoptopus_backend_c | my_header.h |
بايثون | interoptopus_backend_cpython | مرجع.py |
آخر | اكتب الواجهة الخلفية الخاصة بك 2 | - |
1 للمشروع المرجعي.
2 أضف دعمًا للغة جديدة في غضون ساعات قليلة. لا حاجة لطلب السحب. وعد الخنصر.
إذا كنت تريد أن...
ابدأ برؤية مرحباً بالعالم ،
قم بإنتاج مشروعك ، وشاهد التصميم الحقيقي للمشروع ،
فهم ما هو ممكن ، راجع المشروع المرجعي ،
دعم لغة جديدة ، ونسخ الخلفية C.
انظر المشروع المرجعي للحصول على نظرة عامة:
وظائف (وظائف قائمة بذاتها والمندوبين)
الأنواع (المركبات، التعدادات، المعتمة، المراجع، ...)
الثوابت (الثوابت البدائية؛ نتائج تقييم الثوابت)
الأنماط (مؤشرات ASCII، الخيارات، الشرائح، الفئات، ...)
الارتباطات منخفضة المستوى التي تم إنشاؤها هي ارتباطات مصنوعة يدويًا بدون تكلفة لتلك اللغة.
ومع ذلك، فحتى الارتباطات المصنوعة يدويًا تواجه بعض الحمل الخاص بالهدف عند حدود FFI (على سبيل المثال، التنظيم أو التثبيت في اللغات المُدارة). بالنسبة لـ C#، غالبًا ما تكون التكلفة نانو ثانية، أما بالنسبة لـ Python CFFI فيمكن أن تكون ميكروثانية.
على الرغم من أنه لا يمكنك فعل أي شيء في نهاية المطاف بشأن أداء FFI للغة ما، فإن إدراك تكاليف المكالمات يمكن أن يساعدك في تصميم واجهات برمجة تطبيقات أفضل.
يمكن العثور على جداول تكلفة المكالمات التفصيلية هنا:
C# استدعاء النفقات العامة
استدعاء بايثون النفقات العامة
للحصول على نظرة عامة سريعة، يسرد هذا الجدول أنواع المكالمات الأكثر شيوعًا في ns / call :
بناء | ج # | بايثون |
---|---|---|
primitive_void() | 7 | 272 |
primitive_u32(0) | 8 | 392 |
many_args_5(0, 0, 0, 0, 0) | 10 | 786 |
callback(x => x, 0) | 43 | 1168 |
مُحاط ببوابات خلف أعلام الميزات ، مما يتيح ما يلي:
derive
- وحدات ماكرو Proc مثل ffi_type
، ...
serde
- سمات Serde على الأنواع الداخلية.
log
- استدعاء سجل أخطاء FFI.
v0.15 - عملية تنظيف واسعة النطاق، وإصلاح الأخطاء، وإصلاح تجربة المستخدم (+syn2).
v0.14 - تجربة مستخدم أفضل للمخزون.
v0.13 - تستخدم الواجهة الخلفية لـ Python ctypes
الآن.
الإصدار 0.12 - توافق أفضل باستخدام #[ffi_service_method]
.
v0.11 - C# يقوم بتبديل العوامل إلى الأساليب الثابتة.
الإصدار 0.10 - نكهات C# DotNet
و Unity
(بما في ذلك Burst).
الإصدار 0.9 - شرائح C# أسرع بمقدار 150 مرة، وتلميحات عن نوع Python.
v0.8 - تم نقل وظائف الاختبار إلى الواجهات الخلفية المعنية.
v0.7 - قم بإنشاء أنماط وحدات ماكرو لتحسين مستندات FFI.
v0.6 - إعادة تسمية وتوضيح العديد من الأنماط.
الإصدار 0.5 - استخدام أكثر راحة للشرائح في Rust وFFI.
الإصدار 0.4 - تمكين دعم التسجيل في مكالمات FFI التي يتم إنشاؤها تلقائيًا.
v0.3 - توافق أفضل مع الأدوية العامة.
v0.2 - "الأنماط" المقدمة؛ التشغيل المتداخل لـ C#.
v0.1 - الإصدار الأول.
راجع أيضًا تعليمات الترقية الخاصة بنا.
الأسئلة الشائعة وأدلة السلامة.
العلاقات العامة هي موضع ترحيب.
إرسال إصلاحات الأخطاء الصغيرة مباشرة. يجب أن تكون التغييرات الرئيسية هي القضايا أولاً.
أي شيء يجعل الارتباطات العاملة مسبقًا تغير سلوكها أو تتوقف عن الترجمة يعد تغييرًا كبيرًا؛
هذا لا يعني أننا نعارض كسر الأشياء التي نود التحدث عنها قبل حدوثها.
يجب أن تتحقق الميزات أو الأنماط الجديدة في المشروع المرجعي وأن تكون مصحوبة باختبار التشغيل المتداخل (على سبيل المثال، اختبار الواجهة الخلفية الذي يقوم بتشغيل C# / Python مقابل DLL الذي يستدعي هذا الرمز) في واجهة خلفية واحدة مضمنة على الأقل.