The mira assembler was implemented using a lot of simple data abstraction - i.e. classes without inheritance - as trying to force everything into a hierarchy41 mostly results in some truly contorted program logic. Simplicity helped to keep the design (relatively) clean, modularise the development process and support the top-down bottom-up engineering model. Generic programming - templates and algorithms parameterised on types - was also used to get efficiency and type safety for containers: the Standard Template Library (STL) as nucleus of the C++ standard library provides facilities such as vectors, maps, and algorithms that work on these containers.
This might seem to contradict the statement on simplicity that was made above, but it really is not. The key is always to come up with a design that fits the problems and also using language constructs that best represent the designs in the code. The possibility to use pre-made algorithms and storage containers that have been validated for years on a wide number of platforms considerably sped up development cycles and improved the stability the algorithms. This also helped to focus design and programming on the immediate assembly problems to be solved, which was complicated enough the way it was, thank you.
Bastien Chevreux 2006-05-11