Nozioni di base sulla FFI: ffi.cdef e ffi.load
Dichiari i tipi C e carichi librerie condivise con il modulo ffi di LuaJIT.
Nozioni di base sulla FFI: ffi.cdef e ffi.load è una lezione Lua Academy gratuita su CoddyKit. Questa è la lezione 1 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Lua Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Lua Academy include 4 lezioni in totale.
Che cos'è l'FFI?
L'FFI (Foreign Function Interface) di LuaJIT consente di chiamare funzioni di librerie C e utilizzare direttamente le strutture dati C da Lua, senza dover scrivere codice wrapper in C.
Caricare l'FFI
Carichi la libreria FFI con require("ffi"). È integrata in LuaJIT e non è disponibile nella PUC Lua standard.
local ffi = require("ffi")ffi.cdef: dichiarare i tipi C
ffi.cdef(cDeclarations) analizza le dichiarazioni C e rende disponibili all'FFI i tipi e le firme delle funzioni. Non viene compilato codice effettivo: vengono fornite solo informazioni sui tipi.
ffi.cdef[[
int printf(const char *fmt, ...);
double sqrt(double x);
typedef struct { int x; int y; } Point;
]]ffi.load: caricare una libreria condivisa
ffi.load(libname) carica una libreria condivisa e restituisce un oggetto i cui campi corrispondono alle funzioni C dichiarate.
local C = ffi.C -- access to libc on POSIX
local m = ffi.load("m") -- libm
print(m.sqrt(2.0)) -- 1.414...Accedere direttamente alle funzioni di libc
Nei sistemi POSIX, ffi.C consente di accedere a tutte le funzioni standard della libreria C senza un caricamento esplicito.
ffi.cdef[[ int puts(const char *s); ]]
ffi.C.puts("Hello from C!")Percorso di ffi.load
Passi il percorso completo oppure il nome di una libreria standard. Su Linux utilizzi "m" per libm.so, "pthread" per pthread e così via.
Dichiarare le struct
Dichiari le struct C in cdef, quindi le allochi e vi acceda da 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.0Annotazioni e qualificatori dei tipi
cdef supporta const, unsigned, int32_t, uint64_t e altri tipi C standard.
Chiamate cdef multiple
Può chiamare ffi.cdef più volte. Le dichiarazioni duplicate vengono ignorate. In genere è opportuno organizzare le dichiarazioni per libreria.
Differenze tra piattaforme
Il layout delle struct e le firme delle funzioni possono variare a seconda della piattaforma (Windows rispetto a Linux, 32 bit rispetto a 64 bit). Utilizzi ffi.os e ffi.arch per dichiarare condizionalmente le firme corrette.
Nota sulla sicurezza
L'FFI aggira la sicurezza dei tipi di Lua. Dichiarazioni C errate causano corruzione della memoria, segfault o comportamento indefinito. Verifichi sempre le dichiarazioni confrontandole con l'header C effettivo.
Domanda sulle basi dell'FFI
Che cosa fa ffi.cdef?
Riepilogo: basi dell'FFI
Utilizzi ffi.cdef per dichiarare tipi e funzioni C e ffi.load per caricare librerie condivise. ffi.C fornisce accesso diretto a libc. Verifichi sempre che le dichiarazioni corrispondano agli header C effettivi, per evitare la corruzione della memoria.
Domande Frequenti
La lezione «Nozioni di base sulla FFI: ffi.cdef e ffi.load» è gratuita?
Sì — il testo completo di «Nozioni di base sulla FFI: ffi.cdef e ffi.load» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Lua Academy, passa a CoddyKit PRO. Il corso Lua Academy include 4 lezioni in totale.
Cosa imparerò in «Nozioni di base sulla FFI: ffi.cdef e ffi.load»?
Dichiari i tipi C e carichi librerie condivise con il modulo ffi di LuaJIT. Eserciti Lua Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Lua Academy?
Non è richiesta alcuna esperienza precedente. Lua Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 4.
Quanto tempo richiede la lezione «Nozioni di base sulla FFI: ffi.cdef e ffi.load»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Lua Academy?
Sì. Ogni lezione Lua Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Nozioni di base sulla FFI: ffi.cdef e ffi.load
- Chiamata delle funzioni C tramite FFI
- Puntatori, struct e array nella FFI
- Callback: passaggio di funzioni Lua a C