"Modern Objective-C"真的是一个新版本,即Objective-C 2.1吗?

Jan*_*oon 6 objective-c llvm

在WWDC 2012中,Apple在名为"Modern Objective-C"的talk 405中引入了NSNumber文字和Collection文字的新语法.我从Stephen G. Kochan的Objective-C 2.0一书中学到了Objective-C.

"现代Objective-C"是否会成为Objective-C 2.1,还是应该将Apple的新语法视为编译器处理的现有结构的替代Apple特定语法(简写)?

(我在网上进行了一些研究,但只在Objective-C RunTime的上下文中找到了"现代"和"遗留"这两个术语.我想了解语言究竟是什么,什么是预处理器指令,什么是编译器指令.)

Ana*_*ile 10

Objective-C被定义为C的扩展.预处理器指令和编译器指令正是它们的C语言.

Objective-C语言没有"正式"定义(没有标准).Apple发布的文档或多或少地解释了它.这个语言也没有真正的"版本号".Apple有时会添加一项新功能,就是这样.在某个时刻,Apple决定推广一系列功能为"Objective-C 2.0",但这并不意味着所有以前的版本都具有相同的功能集,也不意味着所有后续版本都具有相同的功能集.Apple最近使用的名字是"现代Objective-C",指的是支持所有当前定义功能的语言.

请注意,某些功能是在编译器级别定义的,其他功能是在库级别定义的,而其他功能则是两者的混合.如果您使用在编译器级别完全实现的功能(如新的文字语法),它将适用于您使用该编译器编写和编译的任何程序.但是,如果您使用在库级别定义的功能或需要编译器和库支持的功能,它将仅适用于在最近的库可用的系统上运行的程序(Apple不允许您静态链接语言库) .例如GC,ARC和附加的归零语义weak.

因此:是的,"现代Objective-C"与早期的Objective-C不同,您应该将其视为新版本,但不是,没有附加版本号,Apple完全有可能为该语言添加新功能并称之为"现代Objective-C".除了语言的哪些功能之外,不仅取决于编译器,还取决于您正在编译的目标系统.因此,针对iOS 4的"现代Objective-C"程序将能够使用与针对OsX 10.8的"现代Objective-C"程序不同的一组功能.

  • 请注意,需要运行时支持的新功能通常仅在OS X或iOS的主要版本中引入; 一个将首先获得它,另一个将在下一个版本中获得.编译器只有功能可以稍微流畅.现在开发专注于LLVM,您通常可以关注LLVM开源项目,以了解接下来会发生什么. (3认同)