Structure and interpretation of computer programs
Cambridge, MA, 1996
Abstract
Software development is a process of managing intellectual complexity through the application of procedural and data abstraction. These abstractions permit the construction of complex systems from primitive elements by establishing stable interfaces and modular components. The methodology transitions from functional programming to the management of local state and assignment, which requires an environment model of evaluation to resolve variable scope and binding. Alternative computational strategies, such as stream processing, decouple the temporal order of events from the sequence of data, offering a means to model state without explicit assignment. Metalinguistic abstraction—the design and implementation of new programming languages—serves as a primary tool for problem decomposition, illustrated through the development of evaluators for various paradigms, including lazy evaluation, nondeterministic computing, and logic programming. The logical conclusion of this hierarchical abstraction is the mapping of high-level symbolic processes onto register machine architectures. This bridge between symbolic logic and physical machine instructions reveals the essential control structures of evaluation, including recursion, stack management, and compilation. By treating programs as data and data as programs, the relationship between mathematical functions and machine-level implementation is unified within a rigorous framework of computational logic. – AI-generated abstract.
