Rename the be reserved keyword to become.


A keyword needs to be reserved to support guaranteed tail calls in a backward-compatible way. Currently the keyword reserved for this purpose is be, but the become alternative was proposed in the old RFC for guaranteed tail calls, which is now postponed and tracked in PR#271.

Some advantages of the become keyword are:

  • it provides a clearer indication of its meaning (“this function becomes that function”)
  • its syntax results in better code alignment (become is exactly as long as return)

The expected result is that users will be unable to use become as identifier, ensuring that it will be available for future language extensions.

This RFC is not about implementing tail call elimination, only on whether the be keyword should be replaced with become.

Detailed design

Rename the be reserved word to become. This is a very simple find-and-replace.


Some code might be using become as an identifier.


The main alternative is to do nothing, i.e. to keep the be keyword reserved for supporting guaranteed tail calls in a backward-compatible way. Using become as the keyword for tail calls would not be backward-compatible because it would introduce a new keyword, which might have been used in valid code.

Another option is to add the become keyword, without removing be. This would have the same drawbacks as the current proposal (might break existing code), but it would also guarantee that the become keyword is available in the future.

Unresolved questions