Why Programming Languages?
In this essay, I will distinguish four primary goals that can drive the language design process:
* Language as syntactic abstraction mechanism: to reduce repetitive “boilerplate” code that cannot be abstracted from using another language’s built-in abstraction mechanisms.
* Language as thought shaper: to induce a paradigm shift in how one should structure software (changing the “path of least resistance”).
* Language as a simplifier: to boil down an existing paradigm to just its essential parts, often to increase understanding and insight.
* Language as law enforcer: to enforce important properties or invariants, possibly to make it easier to infer more useful properties from programs.
A must-read essay by Tom Van Cutsem.