Higher Order Message
   HOME

TheInfoList



OR:

A higher order message (HOM) in a computer
programming language A programming language is a system of notation for writing computer programs. Most programming languages are text-based formal languages, but they may also be graphical. They are a kind of computer language. The description of a programming ...
is a form of
higher-order programming Higher-order programming is a style of computer programming that uses software components, like functions, modules or objects, as values. It is usually instantiated with, or borrowed from, models of computation such as lambda calculus which make h ...
that allows messages that have other messages as arguments. The concept was introduced at
MacHack MacHack was a Apple Macintosh, Macintosh software developers conference first held in 1986 in Ann Arbor, Michigan in partnership with the University of Michigan. The conference was organized and operated by Expotech, Inc. The final (18th) MacHac ...
2003 by Marcel Weiher and presented in a more complete form in 2005 by Marcel Weiher and Stéphane Ducasse. Loops can be written without naming the collections looped over, higher order messages can be viewed as a form of point-free or
tacit programming Tacit programming, also called point-free style, is a programming paradigm in which function definitions do not identify the arguments (or "points") on which they operate. Instead the definitions merely compose other functions, among which are co ...
.


Examples

In ordinary
Smalltalk Smalltalk is an object-oriented, dynamically typed reflective programming language. It was designed and created in part for educational use, specifically for constructionist learning, at the Learning Research Group (LRG) of Xerox PARC by Alan Ka ...
code, without using HOM, obtaining a collection of the employees that have a salary of 1000 would be achieved with the following code: salaried := employees select: each hasSalary: 1000 However, using HOM, it can be expressed as follows: salaried := employees select hasSalary: 1000. Here, select is a higher order message, and hasSalary: is understood to be called on the select message itself, rather than on its result. The Smalltalk language was not modified to implement this feature. Instead, select returns a message that reifies the select send, which then interprets the hasSalary: message. Another example is the use of future message sends in the Croquet Project: (cube future:1000) addRotationAroundY:10. In this example, the future: message causes the addRotationARoundY: message to be sent to the cube object after 1 second.


Adoption

The reference implementation in Objective-C leverages the trait that in Objective-C, objects that don't understand a message sent to them, still get it delivered in a special hook method, called forward:. Higher order messaging was implemented in a number of languages that share this feature including
Ruby A ruby is a pinkish red to blood-red colored gemstone, a variety of the mineral corundum ( aluminium oxide). Ruby is one of the most popular traditional jewelry gems and is very durable. Other varieties of gem-quality corundum are called sa ...
and Smalltalk. ECMAScript Harmony's Proxies documentation specifically mentions higher order messages as an application for their Catchall Proxies.http://wiki.ecmascript.org/doku.php?id=harmony:proxies&s=proxy#higher-order_messages


Similar concepts in other languages

The programming language J distinguishes between
verb A verb () is a word (part of speech) that in syntax generally conveys an action (''bring'', ''read'', ''walk'', ''run'', ''learn''), an occurrence (''happen'', ''become''), or a state of being (''be'', ''exist'', ''stand''). In the usual descri ...
s and
adverb An adverb is a word or an expression that generally modifies a verb, adjective, another adverb, determiner, clause, preposition, or sentence. Adverbs typically express manner, place, time, frequency, degree, level of certainty, etc., answering ...
s. Adverbs modify the functioning of verbs. This is similar to higher order messages (the adverbs) modifying the messages that follow (the verbs). In the Croquet example above, the addRotationAroundY:. message is still sent and has its normal meaning, but its delivery is modified by the future:1000 message, it will be sent sometime in the future.


References

{{reflist, 2 Programming paradigms