Node.js 12实战
上QQ阅读APP看书,第一时间看更新

2.3.1 Runtime

Runtime又叫运行时,指将数据类型的确定由编译时推迟到了运行时。动态语言会将一些工作放在代码运行时才处理而并非编译时。也就是说,有很多类和成员变量在我们编译时是不知道的,而在运行时,我们所编写的代码会转换成完整的确定的代码运行。因此,编译器是不够的,我们还需要一个运行时系统(Runtime System)来处理编译后的代码。Runtime基本是用C和汇编写的。

从概念上讲,JavaScript引擎(engine)负责解析和JIT编译,例如把JavaScript中的语言编译成机器码。Runtime提供内建的库,可以在程序运行时使用。所以可以在浏览器中使用Window对象或者DOM API,这些存在于浏览器的Runtime中。Node.js Runtime包含不同的库,如Cluster和FileSystem API。两个Runtime都包含内置的数据类型和常用的工具,如Console对象。因此,Chrome和Node.js共享相同的引擎(V8),但是它们具有不同的Runtime。

因此,编写的代码具有运行时、动态特性。例如,在程序运行过程中,动态地创建类,动态地添加、修改该类的属性和方法;遍历一个类中所有的成员变量、属性以及所有方法;消息传递和转发。

Runtime的典型事例:

· 给系统分类添加属性、方法。

· 方法交换。

· 获取对象的属性、私有属性。

· 字典转换模型。

· KVC、KVO。

· 归档(编码、解码)。

· NSClassFromString class<->字符串。

· block。

· 类的自我检测。