WIP: Experimental support for Unitful-like statically-typed units #136
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
I understand this goes against the main point of this package, but it turned out to be extremely easy to stick in a
StaticDimensions
interface.The trick is to store a regular dynamic
Dimensions
object (immutable struct) as one of the type parameters:Promotion rules work as you'd expect with Unitful:
Where you can see it correctly promotes the dimensions (even symbolic dimensions).
We can see that units can be inferred:
If anyone is interested, would love help in making this infer as well as Unitful. It then would make it really easy to switch between static and dynamic quantities –
Dimensions
for initial work, and thenStaticDimensions
whenever you are faced with optimizing a fast SIMD loop.Any of @YingboMa @ChrisRackauckas @devmotion @aplavin, would you be up to help with improving this? I think the basics are ready, we would just need to ensure that inference is as good as Unitful.