Musings about modularity and programming in the large
stephane.ducasse at free.fr
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
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