syntax - 你能判断一门编程语言是仅仅通过它的语法来编译还是解释的吗?
问题描述
例如,有人可以通过查看 X 的语法来判断 X 编程语言是编译的而不是解释的。
也许编译型和解释型编程语言有一个共同的主题,每个主题都是独一无二的?
解决方案
不。作为比较,你能从烹饪的食材上判断一顿饭是用刀叉吃还是用手吃?
您可能会做出一些有根据的猜测——例如,如果配料包括面条,那么这顿饭可能不会徒手吃。同样,如果该语言的语法在每个变量和函数签名上都包含显式类型声明,那么这表明某种静态检查将在程序运行之前的“编译时”完成。
但基本事实是,如果你不介意弄得有点乱,没有什么能阻止你徒手吃面条,同样也没有什么能阻止你编写静态类型语言的实现,该语言在运行时进行所有检查. 为了好玩,我曾经为 Java 的一个基本子集写了一个树遍历解释器,它就是这样做的。
所以问题在于语法是编程语言的属性,但“编译”与“解释”不是编程语言的属性;它是编程语言实现的属性。如果有编译器和解释器,可以用刀叉和徒手吃同一顿饭,并且可以编译和解释相同的语言。Java 字节码就是一个很好的例子。它可以由JIT 编译器在运行时解释或编译为本机代码。
推荐阅读
- laravel - Laravel Sanctum:如何配置令牌的到期日期?
- php - 尝试登录时,我的守卫总是在自定义中间件中返回 null
- python - Python-Kivy AttributeError:“NoneType”对象没有属性“文本”
- dependencies - Swift Package 错误中缺少 PDFKit 符号
- redis - 在 Redisson Java 客户端上,我如何使用和 OR 操作来获取 2 个 glob 模式?
- php - 如何使用 PHP 区分 Macbook 和 iPad?
- c++ - BOOST 链接错误未定义对 `boost::system::system_category()' 的引用
- powershell - Powershell 排除 pdf 扩展文件
- javascript - 为什么“提示”会一次又一次地出现?
- javascript - 从 vue.js 中的注销按钮访问 main.js 中的实例