En fongbe, una lengua hablada por aproximadamente dos millones de personas en Benín y partes de Togo y Nigeria, hay una frase: "E flin nu." Significa "Recuerda las cosas."
La palabra "flin" lleva el peso de la memoria -- no la del tipo informático, medida en gigabytes, sino la humana: el acto de mantener algo en la mente, de no dejarlo ir. En la cultura fongbe, como en muchas tradiciones de África Occidental, el elefante es el animal que encarna esta cualidad. El elefante camina lento, pero llega. Es paciente, pero es poderoso. Y nunca olvida.
Cuando necesitábamos un nombre para un lenguaje de programación cuyo principio arquitectónico central es que todo se persiste y tiene historial, el nombre ya estaba ahí. Había estado ahí durante siglos, hablado en los mercados de Cotonú y Abomey, mucho antes de que nadie pensara en construir un ordenador.
Esta es la historia de cómo una palabra fongbe se convirtió en el nombre de un lenguaje de programación -- y cómo ese nombre moldeó el diseño del lenguaje.
La anatomía de un nombre
La frase "E flin nu" se descompone así:
E flin nu
| | |
| | +-- "cosas" / "algo"
| +---------- "recordar" / "no olvidar"
+--------------- "eso" (tercera persona del singular)
Traducción: "Recuerda las cosas"El verbo "flin" es la palabra operativa. No significa "almacenar" o "registrar" o "persistir" -- esas son operaciones mecánicas. Significa "recordar," lo que implica comprensión, contexto y continuidad. Una base de datos almacena filas. Un elefante recuerda experiencias. La distinción importa.
Thales creció en Benín, donde el fongbe es una de las lenguas nacionales. La decisión de nombrar el lenguaje con una palabra fongbe no fue un ejercicio de marketing en branding cultural. Fue una declaración de origen: este lenguaje fue concebido en África Occidental, por un africano occidental, para resolver problemas que los desarrolladores de África Occidental enfrentan cada día. Lleva su origen en su nombre, en cada extensión de archivo, en cada comando escrito en un terminal.
app.flin -- cuatro caracteres que codifican una filosofía, una cultura y una arquitectura.
Por qué los nombres importan en el diseño de lenguajes
Todo lenguaje de programación exitoso tiene un nombre que, ya sea deliberada o accidentalmente, comunica algo esencial sobre su carácter.
Python lleva el nombre de Monty Python. El mensaje: la programación debería ser divertida, accesible, incluso humorística. El diseño de Python refleja esto -- se lee como pseudocódigo, prioriza la legibilidad, y su cultura comunitaria es acogedora.
Rust evoca el proceso orgánico de la oxidación -- algo que emerge de la interacción de elementos con el tiempo. Rust el lenguaje trata sobre sistemas que deben perdurar, sobre seguridad que emerge de reglas estrictas.
Go es simple, corto y directo -- como el propio lenguaje. Dos letras, sin ceremonia.
FLIN evoca la memoria. No por coincidencia, el diseño nativo de memoria es la característica más distintiva del lenguaje. El nombre no es una etiqueta aplicada después del hecho; es la semilla de la que creció el diseño.
Cuando comenzamos a diseñar el sistema de entidades de FLIN -- el reemplazo de ORMs como Prisma y TypeORM -- el nombre nos seguía llevando hacia una pregunta específica: ¿qué significaría para un lenguaje de programación recordar verdaderamente?
La respuesta fueron las consultas temporales.
Diseño nativo de memoria: el regalo del elefante
En todos los demás lenguajes de programación, los datos existen solo en tiempo presente. Cuando actualizas una fila en PostgreSQL, el valor antiguo desaparece. Cuando modificas un objeto JavaScript, su estado anterior se desvanece. Si quieres historial, lo construyes tú mismo: tablas de auditoría, event sourcing, captura de datos de cambio, extensiones de base de datos temporal.
FLIN rechaza esto. En FLIN, toda entidad tiene historial por defecto, porque el lenguaje recuerda.
flinentity Product {
name: text
price: money
description: semantic text
updated: time = now
}
// Create a product
save Product { name: "FLIN Handbook", price: 2500 }
// Later, update the price
product = Product.where(name == "FLIN Handbook").first
product.price = 1900
save product
// The old price is not gone. The elephant remembers.
oldProduct = product @ -1
oldProduct.price // 2500 -- the previous version
// Query the product as it was yesterday
productYesterday = product @ yesterday
// Or on any specific date
productLastMonth = product @ "2026-02-26"
// Or see the complete history
{for version in product.history}
<div>
<span>{version.updated}</span>
<span>{version.price}</span>
</div>
{/for}El operador @ es la sintaxis de acceso temporal de FLIN. Es la expresión más visible de la filosofía del nombre: el lenguaje recuerda cosas, y te da un operador de un solo carácter para acceder a esos recuerdos.
Considera lo que esto reemplaza en un stack tradicional. Para implementar la misma funcionalidad con PostgreSQL y Prisma, necesitarías:
sql-- PostgreSQL: Create an audit table
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)
);
-- Create a trigger function
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;
-- Attach the trigger
CREATE TRIGGER product_audit
AFTER UPDATE OR DELETE ON products
FOR EACH ROW EXECUTE FUNCTION track_product_changes();Treinta líneas de SQL, una función trigger, una tabla de auditoría, y aún necesitas código de aplicación para consultar el historial. En FLIN, la misma capacidad son cero líneas de configuración porque está integrada en la palabra clave entity.
El elefante nunca olvida. Tampoco FLIN.
El elefante en la cultura beninesa
Para entender por qué el elefante resuena tan profundamente como símbolo para FLIN, necesitas entender lo que el elefante significa en las culturas de Benín.
El Reino de Dahomey, que existió en lo que hoy es Benín desde aproximadamente 1600 hasta 1904, adoptó al elefante como símbolo real. El Rey Ghezo, que reinó de 1818 a 1858, usó al elefante como su emblema personal. Su nombre de alabanza incluía una referencia a la fuerza del elefante: un elefante que el bosque no puede contener.
En la cosmología fon, el elefante representa varias cualidades simultáneamente:
- Memoria -- el elefante no olvida caminos, fuentes de agua ni amenazas, incluso después de décadas
- Fuerza -- no la fuerza agresiva de un depredador, sino la fuerza paciente y perdurable del animal terrestre más grande
- Sabiduría -- los elefantes son liderados por matriarcas que recuerdan ciclos de sequía, rutas migratorias y terreno seguro
- Comunidad -- los elefantes viajan en grupos, protegen a sus crías y lloran a sus muertos
Estas cualidades se corresponden sorprendentemente bien con lo que un lenguaje de programación debería ser:
- Memoria -- FLIN recuerda cada versión de cada entidad
- Fuerza -- el runtime Rust de FLIN es rápido, seguro y de calidad de producción
- Sabiduría -- la palabra clave
askde FLIN usa IA para traducir intención en consultas - Comunidad -- FLIN está diseñado para la comunidad global de desarrolladores, empezando por África
El elefante no es una mascota. Es el diagrama arquitectónico.
El nombre moldeó la arquitectura
Los nombres no son neutrales. Un nombre crea expectativas, y esas expectativas moldean las decisiones de diseño. Cuando nombramos al lenguaje FLIN -- "Recuerda las cosas" -- nos comprometimos a hacer de la memoria un concepto de primera clase.
Este compromiso tuvo consecuencias concretas:
Consecuencia 1: FlinDB debe ser embebida. Una base de datos externa no puede proporcionar semántica nativa de memoria de forma transparente. Si el usuario tiene que configurar una conexión PostgreSQL, la promesa de "recuerda" se rompe por la fricción de configuración. FlinDB está embebida en el runtime de FLIN, impulsada por el motor ZEROCORE, sin requerir ninguna configuración.
Consecuencia 2: El historial debe ser automático. Si el usuario tiene que optar por el rastreo de historial por entidad, la mayoría no se molestará, y la promesa central del lenguaje se vuelve opcional. En FLIN, toda entidad rastrea historial por defecto. No puedes crear una entidad que olvide.
Consecuencia 3: Las consultas temporales deben ser sintácticamente económicas. Si consultar el historial requiere una llamada verbosa a una API, los desarrolladores lo evitarán. El operador @ -- un solo carácter -- hace el acceso temporal tan fácil como el acceso a campos. user.name te da el nombre actual. (user @ yesterday).name te da el nombre de ayer. El coste cognitivo es casi cero.
Consecuencia 4: La palabra clave save debe ser explícita. Si FLIN recuerda todo, entonces el acto de crear un recuerdo debe ser intencional. No persistes datos accidentalmente. Escribes save user, y se crea una nueva versión. Esta es la diferencia entre un lenguaje que rastrea estado silenciosamente y uno que da al desarrollador control sobre lo que constituye un punto de control significativo.
flin// These two lines create exactly one history entry
user.name = "Juste A. GNIMAVO"
save user
// Modifying without saving creates no history entry
user.email = "[email protected]"
// The change exists in memory but is not yet rememberedEste es el regalo del elefante al diseño de lenguajes: un nombre que no es solo una etiqueta, sino un contrato. Cada funcionalidad que añadimos a FLIN se evalúa contra la pregunta: "¿Esto hace que el lenguaje recuerde mejor?"
África primero, listo para el mundo
Nombrar un lenguaje de programación con una palabra fongbe es una elección deliberada de centrar a África en la narrativa del diseño de lenguajes de programación.
La mayoría de los lenguajes de programación se nombran en inglés, se diseñan en Estados Unidos o Europa, y se optimizan para desarrolladores con internet rápido, hardware potente y acceso a las últimas herramientas. La suposición implícita es que el "desarrollador predeterminado" vive en San Francisco o Londres.
FLIN parte de una suposición diferente: el desarrollador predeterminado vive en Abiyán, Cotonú, Lagos, Nairobi o Dakar. Tiene internet intermitente. Paga por megabyte. Su suministro eléctrico no es fiable. Su hardware está tres generaciones por detrás de Silicon Valley.
El nombre señala esto. Cuando un desarrollador en Lagos ve app.flin por primera vez y aprende que el nombre viene del fongbe -- una lengua de África Occidental -- hay un reconocimiento: esta herramienta fue hecha para mí. No adaptada para mí. No localizada para mí. Hecha para mí, desde el principio.
Esto no es meramente simbólico. La restricción de diseño de África primero produce software objetivamente mejor:
Restricción desde África Beneficio para todos
----------------------------------- ----------------------------------
Internet lento (2 Mbps) Cero dependencias, binario pequeño
Datos caros (por MB) Sin npm install, sin actualizaciones que descargar
Electricidad poco fiable Compilación rápida, sin builds largos
Hardware limitado Huella de memoria pequeña
Requisito offline-first Base de datos embebida, sin servidor necesario
Usuarios mobile-first Soporte PWA integradoLa arquitectura de cero dependencias de FLIN no es un compromiso hecho para mercados emergentes. Es una decisión de diseño que hace al lenguaje mejor para cada desarrollador del planeta. Un desarrollador en Berlín se beneficia de tiempos de arranque instantáneos tanto como un desarrollador en Bamako. Un desarrollador en Tokio aprecia la ausencia de node_modules tanto como un desarrollador en Lomé.
Lo que es bueno para Lagos es bueno para Londres. El elefante nos enseñó eso.
La extensión de archivo .flin
Hay una satisfacción discreta en la extensión de archivo .flin. Cuatro caracteres. Lo suficientemente distintiva para ser inmediatamente reconocible, lo suficientemente corta para escribir sin fricción, y significativa de una forma que .js, .py y .rs no son.
Cuando creas app.flin, no estás solo nombrando un archivo. Estás invocando al elefante. Estás diciendo: este archivo recordará. Esta aplicación tendrá historial. Este código persistirá.
La extensión también sirve un propósito práctico. Ningún otro lenguaje de programación usa .flin, lo que significa que hay cero conflictos con las herramientas existentes. El resaltado de sintaxis, las asociaciones de archivos y los plugins de editores pueden apuntar a .flin sin ambigüedad.
flin// counter.flin -- the simplest FLIN application
count = 0
<button click={count++}>{count}</button>Este archivo de cuatro líneas contiene: una variable reactiva, una vista HTML, un manejador de eventos y actualizaciones automáticas del DOM. Guárdalo, ejecuta flin dev, y tienes una aplicación funcional.
El elefante aprobaría. Simple. Memorable. Completo.
El glosario de programación fongbe
FLIN es el primero, pero puede que no sea el último. La lengua fongbe contiene muchas palabras que se corresponden bellamente con conceptos informáticos:
Palabra fongbe Significado Paralelo informático
----------- --------------------- -------------------
flin recordar persistencia, historial
nu cosa, algo datos, objetos
wa hacer, fabricar ejecutar, construir
kpon mirar, examinar inspeccionar, depurar
zun contar enumerar, iterar
se oír, entender analizar, interpretar
gbeta dividir, separar particionar, fragmentar
kple reunir, recoger agregar, consultarElegimos "flin" porque captura el aspecto más distintivo del diseño del lenguaje. Pero la riqueza del fongbe como fuente de vocabulario técnico sugiere algo más grande: las lenguas africanas no son solo fuentes válidas para nombrar productos técnicos; a menudo son más expresivas y precisas que las raíces latinas y griegas que dominan la terminología informática.
La palabra "flin" lleva matices que "persist" no tiene. "Persist" es mecánico -- los datos se escriben en disco. "Flin" es intencional -- el sistema elige recordar, de la misma forma que un elefante elige recordar la ubicación de una fuente de agua que no ha visitado en veinte años.
La larga memoria
Hay una dimensión más de la historia del nombre que no hemos discutido: la larga memoria de la propia historia.
Benín -- antiguamente el Reino de Dahomey -- tiene una rica tradición intelectual y tecnológica que precede a la colonización europea. El pueblo fon desarrolló sistemas sofisticados de matemáticas, astronomía y gobernanza. La tradición vodún, que se origina en Benín, es un sistema filosófico complejo que trata sobre la memoria, la ancestralidad y la persistencia de la identidad a través del tiempo.
Nombrar un lenguaje de programación con una palabra fongbe es, de una pequeña forma, un acto de continuidad. Dice: el futuro de la tecnología se está construyendo no solo en Silicon Valley, sino en Abiyán, Cotonú y a lo largo del continente africano. Y se está construyendo no abandonando el patrimonio cultural, sino apoyándose en él.
El elefante ha sido un símbolo de memoria en África Occidental durante siglos. Ahora es un símbolo de memoria en la ciencia informática.
E flin nu. Recuerda las cosas.
Y quizás lo más importante que recuerda es que el gran software puede venir de cualquier lugar.
Siguiente en la serie: Five Design Principles That Shape Every Line of FLIN -- Todo lenguaje tiene opiniones. FLIN tiene cinco, y son innegociables.