完成两个整数的加法运算,编译执行的语言(比如C语言)是否一定比解释执行的语言(比如JavaScript)运行速度更快?为什么?

新手上路,请多包涵

完成两个整数的加法运算,编译执行的语言(比如C语言)是否一定比解释执行的语言(比如JavaScript)运行速度更快?为什么?

阅读 1.4k
2 个回答

这个问题本身就有点“问题”
不知道把一门语言分为"编译语言"和"解释语言"的说法是从哪来的,就好像问西红柿是水果还是蔬菜一样,实际上两者并不是二选一的关系。

从实现的角度来看

  • 编译 是指一种技术,一种把源代码翻译成其他形式的技术。比如说 gcc 把c代码编译为机器码,jdk把java代码编译为字节码
  • 当某种实现称为解释器的时候,是指它接受一段源代码,并且还执行了。

gcc 或者其他的什么编译器将c代码编译成机器码,你可以在对应的平台上执行这个文件,并不需要知道它是gcc还是clang编译的,很明显 gcc 是个编译器。

TypeScript 将源代码转换为 javascript 但是不执行它,所以 TypeScript 是个编译器。

对于javascript呢,早期的一些实现可能只是解析源代码,遍历生成的语法树并执行它,这种实现毫无疑问它是一个解释器。但是现代的引擎(比如V8),代码首先会换转为内部的字节码格式,然后在VM内执行。
说它是一个解释器没有问题,同时它也包含了编译的动作,首先是编译成字节码,然后是运行过程中的jit(Just-in-time compilation)。

所以这个问题没有答案,TypeScript是一门编译语言,但它甚至没有能力执行自己生成的东西,哪来的执行速度呢 😂

你比较的目的是什么呢?因为【一定】的事是没有的。

编译执行时间=编译时间+执行时间
解释执行时间=解释时间+执行时间

仅比较【执行时间】,编译语言”可能“会快。
因为一切取决于你的定义的边界,比如:

计算两个大整数运算:

$ python -c "print(999999999999999999999999999999999+1)"
1000000000000000000000000000000000

用C语言这种计算得自己写算法或找相关的库了,这个时间就长了去了,写出来的还真”不一定“比Python内置的快,这取决谁写了。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题