什么是Java语言规范或C++标准的Objective-C等价物?
是这样的:http: //developer.apple.com/documentation/Cocoa/Conceptual/ObjectiveC/Introduction/introObjectiveC.html?
(我只是在寻找一份(官方的)权威文件,它将解释这种语言的细微之处.我现在就跳过原因:)
您链接到的文档的附录A是对所有语言功能的描述,这是我们与规范最接近的(附录B曾经是语法规范,但是他们已经清楚地从以后的版本中删除了文献).
从来没有Objective-C的标准化,它总是在一个供应商的控制下 - 最初是StepStone,然后NeXT计算机授权它(并最终购买了IP),最后Apple消费了NeXT软件.我希望在Apple的标准化过程中没有什么动力,特别是因为没有人指责ObjC是一个标准化可以缓解的反竞争平台.
空无一人.您提供的链接是唯一的"官方"文档,它本质上是散文描述,而不是严格的语言规范.Apple员工建议这对于大多数用途来说已经足够了,如果您需要更正式的东西,您应该提交错误报告(!).遗憾的是,运行的笑话是Objective-C标准,由编译器能够编译的任何内容定义.
许多人认为Objective-C要么是C. IMHO的"严格超集"或"超集",对于"经典"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).