This project is archived. Its data is read-only.

Imperative bcom

Right now bcom is functional; I like this in many ways, bcom is actually a sealer, and so we get to preserve functional mechanics,.

This has two main advantages:

  • It prevents dangerous uses of bcom, like within an on or await, where the world has changed, encouraging use of cells in such a case, etc. This has saved a couple of people by preventing making such a mistake!
  • It's technically functional!!!!!

But, since the goblin kernel is waiting for the return value to see if it's a bcom or not, this prevents proper tail call elimination... attempting to do iteration through recursion using $ results in a stack overflow. This has bitten a couple of people!

The right solution maybe: make bcom imperative but blow up if it's used outside that actor's invocation!

Thanks to @tsyesika for helping me think this through.

Edited Nov 05, 2021 by Christine Lemmer-Webber
Assignee Loading
Time tracking Loading