Standard ML属于编译型、解释型还是二者兼具的编程语言?
Standard ML(SML)语言类型判定与编译原理说明
语言类型结论
Standard ML(SML)核心定位为编译型语言,主流实现同时附带交互式REPL环境作为开发辅助,可支持类解释执行的交互操作,但本身不属于解释型语言。
编译型定位的核心原理
你调研得到的SML为编译型语言的结论符合行业普遍认知,核心依据如下:
- 静态检查全量前置:SML的强静态类型系统要求所有类型推导、类型校验逻辑全部在程序执行前完成,编译阶段就会抛出类型不匹配、变量未定义等错误,不会等到运行时才报错,这是编译型语言和解释型语言的核心差异之一。
- 主流实现可输出独立原生可执行文件:目前应用最广的SML编译器(如MLton、Poly/ML)都支持全量编译流程,会将SML源代码经过词法分析、语法解析、类型检查、多层中间代码优化、目标代码生成等步骤,最终输出不依赖任何SML开发环境的原生二进制可执行文件,运行效率远高于纯解释型语言。
- 交互式REPL并非纯解释实现:很多SML实现自带的逐行执行REPL环境,本质是对增量编译能力的封装,用户输入的每一行代码都会先经过完整的编译步骤生成可执行指令再运行,并非逐行解释执行,仅对外呈现出了类似解释器的交互效果。
内容的提问来源于stack exchange,提问作者Chris Evans
相关产品推荐
相关产品推荐

