[Oberon] Why no enumeration types?

Claudio Nieder private at claudio.ch
Wed Jul 28 00:36:35 CEST 2021


Hi,

> TYPE Colors = (red, green, blue);
>
> Later in this module you change the enumeration to:
>
> TYPE Colors = (red, green, yellow, blue);
>
> If you don't recompile all modules that import this module, what happens with this code?
>
> FOR i := MIN(Colors) TO MAX(Colors) DO ... END;
>
> VAR table: ARRAY Colors OF BOOLEAN;
>
> Your program will have unexpected behaviours or will simply crash. To solve this, you have to recompile all the clients.

Similar problems if you declare three INTEGER red=0, green=1, blue=2 and 
then change them to yellow=2, blue=3

If you have VAR table: ARRAY 3 OF BOOLEAN; when you add an additional 
color it can reslt in table[i] to be outside of the array boundaries 
resulting in a crash.

Even worse, FOR i:=0 TO 2 DO ... END; will miss something once you 
introduce additional colors and your application will misbehave in 
subtle ways.

 From my experience, finding errors that occur at runtime are so much 
costlier than having the compiler report an error or even forcing a 
recompilation of modules.


claudio


More information about the Oberon mailing list