0Pricing
Lua Academy · Lezione

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.0

Annotazioni 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

  1. Nozioni di base sulla FFI: ffi.cdef e ffi.load
  2. Chiamata delle funzioni C tramite FFI
  3. Puntatori, struct e array nella FFI
  4. Callback: passaggio di funzioni Lua a C
← Torna a Lua Academy