为什么Objective-C没有命名空间?这似乎是一个简单的功能,可以使一些类名更具可读性(AVMutableVideoCompositionLayerInstruction
任何人?)并扼杀类名上的愚蠢字母前缀。这主要是因为向后兼容吗?实现名称空间比看起来难吗?
答案 0 :(得分:11)
我不知道答案,但我怀疑“它看起来比它看起来更难”可能就是这样。您必须以不破坏现有软件的方式在编译器和链接器中引入支持。虽然这显然是可能的(C ++已经做到了),但据推测,工具链团队在他们的板块上有更高的优先级。例如在最近我们有垃圾收集,GCD,块和Objective-C 2.0出现所以我们不能说他们什么也没做。
命名空间支持是我非常希望看到引入Objective-C的一件事。
答案 1 :(得分:4)
我不知道你是否想知道是否有某些官方决定。 但是像许多其他功能一样的命名空间是由语言贡献者做出的选择和选择。 PHP最近才引入了Namespace,例如Java使用包就像命名空间或python一样使用模块。
我认为命名空间实现有一个开销,主要是因为Objective-c是dinamically类型的,因此在运行时你必须做一些检查以解析命名空间,解决默认行为等等。我可以认为这是因为Objective-c也用于嵌入式环境(AKA iPhone)的速度非常重要。
你要把我在大恕我直言中所说的一切包好; D
<强>更新强>
我在clang开发者网站上发现了这个非常有趣的讨论http://clang-developers.42468.n3.nabble.com/Adding-namespaces-to-Objective-C-td1870848.html#a1872744,解释了为什么在Obj-C中实现命名空间绝对不是一件容易的事。