Unchained
Squants
Our great sponsors
Unchained | Squants | |
---|---|---|
5 | 8 | |
105 | 910 | |
4.8% | 0.1% | |
7.0 | 2.9 | |
about 1 month ago | 9 days ago | |
Nim | Scala | |
- | Apache License 2.0 |
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.
Unchained
-
GNU Units
Anything with a finite (200 is small even) number of units misses the algebraic structure of the problem mentioned in https://news.ycombinator.com/item?id=36988497 wherein multiplying|dividing two things gives you a (potentially) new unit which implies an open ended "space" of units.
To be concrete (hah!), in C++ a template meta-type with 12 signed integer parameters (6 numerators & 6 denominators for rational exponents of SI base units) might be one way to model it.
Unlike C++ template stuff, Nim macros (like Lisp macros) makes metaprogramming more like procedural programming - just against abstract syntax trees. I think that helps to shield some of this type complexity from users, but the documentation README https://github.com/SciNim/Unchained does better job than I can in an HN comment.
Of course, for unit system conversion, the number of dimensions (6 in SI, 3 in CGS/Gaussian) changes. So, for full generality you need compile-time (if you want static type integration/CT errors) linear algebra over a rational field (at least & conventionally) to project|inverse project. That might be theoretically possible in C++. I would think it very un-fun and unlikely to ever have been done. There's probably a Mathematica package, though.
- Please Put Units in Names
- Pint: Makes Units Easy -Python
-
Atlas, a (hopefully) better engineering IDE
I've recently written a units library for Nim [0]. It's still WIP, but it's already proven extremely useful for me as a physicist.
Thanks to Nim's strong type system and metaprogramming features, it allows for a fully compile time design, without any runtime overhead (in form of special unit objects or such things; everything is a `distinct float`).
In addition Nim's unicode support, the code even looks nice!
A more complex use case (I can link more if desired): [1]
[0]: https://github.com/SciNim/Unchained/
[1]: https://github.com/SciNim/Unchained/tree/master/examples
Squants
-
Improving our safety with a physical quantities and units library
Scala's squants library is a nice implementation of units-of-measure/dimensional-analysis http://www.squants.com
In particular it uses types for dimensions; whilst units are just constructors. Hence `Meters(2)` and `Microns(7)` have the same type (`Length`).
- Show HN: Numbat – A programming language with physical dimensions as types
- The type system is a programmer's best friend
-
Is Scala a good choice for a data intensive web backend?
squants for the “Market” package to use in financial calculations.
-
Please put units in names
take a peek at https://www.squants.com looks like not in your language, but maybe you can apply some same concepts
-
Atlas, a (hopefully) better engineering IDE
You might find the Squants library for Scala interesting; it even seems like an apt usage of some oft-questioned language features.
https://github.com/typelevel/squants
- Ratio Templates?
What are some alternatives?
SI - A header only C++ library that provides type safety and user defined literals for physical units
Breeze - Breeze is a numerical processing library for Scala.
mosdepth - fast BAM/CRAM depth calculation for WGS, exome, or targeted sequencing
Axle - Axle Domain Specific Language for Scientific Cloud Computing and Visualization
nimbus-eth1 - Nimbus: an Ethereum Execution Client for Resource-Restricted Devices
PredictionIO - PredictionIO, a machine learning server for developers and ML engineers.
nimview - A Nim/Webview based helper to create Desktop/Server applications with Nim/C/C++ and HTML/CSS
Spire - Powerful new number types and numeric abstractions for Scala.
zen
rscala - The Scala interpreter is embedded in R and callbacks to R from the embedded interpreter are supported. Conversely, the R interpreter is embedded in Scala.
phpmnd - PHP Magic Number Detector
Compute.scala - Scientific computing with N-dimensional arrays