NoiseLang: un lenguaje donde cada valor es una distribución de probabilidad

Fuentes: NoiseLang: a language where every value is a probability distribution

NoiseLang es un lenguaje de programación experimental en el que cualquier valor es una distribución de probabilidad y los operadores mapean distribuciones a distribuciones. Un número escalar equivale a un delta de Dirac, mientras que las variables aleatorias se generan con el operador ~ y las muestras independientes en vectores con ~[N]. El sistema ejecuta simulaciones de Monte Carlo en paralelo bajo demanda cuando se solicita un resultado mediante P, E, Var o Q, y devuelve estimaciones con error estándar.

El proyecto nació hace nueve años como una idea personal de Manu Martínez-Almeida durante su carrera de Telecomunicaciones, pero quedó abandonado por la dificultad de construir un motor Monte Carlo eficiente con inferencia bayesiana condicional. Recientemente, el autor lo retomó con ayuda de herramientas de IA, que resultaron útiles para las partes de JIT (compilación al vuelo mediante Cranelift), el back-end de WebAssembly y la optimización numérica, pero limitadas para el diseño del lenguaje, donde tendían a duplicar funcionalidades o fragmentar la sintaxis.

La arquitectura se basa en un único grafo dirigido acíclico (RvGraph) que alimenta tres rutas de ejecución: un intérprete columnar por lotes como referencia de corrección, un JIT que fusiona la expresión en un núcleo nativo y un emisor de WebAssembly para el navegador. Los tres caminos producen resultados bit a bit idénticos. Sobre un M4 Pro de 14 núcleos, el motor sostiene unos 5.800 millones de muestras por segundo, con un núcleo generado a 1,15 veces el rendimiento de Rust escrito a mano compilado con LLVM.

La inferencia se apoya en condicionamiento por rechazo, adecuado para pocas observaciones discretas pero poco escalable con datos continuos, y no incluye todavía simulación con estado como cadenas de Markov. Frente a NumPy, Stan y PyMC, NoiseLang cubre la etapa de pizarra: permite escribir la probabilidad como notación matemática y obtener respuestas sin montaje adicional. También puede usarse directamente en el navegador mediante el paquete npm @noiselang/core, sin instalación previa.