extern struct وتخطيط ABI
طابق تخطيط ذاكرة بنية C
extern struct وتخطيط ABI درس مجاني في Zig Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Zig Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Zig Academy 4 دروس في المجموع.
التخاطب مع C
عندما تستدعي Zig شيفرة C، يجب أن يتفق الطرفان على تخطيط الذاكرة. وهذا العقد المشترك هو ABI.
لا ضمان للبنى العادية
يتيح struct العادي لـ Zig اختيار ترتيب الحقول والحشو بحرية، لذلك قد لا يتطابق تخطيطه مع ما تتوقعه مكتبة C.
استخدام extern struct
عند وضع علامة extern struct على نوع، ينسّق Zig حقوله وفق C ABI، بحيث يطابق بنية C حقلًا بحقل.
const Point = extern struct {
x: i32,
y: i32,
};تبقى الحقول بالترتيب
يحافظ extern struct على ترتيب التصريح، كما تفعل C، لذلك يأتي الحقل الأول دائمًا أولًا في الذاكرة.
الحشو مثل C
على خلاف packed struct، يضيف extern struct حشوًا للمحاذاة، تمامًا كما يفعل مترجم C.
Packed مقابل Extern
استخدم packed لتخطيط مطابق للبتات، واستخدم extern لمطابقة تخطيط البايتات في C. فكل منهما يحل مشكلة مختلفة تتعلق بالتخطيط.
تمرير البنى إلى C
يمكن تمرير extern struct مباشرةً إلى دالة C، لأن تخطيطه يطابق الترويسة التي جُمّعت الدالة بالاعتماد عليها.
extern fn use_point(p: Point) void;تحقق من الحجم
تأكد من تطابق extern struct مع C باستخدام @sizeOf، الذي يعرض إجمالي عدد البايتات، بما في ذلك أي حشو للمحاذاة.
const n = @sizeOf(Point); // 8فحص إزاحات الحقول
استخدم @offsetOf لمعرفة الموضع الدقيق الذي يبدأ فيه كل حقل، وهذا مفيد للتحقق من محاذاة البنية مع C.
const off = @offsetOf(Point, "y"); // 4الأنواع المتوافقة مع C فقط
يجب أن تكون حقول extern struct من أنواع متوافقة مع C، لذلك لا يُسمح بأشكال خاصة بـ Zig مثل الشرائح داخله.
الجسر إلى C
يتيح extern struct و C ABI معًا لـ Zig وC مشاركة البيانات بأمان من دون نسخ أو تخمين بشأن التخطيط. 🔗
تحقق سريع
تذكّر الغرض الذي صُمّم extern struct لمطابقته.
مراجعة
تعلّمت أن extern struct يطابق C ABI: حقول مرتبة مع حشو بأسلوب C، ويمكن تمريره إلى C والتحقق منه باستخدام @sizeOf و@offsetOf. 🎉
الأسئلة الشائعة
هل درس «extern struct وتخطيط ABI» مجاني؟
نعم — نص درس «extern struct وتخطيط ABI» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Zig Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Zig Academy 4 دروس في المجموع.
ماذا ستتعلم في «extern struct وتخطيط ABI»؟
طابق تخطيط ذاكرة بنية C تتمرن على Zig Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Zig Academy؟
لا تُشترط خبرة سابقة. Zig Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.
كم من الوقت يستغرق درس «extern struct وتخطيط ABI»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Zig Academy هذا؟
نعم. كل درس في Zig Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- packed struct للتخطيط الدقيق
- أعداد صحيحة بعروض اعتباطية مثل u3
- حقول البتات والعلامات
- extern struct وتخطيط ABI