Whether something is Declarative or Imperative is a matter of layers. In general purpose programming languages, no language can be completely imperative or declarative. Whether something is imperative or declarative is determined by the framework, root level, or even function definition. However, from a Simplicity perspective, if declarative and imperative approaches are interleaved within the same block definition, the system becomes complex. Therefore, proper composition is the way to simple system design.
Black-box abstraction transforms imperative layer to declarative layer. Conventional interfaces maintain declarative to declarative interactions. Execution semantics transform declarative layers into imperative processes. Metalinguistic abstraction transforms imperative layers into imperative ones.
Programming Paradigms
SICP
Example: Mathematical definition of a square root vs. an algorithm that iteratively improves approximations.
- Declarative knowledge: Defines "what is true" - knowledge that describes what is true
- Imperative knowledge: Explains "how to execute" - procedural knowledge that shows how to do something
‣