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, uom de 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.