Python est depuis longtemps considéré comme un « langage pour tous », mais Lua place la barre encore plus bas : 22 mots-clés, 8 types de données et une structure de données. Cela suffit pour écrire un jeu, configurer un serveur Web ou automatiser une infrastructure cloud.
En raison d'un noyau aussi petit, le langage se lit comme un pseudo-code, et vous pouvez l'apprendre littéralement en une soirée. Dans cet article, nous allons plonger profondément : nous verrons comment les tableaux et les coroutines sont organisés, où Lua gagne sur Python, nous donnerons des statistiques d'utilisation et montrerons des exemples vivants.

Syntaxe minimale — puissance maximale ⏱️
-- рекурсивный факториал
function fact(n)
if n == 1 then return 1 end
return n * fact(n - 1)
end
print("fact(5) = " .. fact(5)) -- 120Les blocs sont fermés end, les lignes sont concaténées .., les commentaires commencent --. Clairement et sans règles cachées. Besoin d'un cycle ? for à une seule ligne décide :
for i = 1, 10 do print(i) endChiffres secs : Lua vs Python, Ruby, JavaScript 📊
Indicateur | Lua 5.4 | Python 3.12 | Ruby 3.3 | Node.js 20 |
|---|---|---|---|---|
Mots clés | 22 | 35 | 41 | 44 |
Hello World, octets dans exe (Linux, compression UPX) | 404 Ko | 27 Mo | 31 Mo | 61 Mo |
Heure de début du script « vide », ms | 6 | 22 | 38 | 45 |
Pic de mémoire du script « vide », Mo | 1.9 | 9.3 | 10.8 | 15.4 |
LOC pour factorielle (avec i/o) | 5 | 7 | 9 | 9 |
GitHub ★ par an (2024→2025) | +7 % | +3 % | −1 % | +4 % |
Noyau + stdlib, lignes de code C | 29 k | 500 k | 380 k | 620 k |
Conclusion : Lua démarre plus rapidement, prend moins de mémoire et reste plus compact que ses concurrents, tout en conservant toutes les fonctionnalités nécessaires.
Une structure de données — un tableau 📦
local arr = {1, 4, 9}
local map = {width = 200, height = 100}
print(arr[1]) -- 1 (индексация с 1)
print(map.width) -- 200Vous voulez un tableau ? Utilisez des index numériques. Besoin d'un dictionnaire ? Attribuez par nom. Vous voulez les deux ? Pas de problème, le tableau peut stocker simultanément des éléments positionnels et nommés.
Les avantages de cette approche :
Un modèle de mémoire simple est un allocateur.
Il n'y a pas de différence entre un objet JSON et un tableau lors de l'échange de données avec JS.
Le temps d'apprentissage est réduit : « appris les tables — compris toutes les structures de données Lua ».
Environnement productif 🔧
Affectations multiples et valeurs retournées
local a, b = 10, 20
function size() return 800, 600 end
local w, h = size()Itérateurs
ipairsetpairs
for i, v in ipairs({"a","e","i"}) do print(i, v) end
for k, v in pairs({john=120, ann=80}) do print(k, v) endCoroutines — un moyen facile d'écrire du code non bloquant sans async/await :
local co = coroutine.create(function()
for i = 1,3 do print("tick", i); coroutine.yield() end
end)
coroutine.resume(co) -- tick 1
coroutine.resume(co) -- tick 2
coroutine.resume(co) -- tick 3Où Lua fonctionne déjà 🚀
Projet / Produit | Ce que fait Lua | Raison du choix |
Roblox | La logique de jeu de millions de jeux | Sandbox + vitesse JIT |
Blizzard WoW | Interface utilisateur et add-ons | Redémarrage « à chaud » sans reconstruction |
Nginx (OpenResty) | Rendu dynamique et A/B | Légèreté, intégrabilité |
Adobe Lightroom | Extensions et préréglages | Scriptage multiplateforme |
Wireshark | Dissector personnalisé | Intégration rapide des modules C |
Ce n'est que la partie visible de l'iceberg : Lua peut être trouvé dans Redis, dans les systèmes embarqués DJI et même dans Tesla Autopilot.
Bibliothèque standard minimale mais puissante 📚
local msg = "Hello Lua"
print(msg:sub(7):lower():reverse()) -- aulLes lignes, les tableaux, les coroutines, le système de fichiers,
os,debug— tout est déjà intégré, rien n'a besoin d'être importé.Le système de motifs « légers et réactifs » occupe <500 lignes de C.
Le garbage collector avec algorithme de liste à trois couleurs fonctionne automatiquement.
Gestion des erreurs sans prise de tête 🚑
function grade(score)
if score > 100 then error{code=1002,msg=">100"} end
return score>=50 and "P" or "F"
end
for _, s in ipairs({20,120,60}) do
local ok, res = pcall(grade, s)
if ok then print("Grade:", res)
else print("Error["..res.code.."]:", res.msg) end
endpcall détecte les exceptions et le résultat (ok, data) simplifie le flux de traitement.
Modules sans mots-clés spéciaux 📦➡️📦
-- calc.lua
local M = {}
function M.add(a,b) return a+b end
return M-- main.lua
local calc = require("calc")
print(calc.add(2,3)) -- 5Pas de export/import ; tableaux et require — c'est tout l'« assemblage ».
Écosystème : petit mais en pleine croissance 🌱
LuaRocks: >9 000 paquets (croissance de +12 % en 2024).
LuaJIT: accélère le code à la vitesse C, est utilisé dans Nginx et Redis.
Tendances des offres d'emploi: Upwork note une hausse de 18 % de la demande de freelances Lua en 2024.
Pourquoi apprendre Lua maintenant 🎓
Low‑code boom: les startups recherchent des DSL embarquées — Lua s'intègre avec deux fichiers C.
Industrie du jeu: Roblox, Defold, Corona SDK sont basés sur des scripts Lua.
Marché IoT: les micrologiciels ESP avec Lua prennent moins de 512 Ko de mémoire flash.
OpenAI API? 🤖 Écrire des scripts de tests A‑B est moins cher en Lua que de monter un full‑stack.
Via application « Kodik : apprentissage de la programmation » vous pouvez suivre un cours interactif sur Lua en une soirée — 🔥 et appliquer immédiatement vos compétences.
Conclusion 🎯
Lua combine un minimalisme extrême avec la praticité : le compilateur JIT, LuaRocks, les coroutines et les métatables vous permettent d'écrire des jeux, des serveurs Web et des scripts pour DevOps. Si vous avez besoin d'un langage que vous pouvez expliquer à un ami autour d'un café, essayez Lua. Et si vous voulez passer de zéro aux premières coroutines en quelques heures, jetez un œil à « Kodik : apprentissage de la programmation ».
