Lua Academy · درس

أساسيات FFI: ‏ffi.cdef وffi.load

صرّح بأنواع C وحمّل المكتبات المشتركة باستخدام وحدة ffi في LuaJIT

الدرس 1 من 413 خطوة

أساسيات FFI: ‏ffi.cdef وffi.load درس مجاني في Lua Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Lua Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Lua Academy 4 دروس في المجموع.

ما هي FFI؟

تتيح FFI (واجهة الدوال الخارجية) في LuaJIT استدعاء دوال مكتبات C واستخدام هياكل بيانات C مباشرة من Lua، من دون الحاجة إلى شيفرة تغليف مكتوبة بـC.

تحميل FFI

حمّلوا مكتبة FFI باستخدام require("ffi"). فهي مضمّنة في LuaJIT وغير متاحة في PUC Lua القياسية.

local ffi = require("ffi")

‏ffi.cdef: تعريف أنواع C

يحلّل ffi.cdef(cDeclarations) تعريفات C ويجعل الأنواع وتواقيع الدوال متاحة لـFFI. لا تُجمّع أي شيفرة فعلية، بل تُحفظ معلومات الأنواع فقط.

ffi.cdef[[
  int printf(const char *fmt, ...);
  double sqrt(double x);
  typedef struct { int x; int y; } Point;
]]

‏ffi.load: تحميل مكتبة مشتركة

يحمّل ffi.load(libname) مكتبة مشتركة ويعيد كائنًا تمثل حقوله دوال C المعلنة.

local C = ffi.C       -- access to libc on POSIX
local m = ffi.load("m")  -- libm
print(m.sqrt(2.0))       -- 1.414...

الوصول المباشر إلى دوال libc

في أنظمة POSIX، يتيح ffi.C الوصول إلى جميع دوال مكتبة C القياسية من دون تحميل صريح.

ffi.cdef[[ int puts(const char *s); ]]
ffi.C.puts("Hello from C!")

مسار ffi.load

مرّروا المسار الكامل أو اسم مكتبة قياسيًا. في Linux استخدموا "m" للمكتبة libm.so، و"pthread" لمكتبة pthreads، وغير ذلك.

تعريف البنى

عرّفوا هياكل C في cdef، ثم خصّصوا لها الذاكرة ووصلوا إليها من Lua.

ffi.cdef[[
  typedef struct { float x, y, z; } Vec3;
]]
local v = ffi.new("Vec3", {1, 2, 3})
print(v.x, v.y, v.z)  -- 1.0  2.0  3.0

تعليقات الأنواع ومحدّداتها

يدعم cdef الكلمات const وunsigned وint32_t وuint64_t وغيرها من أنواع C القياسية.

استدعاءات cdef متعددة

يمكنكم استدعاء ffi.cdef عدة مرات. ويُتجاهل تكرار التعريفات. ومن المعتاد تنظيمها حسب المكتبة.

الاختلافات بين المنصات

قد تختلف تخطيطات البنى وتواقيع الدوال باختلاف المنصة، مثل Windows وLinux أو 32 بت و64 بت. استخدموا ffi.os وffi.arch لتعريف التواقيع الصحيحة بصورة شرطية.

ملاحظة حول الأمان

تتجاوز FFI أمان الأنواع في Lua. وتتسبب تعريفات C غير الصحيحة في تلف الذاكرة أو أخطاء segfault أو سلوك غير محدد. تحقّقوا دائمًا من التعريفات بمقارنتها برأس C الفعلي.

سؤال حول أساسيات FFI

ماذا تفعل ffi.cdef؟

مراجعة: أساسيات FFI

استخدموا ffi.cdef لتعريف أنواع ودوال C، وffi.load لتحميل المكتبات المشتركة. يتيح ffi.C الوصول المباشر إلى libc. تحقّقوا دائمًا من تطابق التعريفات مع رؤوس C الفعلية لتجنب تلف الذاكرة.

البدء مجانًا

تعلم Lua مع معلم ذكاء اصطناعي — مجانًا

اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.

الدورات
40
الدروس
159

الأسئلة الشائعة

هل درس «أساسيات FFI: ‏ffi.cdef وffi.load» مجاني؟

نعم — نص درس «أساسيات FFI: ‏ffi.cdef وffi.load» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Lua Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Lua Academy 4 دروس في المجموع.

ماذا ستتعلم في «أساسيات FFI: ‏ffi.cdef وffi.load»؟

صرّح بأنواع C وحمّل المكتبات المشتركة باستخدام وحدة ffi في LuaJIT تتمرن على Lua Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Lua Academy؟

لا تُشترط خبرة سابقة. Lua Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.

كم من الوقت يستغرق درس «أساسيات FFI: ‏ffi.cdef وffi.load»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Lua Academy هذا؟

نعم. كل درس في Lua Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. أساسيات FFI: ‏ffi.cdef وffi.load
  2. استدعاء دوال C عبر FFI
  3. المؤشرات والبُنى والمصفوفات في FFI
  4. دوال الاستدعاء العكسي: تمرير دوال Lua إلى C
← العودة إلى Lua Academy