On Wednesday, 13 June 2018 at 06:10:26 UTC, Cym13 wrote:
That's very nice! Out of curiosity, what was the reason to
avoid a conventional stack? Or was it a consequence more than a
design decision? (If you've explained it before, feel free to
just throw the old post at me)
It was an initial design decision. (I addressed it briefly in my
2017 talk on newCTFE)
https://www.youtube.com/watch?v=crHnumzsLUs&t=2420
The main reason was to avoid the debugging nightmare that messing
with the stack-pointer causes. I thought the most effective way
to not have this problem was to simply eliminate the stack
pointer.
Another reason is that I am noticing a tendency in real hardware
to have multiple-stacked versions of the register set. Doing the
same with my virtual cpu would be forward compatible :)
All in all I do not regret that decision at all.
It doubtlessly saved weeks of debugging!
(And harmonizes delegates with closures (since in newCTFE _all_
delegates have to be closures.))
Cheers,
Stefan