En fongbé, une langue parlée par environ deux millions de personnes au Bénin et dans certaines parties du Togo et du Nigeria, il y a une expression : "E flin nu." Elle signifie "Il se souvient des choses."
Le mot "flin" porte le poids de la mémoire -- pas celle de l'informatique, mesurée en giga-octets, mais la mémoire humaine : l'acte de garder quelque chose en tête, de ne pas lâcher prise. Dans la culture fongbé, comme dans de nombreuses traditions ouest-africaines, l'éléphant est l'animal qui incarne cette qualité. L'éléphant marche lentement, mais il arrive. Il est patient, mais il est puissant. Et il n'oublie jamais.
Quand nous avions besoin d'un nom pour un langage de programmation dont le principe architectural fondamental est que tout est persisté et possède un historique, le nom était déjà là. Il était là depuis des siècles, prononcé sur les marchés de Cotonou et d'Abomey, bien avant que quiconque pense à construire un ordinateur.
Voici l'histoire de comment un mot fongbé est devenu le nom d'un langage de programmation -- et comment ce nom a façonné la conception du langage.
L'anatomie d'un nom
L'expression "E flin nu" se décompose ainsi :
E flin nu
| | |
| | +-- "choses" / "trucs"
| +---------- "se souvenir" / "ne pas oublier"
+--------------- "il/elle" (troisième personne du singulier)
Traduction : "Il se souvient des choses"Le verbe "flin" est le mot opératif. Il ne signifie pas "stocker" ou "enregistrer" ou "persister" -- ce sont des opérations mécaniques. Il signifie "se souvenir", ce qui implique la compréhension, le contexte et la continuité. Une base de données stocke des lignes. Un éléphant se souvient d'expériences. La distinction compte.
Thales a grandi au Bénin, où le fongbé est l'une des langues nationales. La décision de nommer le langage d'après un mot fongbé n'était pas un exercice marketing de branding culturel. C'était une déclaration d'origine : ce langage a été conçu en Afrique de l'Ouest, par un Ouest-Africain, pour résoudre des problèmes auxquels les développeurs ouest-africains font face chaque jour. Il porte son origine dans son nom, dans chaque extension de fichier, dans chaque commande tapée dans un terminal.
app.flin -- quatre caractères qui encodent une philosophie, une culture et une architecture.
Pourquoi les noms comptent en conception de langage
Chaque langage de programmation à succès a un nom qui, délibérément ou accidentellement, communique quelque chose d'essentiel sur son caractère.
Python tire son nom de Monty Python. Le message : la programmation devrait être amusante, accessible, voire humoristique. La conception de Python reflète cela -- il se lit comme du pseudocode, il priorise la lisibilité, et la culture de sa communauté est accueillante.
Rust évoque le processus organique de l'oxydation -- quelque chose qui émerge de l'interaction des éléments au fil du temps. Rust le langage parle de systèmes qui doivent endurer, de sûreté qui émerge de règles strictes.
Go est simple, court et direct -- comme le langage lui-même. Deux lettres, zéro cérémonie.
FLIN évoque la mémoire. Ce n'est pas une coïncidence : la conception native en mémoire est la caractéristique la plus distinctive du langage. Le nom n'est pas une étiquette appliquée après coup ; c'est la graine à partir de laquelle la conception a poussé.
Quand nous avons commencé à concevoir le système d'entités de FLIN -- le remplacement des ORM comme Prisma et TypeORM -- le nom nous tirait constamment vers une question spécifique : que signifierait-il pour un langage de programmation de véritablement se souvenir ?
La réponse est devenue les requêtes temporelles.
Conception native en mémoire : le don de l'éléphant
Dans tous les autres langages de programmation, les données n'existent qu'au temps présent. Quand vous mettez à jour une ligne dans PostgreSQL, l'ancienne valeur disparaît. Quand vous modifiez un objet JavaScript, son état précédent s'évanouit. Si vous voulez un historique, vous le construisez vous-même : tables d'audit, event sourcing, capture de données de changement, extensions de base de données temporelle.
FLIN rejette cela. Dans FLIN, chaque entité a un historique par défaut, parce que le langage se souvient.
flinentity Product {
name: text
price: money
description: semantic text
updated: time = now
}
// Créer un produit
save Product { name: "Manuel FLIN", price: 2500 }
// Plus tard, mettre à jour le prix
product = Product.where(name == "Manuel FLIN").first
product.price = 1900
save product
// L'ancien prix n'a pas disparu. L'éléphant se souvient.
oldProduct = product @ -1
oldProduct.price // 2500 -- la version précédente
// Interroger le produit tel qu'il était hier
productYesterday = product @ yesterday
// Ou à n'importe quelle date spécifique
productLastMonth = product @ "2026-02-26"
// Ou voir l'historique complet
{for version in product.history}
<div>
<span>{version.updated}</span>
<span>{version.price}</span>
</div>
{/for}L'opérateur @ est la syntaxe d'accès temporel de FLIN. C'est l'expression la plus visible de la philosophie du nom : le langage se souvient des choses, et il vous donne un opérateur d'un seul caractère pour accéder à ces souvenirs.
Considérez ce que cela remplace dans une pile traditionnelle. Pour implémenter la même fonctionnalité avec PostgreSQL et Prisma, vous auriez besoin de :
sql-- PostgreSQL : Créer une table d'audit
CREATE TABLE product_history (
id SERIAL PRIMARY KEY,
product_id INTEGER REFERENCES products(id),
name TEXT,
price DECIMAL,
changed_at TIMESTAMP DEFAULT NOW(),
operation VARCHAR(10)
);
-- Créer une fonction de déclencheur
CREATE OR REPLACE FUNCTION track_product_changes()
RETURNS TRIGGER AS $$
BEGIN
INSERT INTO product_history
(product_id, name, price, operation)
VALUES
(OLD.id, OLD.name, OLD.price, TG_OP);
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
-- Attacher le déclencheur
CREATE TRIGGER product_audit
AFTER UPDATE OR DELETE ON products
FOR EACH ROW EXECUTE FUNCTION track_product_changes();Trente lignes de SQL, une fonction de déclencheur, une table d'audit, et vous avez toujours besoin de code applicatif pour interroger l'historique. Dans FLIN, la même capacité fait zéro ligne de configuration parce qu'elle est intégrée au mot-clé entity.
L'éléphant n'oublie jamais. FLIN non plus.
L'éléphant dans la culture béninoise
Pour comprendre pourquoi l'éléphant résonne si profondément comme symbole de FLIN, il faut comprendre ce que l'éléphant signifie dans les cultures du Bénin.
Le Royaume du Dahomey, qui a existé dans ce qui est aujourd'hui le Bénin d'environ 1600 à 1904, a adopté l'éléphant comme symbole royal. Le roi Ghézo, qui a régné de 1818 à 1858, utilisait l'éléphant comme son emblème personnel. Son nom de louange incluait une référence à la force de l'éléphant : un éléphant que la forêt ne peut contenir.
Dans la cosmologie fon, l'éléphant représente plusieurs qualités simultanément :
- Mémoire -- l'éléphant n'oublie pas les chemins, les sources d'eau ni les menaces, même après des décennies
- Force -- pas la force agressive d'un prédateur, mais la force patiente et endurante du plus grand animal terrestre
- Sagesse -- les éléphants sont menés par des matriarches qui se souviennent des cycles de sécheresse, des routes migratoires et des terrains sûrs
- Communauté -- les éléphants voyagent en groupes, protègent leurs petits et pleurent leurs morts
Ces qualités se transposent étonnamment bien à ce qu'un langage de programmation devrait être :
- Mémoire -- FLIN se souvient de chaque version de chaque entité
- Force -- le runtime Rust de FLIN est rapide, sûr et de qualité production
- Sagesse -- le mot-clé
askde FLIN utilise l'IA pour traduire l'intention en requêtes - Communauté -- FLIN est conçu pour la communauté mondiale des développeurs, en commençant par l'Afrique
L'éléphant n'est pas une mascotte. C'est le diagramme d'architecture.
Le nom a façonné l'architecture
Les noms ne sont pas neutres. Un nom crée des attentes, et ces attentes façonnent les décisions de conception. Quand nous avons nommé le langage FLIN -- "Il se souvient des choses" -- nous nous sommes engagés à faire de la mémoire un concept de première classe.
Cet engagement a eu des conséquences concrètes :
Conséquence 1 : FlinDB doit être embarqué. Une base de données externe ne peut pas fournir de sémantique native en mémoire de manière transparente. Si l'utilisateur doit configurer une connexion PostgreSQL, la promesse "il se souvient" est brisée par la friction de configuration. FlinDB est embarqué dans le runtime FLIN, alimenté par le moteur ZEROCORE, nécessitant zéro configuration.
Conséquence 2 : l'historique doit être automatique. Si l'utilisateur doit opter pour le suivi d'historique par entité, la plupart ne s'en donneront pas la peine, et la promesse fondamentale du langage devient optionnelle. Dans FLIN, chaque entité suit son historique par défaut. Vous ne pouvez pas créer une entité qui oublie.
Conséquence 3 : les requêtes temporelles doivent être syntaxiquement bon marché. Si interroger l'historique nécessite un appel d'API verbeux, les développeurs l'éviteront. L'opérateur @ -- un seul caractère -- rend l'accès temporel aussi facile que l'accès aux champs. user.name vous donne le nom actuel. (user @ yesterday).name vous donne le nom d'hier. Le coût cognitif est quasi nul.
Conséquence 4 : le mot-clé save doit être explicite. Si FLIN se souvient de tout, alors l'acte de créer un souvenir doit être intentionnel. On ne persiste pas des données par accident. Vous écrivez save user, et une nouvelle version est créée. C'est la différence entre un langage qui suit silencieusement l'état et un langage qui donne au développeur le contrôle sur ce qui constitue un point de sauvegarde significatif.
flin// Ces deux lignes créent exactement une entrée d'historique
user.name = "Juste A. GNIMAVO"
save user
// Modifier sans sauvegarder ne crée aucune entrée d'historique
user.email = "[email protected]"
// Le changement existe en mémoire mais n'est pas encore mémoriséC'est le don de l'éléphant à la conception de langage : un nom qui n'est pas juste une étiquette, mais un contrat. Chaque fonctionnalité que nous ajoutons à FLIN est testée contre la question : "Est-ce que cela aide le langage à mieux se souvenir ?"
Afrique d'abord, prêt pour le monde
Nommer un langage de programmation d'après un mot fongbé est un choix délibéré de placer l'Afrique au centre du récit de la conception des langages de programmation.
La plupart des langages de programmation sont nommés en anglais, conçus aux États-Unis ou en Europe, et optimisés pour des développeurs avec un internet rapide, du matériel puissant et un accès aux derniers outils. L'hypothèse implicite est que le "développeur par défaut" vit à San Francisco ou Londres.
FLIN part d'une hypothèse différente : le développeur par défaut vit à Abidjan, Cotonou, Lagos, Nairobi ou Dakar. Il a un internet intermittent. Il paie au méga-octet. Son alimentation électrique n'est pas fiable. Son matériel a trois générations de retard sur la Silicon Valley.
Le nom signale cela. Quand un développeur à Lagos voit app.flin pour la première fois et apprend que le nom vient du fongbé -- une langue ouest-africaine -- il y a une reconnaissance : cet outil a été fait pour moi. Pas adapté pour moi. Pas localisé pour moi. Fait pour moi, dès le début.
Ce n'est pas simplement symbolique. La contrainte de conception "Afrique d'abord" produit objectivement de meilleurs logiciels :
Contrainte venant d'Afrique Bénéfice pour tout le monde
----------------------------------- ----------------------------------
Internet lent (2 Mbps) Zéro dépendance, petit binaire
Données chères (au Mo) Pas de npm install, pas de mises à jour à télécharger
Électricité peu fiable Compilation rapide, pas de longs builds
Matériel limité Faible empreinte mémoire
Besoin de fonctionner hors ligne Base de données embarquée, pas de serveur nécessaire
Utilisateurs mobile d'abord Support PWA intégréL'architecture à zéro dépendance de FLIN n'est pas un compromis fait pour les marchés émergents. C'est une décision de conception qui rend le langage meilleur pour chaque développeur de la planète. Un développeur à Berlin bénéficie des temps de démarrage instantanés tout autant qu'un développeur à Bamako. Un développeur à Tokyo apprécie l'absence de node_modules tout autant qu'un développeur à Lomé.
Ce qui est bon pour Lagos est bon pour Londres. L'éléphant nous l'a appris.
L'extension de fichier .flin
Il y a une satisfaction discrète dans l'extension de fichier .flin. Quatre caractères. Assez distinctive pour être immédiatement reconnaissable, assez courte pour être tapée sans friction, et significative d'une façon que .js, .py et .rs ne le sont pas.
Quand vous créez app.flin, vous ne faites pas que nommer un fichier. Vous invoquez l'éléphant. Vous dites : ce fichier se souviendra. Cette application aura un historique. Ce code persistera.
L'extension sert aussi un objectif pratique. Aucun autre langage de programmation n'utilise .flin, ce qui signifie zéro conflit avec l'outillage existant. La coloration syntaxique, les associations de fichiers et les plugins d'éditeur peuvent cibler .flin sans ambiguïté.
flin// counter.flin -- l'application FLIN la plus simple
count = 0
<button click={count++}>{count}</button>Ce fichier de quatre lignes contient : une variable réactive, une vue HTML, un gestionnaire d'événement et des mises à jour automatiques du DOM. Sauvegardez-le, lancez flin dev, et vous avez une application fonctionnelle.
L'éléphant approuverait. Simple. Mémorable. Complet.
Le glossaire de programmation fongbé
FLIN est le premier, mais peut-être pas le dernier. La langue fongbé contient de nombreux mots qui se transposent magnifiquement sur des concepts informatiques :
Mot fongbé Signification Parallèle informatique
---------- --------------------- -------------------
flin se souvenir persistance, historique
nu chose, truc données, objets
wa faire, fabriquer exécuter, construire
kpon regarder, examiner inspecter, déboguer
zun compter énumérer, itérer
se entendre, comprendre parser, interpréter
gbeta diviser, séparer partitionner, découper
kple rassembler, collecter agréger, interrogerNous avons choisi "flin" parce qu'il capture l'aspect le plus distinctif de la conception du langage. Mais la richesse du fongbé comme source de vocabulaire technique suggère quelque chose de plus large : les langues africaines ne sont pas seulement des sources valides pour nommer des produits techniques ; elles sont souvent plus expressives et précises que les racines latines et grecques qui dominent la terminologie informatique.
Le mot "flin" porte une nuance que "persist" ne porte pas. "Persist" est mécanique -- des données sont écrites sur disque. "Flin" est intentionnel -- le système choisit de se souvenir, de la façon dont un éléphant choisit de se souvenir de l'emplacement d'une source d'eau qu'il n'a pas visitée depuis vingt ans.
La longue mémoire
Il y a une dimension supplémentaire de l'histoire du nom que nous n'avons pas encore abordée : la longue mémoire de l'histoire elle-même.
Le Bénin -- anciennement le Royaume du Dahomey -- possède une riche tradition intellectuelle et technologique qui précède la colonisation européenne. Le peuple fon a développé des systèmes sophistiqués de mathématiques, d'astronomie et de gouvernance. La tradition vodoun, qui prend sa source au Bénin, est un système philosophique complexe qui traite de la mémoire, de l'ascendance et de la persistance de l'identité à travers le temps.
Nommer un langage de programmation d'après un mot fongbé est, à petite échelle, un acte de continuité. Cela dit : le futur de la technologie se construit non seulement dans la Silicon Valley, mais à Abidjan, Cotonou et à travers le continent africain. Et il se construit non pas en abandonnant l'héritage culturel, mais en s'en inspirant.
L'éléphant est un symbole de mémoire en Afrique de l'Ouest depuis des siècles. Maintenant, c'est un symbole de mémoire en informatique.
E flin nu. Il se souvient des choses.
Et le langage qui porte son nom aussi.
Prochain dans la série : Cinq principes de conception qui façonnent chaque ligne de FLIN -- Chaque langage a des opinions. FLIN en a cinq, et elles sont non négociables.