首页 > 解决方案 > 你能判断一门编程语言是仅仅通过它的语法来编译还是解释的吗?

问题描述

例如,有人可以通过查看 X 的语法来判断 X 编程语言是编译的而不是解释的。

也许编译型和解释型编程语言有一个共同的主题,每个主题都是独一无二的?

标签: syntaxprogramming-languagescomputer-science

解决方案


不。作为比较,你能从烹饪的食材上判断一顿饭是用刀叉吃还是用手吃?

您可能会做出一些有根据的猜测——例如,如果配料包括面条,那么这顿饭可能不会徒手吃。同样,如果该语言的语法在每个变量和函数签名上都包含显式类型声明,那么这表明某种静态检查将在程序运行之前的“编译时”完成。

但基本事实是,如果你不介意弄得有点乱,没有什么能阻止你徒手吃面条,同样也没有什么能阻止你编写静态类型语言的实现,该语言在运行时进行所有检查. 为了好玩,我曾经为 Java 的一个基本子集写了一个树遍历解释器,它就是这样做的。

所以问题在于语法是编程语言的属性,但“编译”与“解释”不是编程语言的属性;它是编程语言实现的属性。如果有编译器和解释器,可以用刀叉和徒手吃同一顿饭,并且可以编译和解释相同的语言。Java 字节码就是一个很好的例子。它可以由JIT 编译器在运行时解释或编译为本机代码。


推荐阅读