Intellectual Complexity
As put so eloquently in SICP, the programming language should facilitate the control of a program’s intellectual complexity. We must therefore understand what makes programs complex, and implement features to manage that.
Perhaps for too long, languages have treated faults as exceptional, and prioritized the “happy path” when in fact faults are commonplace. So Radiance will have first class error handling.
The second feature that seems important is to manage capabilities — to know which parts of the code can carry out which actions. This reduces the possible output states for a given input state. In other words it facilitates local reasoning by reducing the space of possible effects a given piece of code can have, without having to read the code.
Finally, we model resources as capabilities as well. So a File object for
example, represents the ability to read and write to a file, and this is the
only way to achieve that.
All of this has the effect of constraining a program’s possible states so that we can more easily “guess” which state it currently is in, as we evaluate the code in our head.
However, let us not forget that the language is only one part of the platform and it is subject to inherent platform complexities. This can only be addressed at the platform level; which is what Radiant attempts to do.
Last edited March 26, 2025