Measuremancer
astGrad
Measuremancer | astGrad | |
---|---|---|
1 | 1 | |
20 | 15 | |
- | - | |
6.7 | 10.0 | |
3 months ago | over 1 year ago | |
Nim | Nim | |
- | - |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
Measuremancer
-
Show HN: Numbat – A programming language with physical dimensions as types
Yeah, unicode characters in Nim code are supported. However, if by `x²` you'd want to square an identifier `x`, that won't work. The Nim lexer parses `x²` as a single identifier.
We do have infix unicode operators though. So `x ÷ y` (spacing required though!) could be implemented easily. I use this for `±` in Measuremancer [0] (which btw also supports Unchained units, for error propagation on unitful measurements).
[0]: https://github.com/SciNim/Measuremancer
astGrad
-
Show HN: Numbat – A programming language with physical dimensions as types
I mean that article of yours highlights the difficulties one encounters fairly well, I would say. I don't disagree that this is (generally) a tricky problem!
Nim allows you to do a lot, e.g. derivatives of a unitful expression with measurement errors [0]. But other aspects run into the reality of dealing with a static type system. For example in Measuremancer [1], the library handling measurements with uncertainties, each `Measurement` is a single generic `Measurement[T]`. Each measurement stores the derivatives for error propagation. Obviously the derivatives have different units. Now, we could make `Measurement` a two-fold generic, `Measurement[T, U]`, but that just makes things more unwieldy in practice, for not much gain.
Without rewriting a majority of existing code you will always run into trouble where your perfect unit type system will either break or you'll need to work around it anyway (e.g. calling into some C library for part of the code).
[0]: https://github.com/SciNim/astGrad#extra-fun
[1]: https://github.com/SciNim/Measuremancer/
What are some alternatives?
insect - High precision scientific calculator with support for physical units
Squants - The Scala API for Quantities, Units of Measure and Dimensional Analysis
Nim - Nim is a statically typed compiled systems programming language. It combines successful concepts from mature languages like Python, Ada and Modula. Its design focuses on efficiency, expressiveness, and elegance (in that order of priority).
numbat - A statically typed programming language for scientific computations with first class support for physical dimensions and units
jester - A sinatra-like web framework for Nim.
prologue - Powerful and flexible web framework written in Nim