HigherOrderMessaging
“Higher Order Messages allow user-defined message dispatch mechanism to be expressed using an optimally compact syntax that is a natural extension of plain messaging and also have a single conceptual model. They can be implemented without extending the base language and operate through language bridges.” Read more…
Until now, all Higher Order Messaging implementations for Objective-C used a trampoline object in order to pass a message as an argument to another message. The result is a clumsy syntax that’s sometimes hard to understand for someone who’s unfamiliar with HOM.
This Higher Order Messaging takes a completely different approach, and adds a concrete Message object, which can stand for any Objective-C message. This allows a much simpler and intuitive syntax. Where “traditional” Higher Order Messaging syntax look like this - NSArray *a = [[myArray select] hasPrefix:@"a"]; - using this implementation results in NSArray *a = [myArray selectWhere:MSG(hasPrefix:@"a"), nil]; (-selectWhere: accepts variable number of messages, and therefor nil is added at the end).
License
Copyright (c) Ofri Wolfus, 2005-2007 All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
- Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
- Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
- Neither the name of Ofri Wolfus nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Download
You can get the latest source from svn.dpompa.com/hom/trunk. Like always, comments and contributions are always welcome. ![]()
WebSVN is also available.
Important Note: This was tested on 10.4 only, and is compiled with fast ObjC message dispatch. When compiling without fast message dispatch, it MIGHT also work on 10.3.
HOM_b1.dmg (A bzip2 compressed disk image).