The sample implementation won't perform well on implementations, for which call/cc is costly due to the presence of dynamic-wind. While I don't think that a Scheme implementation for which one of Scheme's main selling points is too slow to be used effectively is, in my opinion, a very decent one, I could change the sample implementation not to rely on call/cc in most use cases of forcing.

I could define a parameter object that holds a value representing the current dynamic environment (or dynamic extent, see above). Then I would have to setup and restore this parameter object at every use of dynamic-wind and parameterize. When a promised is forced, one can then take a short route if the current dynamic environment is the same as the one of the promise, which is testable by using the parameter object.

I have now provided special support for Chibi (just to have one demonstration target) in the sample implementation https://github.com/mnieper/srfi-154 of SRFI 154 (upon which SRFI 155 builds). This specific implementation uses the ideas outlined above. With it, SRFI 155 promises are very lightweight when parameterize and dynamic-wind is not used (so we don't have to pay for what we don't use) because the "travel-to-point!" I am using from (chibi) will be a no-op.

--

Marc