This should be on the Obj-C list. This whole discussion is about the language implementation. The Obj-C list needs more love anyway.
On Nov 9, 2011, at 10:30 AM, Jean-Daniel Dupas wrote: > > 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