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.
This is a a rough sketch of an idea I have been pondering: could we usefully add more (optional) static typing to the Halide C++ IR?
This PR just adds a wrapper around
Expr
to allow for static typing (a laBuffer<>
). The idea here is that anExprT<type>
is an Expr that can only a value of the given type (or be undefined).The main goal here is to allow for easier readability in complex pipelines (eg if an Expr is expected to be of type uint8, this makes it more plain when reading the source code, and failures would happen at compile time, not runtime).
I'm not entirely sure if I like this or not, so I didn't expend a lot of energy trying to complete it -- there may be holes in the implementation.
In the name of science, I modified
cast<T>()
to returnExprT<T>
, andVar
to be convertible toExprT<int>
(rather than plainExpr
).If this seems remotely desirable, perhaps it could lead to similar wrappers for Func, ImageParam, etc.
Thoughts welcome.