每一种计算机语言都实现了某种形式的运行时系统,无论这种语言是编译语言,解释语言,还是嵌入式领域特定语言。【compiled language, interpreted language, embedded domain-specific language】或者有些语言会通过API调用以线程形式调用。除了要支持语言的低级行为之外,一个运行时系统还要实现更高层次的行为,甚至要执行类型检查,调试,或者代码生成与优化。
作为一个简单的运行时系统的例子,C语言的运行时系统是编译器插入到可执行文件中的一个特殊的指令集合。此外,这些特殊的指令集合还管理处理器栈,为局部变量分配空间,并把函数调用参数拷贝到栈顶。之所以这些行为是运行时系统的一部分而不是语言的关键部分,是因为这些行为时系统行为,这些行为在程序的执行全过程中维护了栈的状态。并且这些系统行为实现了语言的执行模型,而不是实现了与特定计算结果有关的语义。
另一个展示运行时系统特性的例子是使用API与运行时系统交互。对这个API的调用看起来就像是对软件库的调用一样,然而运行时系统添加了实现了一个执行模型的系统性行为。这里的API添加了插桩代码会调用运行时系统,而不是使用一个包含代码的库直接实现软件行为。一个人只要了解构成一个库的语言就能够理解这个库的行为。然而,一个人要想了解刚才那个调用运行时库的API不能只了解构成API的语言本身。还要知道由运行时系统实现的执行模型是什么样的。
这就是一种嵌入式语言如posix threads和一个软件库的区别。虽然posix threads和软件库都是通过一个API调用,但是posix threads的行为不能通过代码用的语言本身理解。实际上posix threads的调用还是要依赖于运行时系统提供的执行模型。
某些compiled或者interpreted的语言提供一个允许应用代码直接和运行时系统交互的接口。一个例子是JAVA中的Thread类,通常情况下一个语言的核心行为(如任务调度和资源管理)是不能够通过这种方式使得应用代码能够接触到的。

3041

被折叠的 条评论
为什么被折叠?



