Open main menu
Home
Random
Recent changes
Special pages
Community portal
Preferences
About Wikipedia
Disclaimers
Incubator escapee wiki
Search
User menu
Talk
Dark mode
Contributions
Create account
Log in
Editing
Metalinguistic abstraction
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
{{Short description|Principle in computer science of domain-specific languages for problem solving}} In [[computer science]], '''metalinguistic abstraction''' is the process of solving complex problems by creating a new [[Programming language|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 Press|MIT]] textbook ''[[Structure and Interpretation of Computer Programs]]'', which uses [[Scheme (programming language)|Scheme]], a dialect of [[Lisp (programming language)|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 language|procedural]] (e.g. [[C (programming language)|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 [[object-oriented]] (e.g. [[Java (programming language)|Java]]) programmer might create [[object (computer science)|object]]s to represent the elements of the airport with [[Method (computer science)|method]]s 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 programming|functional]] (e.g. [[Scheme (programming language)|Scheme]]) programmer might create [[higher-order function]]s 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 [[domain-specific language]]s for modelling airports, with peculiar [[primitive (computer science)|primitives]] and [[type (computer science)|types]] for doing so. The new language could encompass any or all of the above approaches where most suitable,<ref name="SICP text">''Structure and Interpretation of Computer Programs, Part 4 β Metalinguistic Abstraction''</ref> 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 [[functional programming|functional]] metalinguistic abstractions in [[imperative programming|non-functional]] languages can be cumbersome while the reverse is usually trivial (e.g. it is generally much easier to take a [[Side effect (programming)|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 transparency|referential safety]] of [[hygienic macro|functional macro]]s, metalinguistic programming is mostly idiomatic of functional programming languages. ==See also== * {{annotated link|Domain-specific language}} * {{annotated link|Domain-specific multimodeling}} * {{annotated link|Language-oriented programming}} * {{annotated link|Metacompiler}} * {{annotated link|Metalanguage}} * {{annotated link|Metalinguistic awareness}} ==References== <references /> {{DEFAULTSORT:Metalinguistic Abstraction}} [[Category:Programming paradigms]]
Edit summary
(Briefly describe your changes)
By publishing changes, you agree to the
Terms of Use
, and you irrevocably agree to release your contribution under the
CC BY-SA 4.0 License
and the
GFDL
. You agree that a hyperlink or URL is sufficient attribution under the Creative Commons license.
Cancel
Editing help
(opens in new window)
Pages transcluded onto the current version of this page
(
help
)
:
Template:Annotated link
(
edit
)
Template:Short description
(
edit
)