Class: Heist::Runtime::Stackless
- Inherits:
-
Object
- Object
- Heist::Runtime::Stackless
- Defined in:
- lib/heist/runtime/stackless.rb
Overview
The Stackless class provides a faster execution model than Stack,
as it does not provide fine-grained enough escape points to allow
fully for continuations. Continuations aside, Stackless supports
all the same language features as Stack, including using a
trampoline to implement tail call optimisation.
Instance Method Summary collapse
-
#<<(frame) ⇒ Object
Returns the result of evaluating the
Expressionin the givenFrameobject.
Instance Method Details
#<<(frame) ⇒ Object
Returns the result of evaluating the Expression in the given
Frame object. This API probably looks a little weird; it's like
this for consistency with the Stack API so the two can be used
interchangeably without changing the implementation of
Expression#eval.
The expression is evaluated by repeatedly calling Functions
until a concrete value is returned. Calling a Scheme procedure
returns a Body object that binds its body to the Scope created
by calling the procedure. As functions do not evaluate themselves
we can turn what would be a recursive process into an iterative
one and optimise tail calls. This technique is known as trampolining.
24 25 26 27 28 |
# File 'lib/heist/runtime/stackless.rb', line 24 def <<(frame) @current = frame @current = process! while incomplete? @current end |