Extensibility in Programming Languages: An overview
Sebastian mateos Nicolajsen
TL;DR
This paper surveys programming language extensibility as a central design concern, arguing that extensibility has been underexplored relative to other language properties. It identifies four core themes—Macros, Modules, Types, and Reflection—along with two cross-cutting properties—Parametricism and First-class citizen behaviour—through a structured literature review. Using Kitchenham-guided methodology across ten venues, it synthesizes findings on how extensibility is achieved, its benefits (expressivity, adaptability) and its costs (code bloat, hygiene, performance), and outlines design considerations. The work also highlights less-explored avenues such as bootstrapping, compiler hooks, and virtual machines, offering a foundation to guide future language designers toward balanced, extensible architectures.
Abstract
I here conduct an exploration of programming language extensibility, making an argument for an often overlooked component of conventional language design. Now, this is not a technical detailing of these components, rather, I attempt to provide an overview as I myself have lacked during my time investigating programming languages. Thus, read this as an introduction to the magical world of extensibility. Through a literature review, I identify key extensibility themes - Macros, Modules, Types, and Reflection - highlighting diverse strategies for fostering extensibility. The analysis extends to cross-theme properties such as Parametricism and First-class citizen behaviour, introducing layers of complexity by highlighting the importance of customizability and flexibility in programming language constructs. By outlining these facets of existing programming languages and research, I aim to inspire future language designers to assess and consider the extensibility of their creations critically.
