Metalinguistic abstraction

Source: Wikipedia, the free encyclopedia.

In computer science, metalinguistic abstraction is the process of solving complex problems by creating a new language or vocabulary to better understand the problem space. More generally, it also encompasses the ability or skill of a programmer to think outside of the pre-conceived notions of a specific language in order to exploratorily investigate a problem space in search of the kind of solutions which are most natural or cognitively ergonomic to it. It is a recurring theme in the seminal MIT textbook Structure and Interpretation of Computer Programs, which uses Scheme, a dialect of Lisp, as a framework for constructing new languages.

Explanation

For example, consider modelling an airport inside a computer. The airport has elements like passengers, bookings, employees, budgets, planes, luggage, arrivals and departures, and transit services.

A

procedural (e.g. C
) programmer might create data structures to represent these elements of an airport and procedures or routines to operate on those data structures and update them, modelling the airport as a series of processes undergone by its various elements. E.g., bookings is a database used to keep passengers and planes synchronised via updates logged as arrivals and departures, budgets are similar but for money: airports are a lot of things that need to get done in the right order to see that passengers get where they're going.

An

methods
which represent their behaviors, modelling the airport as a collection of possibly related things which characteristically interact with each other. E.g., passengers, employees, and planes possess location attributes which can be modified via applicable transit methods: transit services have methods to bring employees and passengers to and from airports, planes have methods to bring passengers along with themselves between different airports: airports are a grouping of things working together as intended.

A functional (e.g. Scheme) programmer might create higher-order functions representing both the elements and behaviors or processes of the airport, modelling the airport as a map of relations between elements in its various domains and those in their assorted codomains. E.g., airports map budgets to bookings schedules, each of which is itself a map of elements to elements: balances of income and expenditure, and balances of arrivals and departures, each of which is, recursively, its own mapping of elements and their own mappings in kind, collectively comprising a set of morphisms: airports are, transitively, the evaluative transformation of a certain spacetime economy.

Finally, a metalinguistic programmer might abstract the problem by creating new

types for doing so. The new language could encompass any or all of the above approaches where most suitable,[1]
potentially enabling the programmer to retain both the abstract generality of the functional model, the intuitive sensibility of the object model, and the detail-driven pragmatism of the procedural model.

Because the creation of

side-effect-free programming abstraction and simply add effects to it than it is to take a stateful abstraction and work around or encapsulate its propagation of state), and because of the syntactic flexibility and referential safety of functional macros
, metalinguistic programming is mostly idiomatic of functional programming languages.

See also

References

  1. ^ Structure and Interpretation of Computer Programs, Part 4 — Metalinguistic Abstraction