On 2009-02-04 04:13:38 -0500, bearophile <bearophileh...@lycos.com> said:

Instead of using a "kitchen-sink" class, in D you can put such functionality into a module, like the string module of Phobos or similar libs.

I don't know Object-C, what you have done looks like the "monkey patching" done sometimes in Ruby. Is this the same thing? "monkey patching" as done in Ruby has several disadvantages and dangers. Time ago I have read that there's a simple enough way to remove most of the dangers from monkey patching: make it scoped. So the changes to the classes can be seen just inside a scope (and its subscopes) and not outside it.

From Wikipedia <http://en.wikipedia.org/wiki/Monkey_patching>:

"In Ruby, the term monkey patch means any dynamic modification to a class and is often used as a synonym for dynamically modifying any class at runtime."

Categories are indeed monkey patching according to this definition. Indeed, the way categories work in Objective-C, there is some risk that NSString could gain a function of the same name in a future version of the Foundation framework, and in that case the category-defined method will override the "official" one, so unless you give it a name like MF_myMethod (sort of namespacing it with your own prefix), there is a risk of clash.

That said, with the extension syntax I proposed for class extensions in D, you wouldn't have that problem (if implemented correctly) because the compiler would always know from where the function is comming and could therfore generate code so that the right function is called even if a function of the same name is added to the underlying library. Hum, perhaps this needs more explaination.

--
Michel Fortin
michel.for...@michelf.com
http://michelf.com/

Reply via email to