技术开发 频道

C++开发者:Objective-C的历史和原理

  一些历史

  19世纪80年代初,Objective-C由Brad Cox发明,起初是作为对C微小集合的拓展来支持Smalltalk风格的对象。它从面向对象预编译项目中脱颖而出,这个项目与Objective-C有着相似的语义但的确是些复杂的语义。

  最初的实现和Objective-C的商标由NeXT持有并全部应用在新的操作系统中。NeXT在Objective-C中创建了一个GUI工具集和一个接口创建器。这被广泛认为第一个商业快速应用开发(RAD)工具。好的一面就是接口创建器并不保存接口描述—存储序列化对象。这种方式可以保持一个模式-视图-控制器清楚的分离并且以可装载模式存储控制器和视图。

  早在19世纪90年代,NeXT和Sun对NeXT环境分别构建了便携版本。而NeXT初始系统在一些地方使用了纯C语言,新版本定义了两个框架:Foundation和AppKit.Foundation定义了核心功能,包括集合类,字符串和其他一些东西。AppKit包含了GUI框架。这两个都定义在OpenStep规格说明中,而这个说明也在NeXT、Sun和随后的一些GNU项目中实施。在收购NeXT之后,苹果公司将OpenStep实施改名为”Cocoa”。因为OpenStep基于早期的NeXT设计,在OpenStep的所有的类都以NS为前缀。

  GCC支持Objective-C的历史颇有些趣味性色彩。起初的实现是由NeXT所编写,而保存在一个分离的库,这样使用者可以链接他们的GCC的版本。通过没有和GCC的分离,NeXT希望规避GPL。这个小把戏没有成功,而且NeXT最后被要求公开源代码。然而,并没有要求公开运行时库的源代码,这就意味着编译器在其他平台都没有作用。Richard Stallman 编写了一个新的版本实际上是用来取代NeXT运行时。这后来被更新的版本取代。

  在GCC中,Objective-C现在的代码基于你使用的学科。NeXT[FS:PAGE]保留着自己的版本,这个版本因为没有分层而且都在单一源文件中所以仅仅勉强维持, 并且只支持NeXT运行时。GCC包含了一个不用维护的,基于NeXT代码但以#ifdefs标记的GNU运行时。

  曾经GCC支持Objective-C并试图以复制NeXT环境开始。GNUstep项目最终从这里发展并且实施几乎所有的OpenStep和Cocoa附加的一些。它也包括NeXT的接口创建器的取代:GNU对象关系模型(GORM)。

0
相关文章