Le 9 nov. 2011 à 01:37, Ian Joyner a écrit :

> On 9 Nov 2011, at 05:21, Greg Parker wrote:
> 
>> On Nov 8, 2011, at 9:57 AM, Andy O'Meara wrote:
>>> Yes, I know that one workaround is to mangle all objC class names based on 
>>> something unique in the project (we are forced to do this with our 
>>> screensaver products).  I'd be more accepting of this if Xcode facilitated 
>>> this (with perhaps a macro of or the introduction of @privateinterface or 
>>> something), but I don't fancy the idea of having to stick nasty and 
>>> limiting #includes, #defines, or #ifdefs all over our code to make sure 
>>> stuff compiles and links correctly just to workaround the fact that objC 
>>> seems like it should really allow classes to not be exported by default 
>>> into a single/shared namespace.
>> 
>> This is the only solution.
>> 
>> 
>>> I suppose if there's no solution to this, then someone is going to describe 
>>> how it can't be done because it would somehow break the loading of bundles. 
>>>  Well if that's the case, then I'm thinking that a radar is still worth 
>>> filing because I'd be pretty surprised if the senior engineering level is 
>>> going to agree that this whole flat objC namespace business is consistent 
>>> with the precept that software should 'just work', rather than 'usually 
>>> work' and emit user-attention-getting log messages as long as two 
>>> internally private class names don't happen to have the same name.
>> 
>> 
>> <rdar://problem/2821039> ER: Objective-C namespaces
>> 
>> If you're familiar with Radar numbers, you'll recognize that the bug is very 
>> old. The name is a bit misleading - C++ namespaces or Java packages are 
>> little better than adding name prefixes by hand. (For example, they don't 
>> solve the problem of two developers importing the same static archive.) A 
>> real solution for class name collisions needs to be (1) automatic or nearly 
>> so, (2) predictable so nib references work, and (3) not incompatible with 
>> existing classes. It's a hard problem.
> 
> I agree, in NS::class, just substitute the ugly :: with _ and you see it's 
> just a trick: NS_class. There should be a decent solution that doesn't need 
> to put extra bookkeeping constructs in the language, and so that the clash is 
> avoided in one place. Another point is that code in a class should not be 
> bound to the environment and the C++ and Java way of doing it says 
> 'environment' all over the place.
> 
> A different approach is in Eiffel that identifies the problem as being when 
> you try to use two libraries together and handles clashes in one place by 
> renaming (in a configuration file separate from code). Thus it becomes a 
> linker concern.

Objective-C uses a dynamic runtime. The linkers (both the static one and the 
dynamic one) cannot take care of all possible cases.
How do you handle NSClassFromString used with a non constant string ? 

> Language design should keep compilation concerns separate from linking 
> concerns (and indeed not just static linking, but dynamic run-time linking). 
> On the other hand most Unix style C linkers really don't do enough to make 
> sure things can be sensibly linked together, so the basic languages and 
> compilers get bent instead and then programmers are forced to think of all 
> these things at a lower level than they should need to.
> 
> Similarly, imports and #includes are really bad, because they couple modules 
> to their environment, rather than this kind of linkage being done externally 
> in one place and handled by the linker. This means that if any import 
> changes, you have to go through all the files and change all the imports and 
> it looks like you are programming, but really you are not. So we invent a 
> refactoring to take care of something that shouldn't exist.
> 
> Anyway, that's my argument for not doing namespaces in Objective-C the Java 
> or C++ way. There's not so much clutter in Java, but there is so much clutter 
> in C++ it looks like Windows! I'm sure Apple will come up with a better 
> solution and things they have done over the last few years with Objective-C 
> (and tagged pointers in Lion as we have just discussed in the Obj-C group) 
> have been very nice and simplifying (even for a language based on C). We 
> should not force them into doing anything the same bad old way that 
> everything else does.

-- Jean-Daniel




_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to