Determinismo en el núcleo y no determinismo en la capa de shell

Fuentes: Deterministic Core, Non-Deterministic Shell Architecture

El artículo propone una arquitectura de software que combina la pureza funcional con la determinismo, un concepto más amplio que la programación funcional pura. Esta estructura, inspirada en la teoría de Gary Bernhardt, divide el código en un núcleo determinista y una capa de shell no determinista. El núcleo, que gestiona la lógica de negocio, debe ser determinista: dado un conjunto de entradas, siempre produce la misma salida, lo que facilita la prueba y la depuración. La shell, por el contrario, coordina dependencias externas, como la entrada/salida (IO), bases de datos o comunicación de red, donde el comportamiento puede ser no repetible.

El texto argumenta que la determinismo no requiere necesariamente funciones puras; máquinas de estados imperativas también pueden ser deterministas si se gestionan correctamente. Esto permite aplicar estos principios a lenguajes como C, donde la programación funcional pura es impráctica. La estrategia se centra en identificar y agrupar núcleos deterministas dentro de bases de código legadas, reduciendo la superficie de código difícil de probar. Se recomienda un enfoque gradual, similar al desfragmentado de discos, para mejorar la fiabilidad y mantenibilidad del software sin reescribir todo el sistema de inmediato.