Show HN: Numbat – Uma linguagem de programação com dimensões físicas como tipos
Uma nova linguagem chamada Numbat quer tratar dimensões físicas e unidades como tipos, permitindo verificações em tempo de compilação que detectam erros como somar metros a segundos ou usar constantes de forma incorreta em fórmulas de física. Os comentaristas a comparam com sistemas de unidades em F#, Rust, Julia, C++, Nim, Ada e ferramentas como GNU Units e Frink, ponderando os benefícios de uma DSL dedicada e estaticamente tipada frente a bibliotecas embutidas em भाषagens de uso geral. Eles também abordam casos-limite mais difíceis — como tempo de calendário vs. cronológico, conversão de moedas e álgebra linear com unidades — destacando onde a abordagem é forte hoje e onde o sistema de tipos e as bibliotecas ainda precisariam evoluir.
Escopo de unidades e dimensões “físicas”
- Debate sobre se luz, temperatura e tempo são “físicos” ou apenas espaciais; o consenso no thread tende para “físico” no sentido de “descrito pela física”, e não apenas espaço 3D.
- Relatividade e quatro-vetores são mencionados para argumentar que o tempo está fortemente acoplado ao espaço.
- Algumas pessoas rebatem alegações de física marginal que contestam o espaço-tempo, observando que elas não são mainstream.
Ecossistemas existentes e “reinventar a roda”
- Muitos apontam sistemas semelhantes de unidades/dimensões: Python (Pint, astropy.units), F# Units of Measure,
uomde Rust, Unitful.jl de Julia, Squants de Scala, Nim (Unchained), GNU units, análise dimensional de Ada, unidades baseadas em templates de C++, Frink e o projeto anterior Insect. - Alguns argumentam que Numbat é redundante; outros observam que, por ser focado, estático, open source e voltado para WebAssembly, ele tem um nicho.
Sistema de tipos, funções matemáticas e ângulos
- Funções trigonométricas e transcendentais em Numbat aceitam apenas escalares adimensionais; passar quantidades com unidades é tratado como provável erro.
- Ângulos são tratados como conversíveis para escalares (radianos, graus, voltas); há o reconhecimento explícito de que se ângulos são adimensionais é algo debatido.
Tempo, meses e anos
- Meses e anos são modelados como durações médias (por exemplo, ano gregoriano ≈ 365,2425 dias).
- Vários comentaristas chamam isso de “confusão de unidades” ambígua e distinguem unidades “cronológicas” de “calendáricas”, citando dias bissextos, segundos bissextos, horário de verão, ano sideral vs. tropical etc.
- Outros defendem a abordagem simplificada como pragmática e alertam contra trazer toda a complexidade de calendários para o sistema de tipos.
- Numbat atualmente trata tempo como durações, não como datas de calendário; ainda não existe uma API de calendário no estilo “hoje + 14 dias”.
Álgebra linear e unidades heterogêneas
- Dificuldade clássica: vetores/matrizes em que cada componente tem unidades diferentes (por exemplo, modelos econômicos de insumo-produto, operadores diferenciais).
- Numbat atualmente não tem tipos agregados (vetores, matrizes). O problema é reconhecido como solucionável, mas “complicado”.
- A discussão observa que muitos sistemas de tipos estáticos assumem unidades homogêneas por contêiner, o que entra em conflito com a álgebra linear do mundo real.
Moeda e modelagem do mundo real
- Moeda é suportada como unidade com taxas de câmbio ao vivo do Banco Central Europeu.
- Alguns veem isso como um recurso interessante; outros o consideram superficial diante da complexidade das finanças/economia reais.
Ergonomia, sintaxe e entusiasmo
- Comentários positivos sobre a CLI interativa, o rico catálogo de unidades, operadores Unicode (×, ⋅, ÷) e a introdução legível.
- Alguns usuários expressam forte entusiasmo e apoio, inclusive com patrocínio, e veem Numbat como uma excelente calculadora/DSL para computação consciente de unidades.