From the beginning BOOL had this concept of System Messages, but they’ve never worked out — even as a design idea. Now that I’m working on the first realistic BOOL implementation, it’s even more clear the idea isn’t up to the reality.
System Messages — at least as an orthogonal idea — are dead. The few that are fundamental to BOOL still remain. Two of the more important ones are the Query Message (
q:) and the Execute Message (
A System Message has a single-character primary name; many also have a single-character alias; a few may have an additional multi-character alias. The primary name is (almost always) an alpha character. The single-character alias is (almost always) a symbol. Any multi-character aliases are regular Message names and follow the standard rules.
The original idea was that all 26 alpha characters would be bound to specific Message semantics (a design goal), and that all 26 of those would be sensible to any object (also a design goal, but one with practical constraints).
The truth is that several decades of consideration has not resulted in 26 sensible semantics. There’s the difficulty of trying to match a letter to a concept, and there’s the difficulty of trying to come up with 26 actions that are generically useful.
Both of those difficulties turn out to be show-stoppers; combined, forget about it!
So that’s the end of the System Message concept as a universal protocol.
Along with this purge, also the idea of Message name aliases. They seemed like a good idea, but they don’t really turn out to have any utility. (Plus they complicate matters ever so slightly, since the compiler needs to recognize two different strings as meaning the same thing.)
A handful of single-character Messages remain; I’ve already mentioned the q: and x: Messages. These are embedded in how BOOL works.
f: (true and false) and
A complete list is in the works.
[Incidentally, this is not the “next” post the previous post refers to. That one, which will be about Actions, should be the next post.]