You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Complete refactoring of execution strategy to utilize Truffle DSL
This is a major rewrite of the Truffle-based execution system. Instead of relying on a general MessageNode, we need to introduce Unary, Binary, and Ternary nodes to use the Truffle DSL specialization features properly. For variable arguments, we still keep the KeywordMessage nodes around. However, the specific node types are needed to have a specialization down to the argument level of execution methods of a node. For instance, an addition needs to get the receiver and the argument evaluated properly. That's not supported by the DSL otherwise.
The NodeFactory should now be used for all 'higher-level'/'higher-complexity' node creations. (Refactoring needs to be completed still)
#if* and #while* related nodes have be split into classes for each selector.
Primitives are rewritten so that each primitive node class represents one operation (i.e., selector) and implementers all variants for all types.
Not yet clear is whether this is going to work well for primitives. Especially since we still want to enable classes to override primitives in subclasses, and since we need to handle polymorphism in a way that works. Also need to avoid primitives becoming polymorphic sends when it is not necessary!
TODO:
* Cloning for inlining needs to be implemented
* Move all 'complex' node creation stuff into NodeFactory
* Primitives can be further optimized by using primitive types, avoid boxing, using ExactMath, etc.
* verify polymorphism works properly with new Primitive design
[TODO-REPORT: give an overview of the final node type hierarchy, and the transitions between optimization states]
Signed-off-by: Stefan Marr <git@stefan-marr.de>
0 commit comments