Objective-C相当于Java语言规范还是C ++标准?

时间:2009-08-05 19:05:38

标签: objective-c standards

Java Language SpecificationC++ Standard

的Objective-C等价物是什么?

是这样的: http://developer.apple.com/documentation/Cocoa/Conceptual/ObjectiveC/Introduction/introObjectiveC.html

(我只是在寻找一份(官方的)权威文件,该文件将解释该语言的细微之处。我现在将跳过原因:)

5 个答案:

答案 0 :(得分:13)

您链接到的文档的附录A是对所有语言功能的描述,这是我们与规范最接近的(附录B曾经是语法规范,但是它们已经明确地从后来删除了该文件的版本。)

从未有过Objective-C的标准化,并且它始终受到单一供应商的控制 - 最初是StepStone,然后是NeXT计算机许可它(并最终购买了IP),最后苹果消耗了NeXT软件。我希望在Apple的标准化过程中没有什么动力,特别是因为没有人指责ObjC是一个标准化可以缓解的反竞争平台。

答案 1 :(得分:12)

没有。您提供的链接是唯一的“官方”文档,它本质上是散文描述,而不是严格的语言规范。 Apple员工建议这对于大多数用途来说已经足够了,如果您需要更正式的东西,您应该提交错误报告(!)。遗憾的是,正在运行的笑话是Objective-C标准是由编译器能够编译的任何内容定义的。

许多人认为Objective-C要么是C.恕我直言的“严格超集”或“超集”,对于'经典'Objective-C(或Objective-C 1.0),我会认为这是一个真实的陈述。特别是,我不知道任何没有映射到等效的“普通C”语句的Objective-C语言添加。从本质上讲,这意味着Objective-C的添加是纯粹的语法糖,并且可以使用C标准来推断细节。我不相信对于启用了GC的Objective-C 2.0来说这是完全正确的。这是因为需要专门处理指向GC管理内存的指针(编译器必须根据指针的细节插入各种障碍)。由于GC指针类型限定符(例如__strong)在__attribute__(())内实现为gcc,这意味着void *p;void __strong *p;similarly qualified pointers根据C99标准。这可能导致的问题,甚至编写以确定性方式运行的程序的能力,要么是不言而喻的(请咨询您当地的语言律师或编译器作者以获取更多信息)。

不时出现的另一个问题是C语言相对于Objective-C语言继续发展。 Objective-C可以追溯到1980年代中期,这是ANSI-C之前的标准时间。请考虑以下代码片段:

NSMutableArray *mutableArray = [NSMutableArray array];
NSArray *array = mutableArray;

这是合法的Objective-C代码,由该语言的官方散文描述定义。这也是面向对象编程背后的主要概念之一。然而,当人们从“C99的严格超集”的角度考虑这些陈述时,就会遇到一个巨大的问题。特别是,这违反了C99的strict aliasing rules。标准等级语言规范将有助于澄清此类冲突的处理和行为。不幸的是,因为不存在这样的文档,所以对这些细节存在很多争论,并最终导致编译器中的错误。这导致gcc中的错误一直追溯到版本3.0(gcc bug #39753)。

答案 2 :(得分:1)

Apple的文档是关于你将获得的最好的。与许多其他语言一样,Objective-C没有正式的标准或规范;相反,它主要通过其规范实现来描述。

答案 3 :(得分:1)

答案 4 :(得分:0)

Apple(现在)使用llvm.org项目的clang。

在此上下文中定义了一些语言元素

e.g。 Objective-C文字 - > http://clang.llvm.org/docs/ObjectiveCLiterals.html

但我没有找到所有元素的清晰概述。

---更新 -

Apples clang的来源(作为开源)在这里: http://opensource.apple.com/source/clang/