Chapter 65. Prefer Domain-Specific Types to Primitive Types

ON SEPTEMBER 23, 1999, the $327.6 million Mars Climate Orbiter was lost while entering orbit around Mars due to a software error back on Earth. The error was later called the metric mix-up. The ground-station software was working in pounds, while the spacecraft expected newtons, leading the ground station to underestimate the power of the spacecraft’s thrusters by a factor of 4.45.
This is one of many examples of software failures that could have been prevented if stronger and more domain-specific typing had been applied. It is also an example of the rationale behind many features in the Ada language, one of whose primary design goals was to implement embedded safety-critical software. Ada has strong typing with static checking for both primitive types and user-defined types:
type Velocity_In_Knots is new Float range 0.0 .. 500.00; type Distance_In_Nautical_Miles is new Float range 0.0 .. 3000.00; Velocity: Velocity_In_Knots; Distance: Distance_In_Nautical_Miles; Some_Number: Float; Some_Number:= Distance + Velocity; -- Will be caught by the compiler as a type error.
Developers in less demanding domains might also benefit from applying more domain-specific typing, where they might otherwise continue to use the primitive data types offered by the language and its libraries, such as strings and floats. In Java, C++, ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access