首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > perl python >

[D]关于解释执行动态语言的一些疑惑,该如何处理

2012-05-20 
[D]关于解释执行动态语言的一些疑惑编译型语言是需要先编译成二进制文件,再LINK相关资源,最后才能执行的。

[D]关于解释执行动态语言的一些疑惑
编译型语言是需要先编译成二进制文件,再LINK相关资源,最后才能执行的。
像C的如下代码:

#include <stdio.h>

void main()
{
  printf("this is C code\n");
}

对于以上这段代码,编译器需要去相关目录下找到stdio.h文件,将其与源代码拼在一起编译,完后还需要LINK相关资源,比如
DLL,LIB,Resource。最后才会有一个EXE文件可以用来执行。
于是我明白为什么程序可以直接调用printf函数,因为相关的函数实现已经加进来了。执行的时候,CPU可以根据PE文件的相应函数导出列表找到,并CALL。

但对于解释执行的脚本语言,很多东西貌似事先都不用做准备的,拿来就可以用,这点让我很看不懂。
例如下面这段RUBY代码:
def printing
  printf("this is Ruby")
end
我知道脚本语言是读一行,编译一行,然后执行一行的。但我就搞不明白,读到printf语句的时候,我们并没有事先的将其方法的实现加入到脚本代码之前,为什么CPU还是能知道具体的方法实现的内存位置呢 ?
解释器interpreter的原理,和complier编译器到底有啥不同? 

大牛进来,帮忙小弟解惑~

先谢过
--------------------------
Double行动:
原帖分数:40
加分:40

[解决办法]
有些函数或数据结构你能直接用,是因为它们是解释器内置的,或者是解释器预先加载的(因为它们很常用或用户指定要加载).

另外注意:ruby里的printf和你的c代码里的printf是两个不同的函数,ruby并不能这样直接调用c函数.
[解决办法]
这就是解释器的作用,预先载入了built-in函数,所以当你用解释器执行代码的时候,相当于已经include过了,这些函数都已经定义好

热点排行