The concept was introduced at MacHack 2003[1][2] by Marcel Weiher and presented in a more complete form in 2005 by Marcel Weiher and Stéphane Ducasse.
[3] 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.
In ordinary Smalltalk code, without using HOM, obtaining a collection of the employees that have a salary of 1000 would be achieved with the following code: However, using HOM, it can be expressed as follows: 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 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 and Smalltalk.