On Friday, March 22, 2002, at 01:18 PM, Markus Hitter wrote:

>
> Hello all,
>
>
> here's a issue, I'm not too sure about.
>
> In NSArray.m I see:
>
> @implementation NSArray
> ...
> + (id) allocWithZone: (NSZone*)z {
>   if (self == NSArrayClass) {
> ...
>     } else {  // != NSArrayClass, e.g. GSArrayClass
>       return NSAllocateObject(self, 0, z);
>     }
> }
>
>
> In GSArray.m, something similar:
>
> @interface GSArray : NSArray
> ...
>
> @implementation GSArray
> ...
> + (id) allocWithZone: (NSZone*)zone
> {
>   GSArray     *array = NSAllocateObject(self, 0, zone);
>
>   return array;
> }
>
>
> To all of my knowledge, the first implementation makes the second 
> obsolete?

Well, yes ... the second implementation is just a tiny bit more 
efficient, but it's
not necessary and the efficiency gain is trivial.

>
> The reason I came across such an issue is, on NeXT runtime 
> behavior_class_add_class() makes major trouble. A possible conclusion 
> might be, we have to get rid of behavior adding on NeXT runtime, at 
> least in +initialize methods.

I think a better conclusion is that the NeXT runtime implementation 
should be fixed.

> In all occurences of behavior_class_add_class(), some GS* class is 
> involved. I'm trying to find out why all these GS* classes exist.

They are generally the concrete implementations of classes within a 
class cluster.
They contain the code which actually does most of the work of the base 
library.

> Is it OK to consider behavior adding as some sort of multiple 
> inheritance trough the backdoor?

Pretty much.  It's mostly used to let mutable classes inherit the 
methods of their
immutable counterparts.  The only workarounds for the lack of it are -
1. duplicate the code ... with all the obvious disadvantages for 
maintainability and code size.
2. put the shared code in a header file and include it into both the 
mutable and immutable
class implementations.  Basically the same as option 1 but a little 
neater.

PS. The bug mailing list is probably not the right place to discuss 
porting issues.


_______________________________________________
Bug-gnustep mailing list
[EMAIL PROTECTED]
http://mail.gnu.org/mailman/listinfo/bug-gnustep

Reply via email to