技术开发 频道

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

  【IT168技术】老读者都知道我这些天花了很长时间写Objective-C的代码。现在我已经完成一个Smalltalk的编译器,这个编译器可以在对象与Objective-C的对象相关联的地方产生代码。同时,这篇文章也可以给那些熟悉C++的人一个关于Objective-C大概的介绍。

  Objective-C是为C提供给类Smalltalk语义学的最小集合的拓展而设计的。它也包括了类Smalltalk的语法,这可以轻松的看出部分代码是纯C的,并且这部分包括Objective-C的拓展。

  与C++不同,Objective-C是C的一个超集。每一个C程序都是一个有效的Objective-C程序。所有Objective-C中新关键字都以@未前缀,但在C的标识符这并不是有效的。

  运行时系统

  Objective-C的第一个具体实现是一个预处理器,它使Objective-C转化为C。语言的动态特性由一个运行时库提供。现代的编译器不用C作为中间语言, 但他们对运行时库提供动态特性有着相同的约定。

  在Objective-C,对象都是C结构体,只是这些结构体第一个元素是一个指向另一个用来代表类的C结构体。准确的来说在运行时这个类结构有些变化,但至少包含查找方法的信息要求、实例变量的布局和其他一些元数据。

  因为Objective-C是C的超集,并且运行时库的所有特性(包括类结构)对C是公开的, 这就意味着Objective-C对编程人员完全公开对象模型。这在Objective-C并不奇怪。当你在C++调用一个方法时,编译器通过虚表进行一些复杂操作来找到正确的代码运行。在Objective-C,如下:

  调用一个C函数来查找实现方法的函数(通过GNU运行时)

  调用一个查找方法的C函数并且在一次运算中调用(通过Apple运行时)

  这就意味着你可以编写纯C代码与Objective-C对象交互。它也允许你在你需要的情况下绕过一些动态行为。

      

0
相关文章