I attended the Richmond .NET User Group meeting tonight and listened to Jon Pryor talk about The Mono Project. He did a great job and answered some of the questions I have had for a while about how to get started with Mono. Feeling a bit saucy from the ALT-ness of the experience, my friend Harper Trow said he was going to run over to IronWorks to attend the second half of the CocoaHeads User Group meeting. Sixto Saez, Harper and I found our way into the fairly crowded small conference room where a group of twenty and early thirty-somethings were discussing Cocoa Bindings. I am not a Mac OS X developer. But I am curious about other platforms and OS X has some compelling concepts.
The Richmond CocoaHeads are an interesting group of folks who are clearly committed to their framework and platform. I am a Microsoft guy to the core but it's really good to be among any group of technologists who so visibly love what they do. Having never seen Cocoa and the Xcode development environment before, I had to draw on prototypes from my C++, Java and .NET experience for figuring out how Xcode works in principle. It felt a lot like Visual Studio done Apple style: prettier and maybe a bit more attention to the details.
The one thing I saw in Cocoa that was quite interesting was how Cocoa Bindings implements the Observer Pattern for notifying user interface elements of property changes. Whenever some client code registers for change notifications on a property, the Cocoa Bindings code inserts a proxy at runtime that fires the pre and post events before and after the state change. Pretty cool stuff. This trick is essentially applying the Interceptor or Composition Filter pattern that I've been using in AOP for years but performing it dynamically at runtime. On the one hand, it's pretty cool to see these patterns applied in such a dynamic way. But it seems to tie Cocoa Bindings to Objective-C's object model so tightly that I can't imagine being able to use anything else to do OS X development in the future. It would be hard to introduce another dynamic language, for example, that didn't conform to Objective-C's runtime model for proxying the observed properties. I could be wrong on this but it was my first impression. And my first impressions are usually pretty accurate. What are your thoughts? Can you offer more insight?