Show HN: Numbat – Un lenguaje de programación con dimensiones físicas como tipos
Un nuevo lenguaje llamado Numbat pretende tratar las dimensiones físicas y las unidades como tipos, permitiendo comprobaciones en tiempo de compilación que detecten errores como sumar metros y segundos o usar mal constantes en fórmulas físicas. Los comentaristas lo comparan con sistemas de unidades en F#, Rust, Julia, C++, Nim, Ada y herramientas como GNU Units y Frink, sopesando los beneficios de un DSL dedicado y tipado estáticamente frente a bibliotecas incrustadas en lenguajes de propósito general. También examinan casos límite más difíciles —como el tiempo calendario frente al cronológico, la conversión de divisas y el álgebra lineal con unidades—, destacando dónde el enfoque es potente hoy y dónde el sistema de tipos y las bibliotecas tendrían que crecer.
Alcance de las unidades y dimensiones “físicas”
- Debate sobre si la luz, la temperatura y el tiempo son “físicos” frente a solo espaciales; el consenso en el hilo se inclina hacia que “físico” significa “descrito por la física”, no solo espacio 3D.
- Se mencionan la relatividad y los cuadrivectores para argumentar que el tiempo está estrechamente acoplado al espacio.
- Algunos rechazan afirmaciones marginales de física que cuestionan el espacio-tiempo, señalando que no son corrientes.
Ecosistemas existentes y “reinventar la rueda”
- Muchos señalan sistemas similares de unidades/dimensiones: Python (Pint, astropy.units), F# Units of Measure,
uomde Rust, Unitful.jl de Julia, Squants de Scala, Nim (Unchained), GNU units, análisis dimensional de Ada, unidades basadas en plantillas de C++, Frink y el proyecto anterior Insect. - Algunos argumentan que Numbat es redundante; otros señalan que, al estar hecho a propósito, ser estático, de código abierto y apuntar a WebAssembly, tiene un nicho.
Sistema de tipos, funciones matemáticas y ángulos
- Las funciones trigonométricas y trascendentales en Numbat solo aceptan escalares adimensionales; pasar cantidades con unidades se trata como probablemente un error.
- Los ángulos se tratan como convertibles a escalares (radianes, grados, vueltas); se reconoce explícitamente que si los ángulos son adimensionales es algo debatido.
Tiempo, meses y años
- Los meses y años se modelan como duraciones promedio (por ejemplo, un año gregoriano ≈ 365,2425 días).
- Varios comentaristas califican esto como una ambigua “confusión de unidades” y distinguen unidades “cronológicas” de “calendariales”, señalando días bisiestos, segundos intercalares, horario de verano, año sidéreo frente a tropical, etc.
- Otros defienden el enfoque simplificado como pragmático y advierten contra arrastrar toda la complejidad del calendario al sistema de tipos.
- Numbat actualmente trata el tiempo como duraciones, no como fechas de calendario; aún no existe una API de calendario del tipo “hoy + 14 días”.
Álgebra lineal y unidades heterogéneas
- Dificultad clásica: vectores/matrices en los que cada componente tiene unidades distintas (por ejemplo, modelos económicos de input-output, operadores derivados).
- Numbat por ahora carece de tipos agregados (vectores, matrices). Se reconoce que el problema es solucionable pero “delicado”.
- La discusión señala que muchos sistemas de tipos estáticos asumen unidades homogéneas por contenedor, lo que choca con el álgebra lineal del mundo real.
Moneda y modelado del mundo real
- La moneda se admite como una unidad con tipos de cambio en vivo del Banco Central Europeo.
- Algunos ven esto como una función interesante; otros lo consideran superficial frente a la complejidad de las finanzas y la economía reales.
Ergonomía, sintaxis y entusiasmo
- Comentarios positivos sobre la CLI interactiva, el rico catálogo de unidades, los operadores Unicode (×, ⋅, ÷) y la introducción legible.
- Algunos usuarios expresan un entusiasmo y apoyo muy fuertes, incluido patrocinio, y ven Numbat como una excelente calculadora/DSL para computación consciente de unidades.