Show HN: Numbat – भौतिक आयामों को प्रकारों के रूप में रखने वाली एक प्रोग्रामिंग भाषा

Numbat नाम की एक नई भाषा का लक्ष्य भौतिक आयामों और इकाइयों को प्रकारों के रूप में扱ना है, ताकि compile-time पर ऐसी गलतियाँ पकड़ी जा सकें जैसे मीटर को सेकंड में जोड़ना या physics formulas में constants का गलत उपयोग। टिप्पणीकार इसकी तुलना F#, Rust, Julia, C++, Nim, Ada जैसी भाषाओं और GNU Units तथा Frink जैसे टूल्स में मौजूद unit systems से करते हैं, और general-purpose भाषाओं में embedded libraries की तुलना में एक dedicated, statically typed DSL के लाभों पर विचार करते हैं। वे calendar बनाम chronological time, currency conversion, और unitful linear algebra जैसे कठिन किनारी मामलों पर भी चर्चा करते हैं—यह दिखाते हुए कि आज यह दृष्टिकोण कहाँ शक्तिशाली है और कहाँ type system व libraries को और विकसित होना होगा।

“भौतिक” इकाइयों और आयामों का दायरा

  • इस पर बहस कि प्रकाश, तापमान और समय “भौतिक” हैं या केवल स्थानिक; थ्रेड में आम सहमति इस ओर झुकती है कि “भौतिक” का अर्थ “भौतिकी द्वारा वर्णित” है, सिर्फ 3D स्थान नहीं।
  • सापेक्षता और चार-वेक्टरों का उल्लेख यह तर्क देने के लिए किया गया कि समय स्थान से बहुत निकटता से जुड़ा है।
  • कुछ लोग उन सीमांत भौतिकी दावों का विरोध करते हैं जो स्पेसटाइम को चुनौती देते हैं, यह कहते हुए कि वे मुख्यधारा में नहीं हैं।

मौजूदा इकोसिस्टम और “पहिया फिर से बनाना”

  • कई लोगों ने समान यूनिट/डायमेंशन प्रणालियों की ओर इशारा किया: Python (Pint, astropy.units), F# Units of Measure, Rust का uom, Julia का Unitful.jl, Scala का Squants, Nim (Unchained), GNU units, Ada की dimensionality analysis, C++ template-based units, Frink, और पिछला प्रोजेक्ट Insect।
  • कुछ का तर्क है कि Numbat अनावश्यक है; अन्य लोग ध्यान दिलाते हैं कि एक purpose-built, static, open source, और WebAssembly को लक्षित करने वाली भाषा होने से इसकी एक खास जगह है।

टाइप सिस्टम, गणितीय फ़ंक्शन, और कोण

  • Numbat में trig और transcendental फ़ंक्शन केवल dimensionless scalars को स्वीकार करते हैं; unitful मात्राएँ पास करना संभवतः त्रुटि माना जाता है।
  • कोणों को scalars में बदला जा सकता है (radians, degrees, turns); यह स्पष्ट रूप से स्वीकार किया गया है कि कोण dimensionless हैं या नहीं, इस पर बहस होती रही है।

समय, महीने, और वर्ष

  • महीनों और वर्षों को औसत अवधियों के रूप में मॉडल किया गया है (जैसे, Gregorian वर्ष ≈ 365.2425 दिन)।
  • कई टिप्पणीकार इसे अस्पष्ट “unit confusion” कहते हैं और “chronological” बनाम “calendrical” इकाइयों में अंतर करते हैं, तथा leap days, leap seconds, DST, sidereal बनाम tropical year आदि का उल्लेख करते हैं।
  • अन्य लोग इस सरल दृष्टिकोण का बचाव व्यावहारिकता के आधार पर करते हैं और चेतावनी देते हैं कि पूरी calendar जटिलता को type system में खींचना ठीक नहीं।
  • Numbat फिलहाल समय को durations के रूप में मानता है, calendar dates के रूप में नहीं; अभी “today + 14 days” जैसी calendar API मौजूद नहीं है।

रेखीय बीजगणित और विषमांगी इकाइयाँ

  • क्लासिक कठिनाई: ऐसे vectors/matrices जिनके प्रत्येक घटक की इकाइयाँ अलग हों (जैसे आर्थिक input–output मॉडल, derivative operators)।
  • Numbat में अभी aggregate types (vectors, matrices) नहीं हैं। समस्या को सुलझाने योग्य माना गया है, लेकिन “tricky” भी कहा गया है।
  • चर्चा में कहा गया है कि कई static type systems container के भीतर homogeneous units मान लेते हैं, जो वास्तविक दुनिया के linear algebra से टकराता है।

मुद्रा और वास्तविक-विश्व मॉडलिंग

  • मुद्रा को एक unit के रूप में समर्थित किया गया है, और European Central Bank से live exchange rates लिए जाते हैं।
  • कुछ लोग इसे एक अच्छा फीचर मानते हैं; अन्य इसे वास्तविक finance/economics की जटिलता की तुलना में सतही मानते हैं।

एर्गोनॉमिक्स, सिंटैक्स, और उत्साह

  • interactive CLI, समृद्ध unit catalog, Unicode operators (×, ⋅, ÷), और पठनीय परिचय पर सकारात्मक टिप्पणियाँ आईं।
  • कुछ उपयोगकर्ताओं ने ज़ोरदार उत्साह और समर्थन व्यक्त किया, sponsorship सहित, और Numbat को unit-aware computation के लिए एक उत्कृष्ट calculator/DSL माना।