format; the variable VAR would be represented in memory by the three ASCII characters "VAR". During execution, when this variable is encountered in the code the interpreter has to look up that string in a table of variables, find the associated storage address in memory, and then finally read the value stored in that location. The table is usually constructed so that the value follows the name, to save time during the final lookup. In contrast, in I-code the address of the variable is determined in advance and the reference in code is replaced by that address. This avoids a runtime search through the variable table. Other optimizations include a separate FOR/NEXT routine used when the index variable is an INTEGER, and separate INTEGER and REAL math libraries. For added performance, BASIC09 also included the PACK command which took a procedure name and returned an optimized version. Some of these optimizations included removing non-coding instructions like code comments and the replacement of constant expressions to a single value. For instance, PACK would recognize that LET x=x+SQR(100)/2 contains only constants on the right, and replaces it with the code x=x+5, which requires only a single operation at runtime, the addition, removing the division and square root. PACK reduced the memory footprint of the procedure and improved performance by about 10 to 30%. Lightweight runtime Although it was common to run programs within the BASIC09 environment, as it was in other BASICs, BASIC09 also shipped with a separate run-only version of the code known as Runb. Runb removed the editing and debugging features of the system, and was about half the size of the full BASIC09 as a result. The purpose of Runb was primarily to run PACKed modules when called from other programs. This meant that if the user typed in the name of a BASIC09 module in the OS/9 command line, and that module has been marked as PACKed, it is opened and run by Runb instead of the BASIC09. This reduces memory footprint and improves load time. Significant features reasonably structured control flow provisions (e.g., line numbers were mainly needed for computed GOTO, as BASIC09 did not have a switch/case statement, or computed GOSUB) structure declaration (rare in any BASIC variant then; more common in later BASIC implementations) intrinsic integer and Boolean data types more than two significant characters in variable names (some BASICs of the time allowed only