Musings about modularity and programming in the large

stephane ducasse stephane.ducasse at
Thu Jan 24 08:04:38 UTC 2008

>       1. Orthogonal extension: Extensions may require both new data  
> types and new operations.
>       2. Type safety: Extensions cannot create run-time type errors.
>       3. Modularity: The base system can be extended without  
> modifying or recompiling its code.
>       4. Scalability: Extensions should be scalable. The amount of  
> code needed should be proportional to the functionality added.
>       5. Non-destructive extension: The base system should still be  
> available for use within the extended system.
>       6. Composability of extensions.
>    The first three of these requirements correspond to Wadler’s  
> expression problem. Scalability (4) is often but not necessarily  
> satisfied by supporting separate compilation; it is important for  
> extending large software. Non-destructive extension (5) enables  
> existing clients of the base system and also the extended system  
> itself to interoperate with code and data of the base system, an  
> important requirement for backward compatibility. Nested inheritance  
> addresses the first five requirements, but it does not support  
> extension composition. Nested intersection adds this capability.
> "
> IMO point 5 is often overlooked in Smalltalk systems, we love  
> extending base code but we hardly ever think about isolating these  
> extensions so the base code dependents don't get 'confused' by those  
> extensions.

classboxes was akind of answer to this point. But I do not really like  
their per thread semantics. So now I would favor extensions = addition  
but no override
but the system would be less agile and breakable.

More information about the Squeak-dev mailing list