IBOL (ICON BASED OBJECT-ORIENTED LANGUAGE) is the part of ChipWits I’m most proud of. Mike Johnston and I did a good job of creating a useful, fun language that is easy to learn and use. We cut the number of OPs (operators) and ARGs (arguments) to the minimum while still making a real programming language.
If you’ve been following this blog you know that in 1984, when Mike and I were creating ChipWits, I kept notes on a legal yellow pad. Here’s an early discussion of what to keep and what to cut.
OP proposal:
At the top:
Collapse SKATE and TURN into SKATE. When first started thinking about IBOL we had 2 move commands—SKATE could go FORWARD and BACKWARD, TURN could go RIGHT45 or LEFT45.
We turned SKATE and TURN into SKATE with 4 ARGs.
Next:
Eliminate 3 stack Ops. Stacks are the most advanced feature of IBOL. At first we had too many stack OPs. The three stack OPs we eliminated are (I’ll make up the names):
- MOVETHEBOTTOMOFTHESTACKTOTHETOP
- MOVETHETOPOFTHESTACKTOTHEBOTTOM
- ADDADUPLICATEOFTHETOPTOTHETOP
We decided not to add the last STACK op proposed. I have no idea what that scribble means.
It’s no coincidence that FORTH, the language we wrote CW in, is also stack-centric.
Next:
Add an ANYKEY arg to the IFKEYPRESS OP. Before this IFKEYPRESS only returned TRUE if the keypress matched the ARG letter.
Next two lines:
At first we had 2 ops for ChipWit “vision.” The 2 eyes were the IFSEE command which returned TRUE if there was a THING (except for WALLs, FLOORs, and DOORs) within the 90-degree field in front of. The binocular OP tested for THINGs in a straight line. The 90-degree scan turned out to be pretty useless. IFSEE now looks straight ahead.
Next:
Add DROPMARKER. At first we were sure IBOL needed MARKER THINGs to help navigate mazes. We never figured out how to make them work in a simple manner. DROPMARKER needs a FINDMARKER OP and we could never figure out what that meant.
Next:
At first ChipWits could carry a basket which they could fill with THINGs. We eliminated any THINGs that could be carried, so the basket died.
End of graphic list.
In future blog posts I’ll share more brainstorming notes to show how IBOL solidified as we locked down its features to get ready to ship.
Discussion
For those familiar with IBOL, were these the right choices? Are there any operators you would have liked to see added to IBOL? Add your thoughts in the comments below!
Mark Roth
> We decided not to add the last STACK op proposed. I have no idea what that scribble means.
Was it SWAP, perhaps?
> MOVETHEBOTTOMOFTHESTACKTOTHETOP
Very similar to ROLL, in FORTH
> ADDADUPLICATEOFTHETOPTOTHETOP
DUP
Doug Sharp
You got it. My memory ain’t the greatest. 🙂