是否有可能在 JITted 语言中实现一种只解释的语言?
Is it possible to implement an interpreted-only language in a JITted one?
例如,据我所知,J 是一种只能解释的语言,因为编写编译器是 impossible/impractical 由于其语法类型(我远不是专家)。
鉴于我们现在拥有将 JIT 与元编程能力相结合的语言,例如 Racket 或 Scheme,是否有可能将仅解释器语言实现为一组宏以编译到主机不影响原始语言行为的语言?
我问这个是因为,据我所知,JIT 模糊了 "compile-time vs runtime" 边界,因此当你 运行,说一个 JITted Scheme 程序时,它应该能够提供相同的作为等效解释器的行为。
对吗?
程序的 JITted 版本必须具有与解释版本完全相同的可识别行为,否则实现会出现错误。
我想说所有的编程语言都可以用 JIT 来实现,但是生成的机器代码在执行时可能需要进行大量的运行时调用来帮助它,它可能需要跳出到疑难案件的口译员。反优化和重新编译也有帮助。
但最终解释器只是决定执行什么机器代码,JIT 可以用另一种方式做同样的事情。
例如,据我所知,J 是一种只能解释的语言,因为编写编译器是 impossible/impractical 由于其语法类型(我远不是专家)。
鉴于我们现在拥有将 JIT 与元编程能力相结合的语言,例如 Racket 或 Scheme,是否有可能将仅解释器语言实现为一组宏以编译到主机不影响原始语言行为的语言?
我问这个是因为,据我所知,JIT 模糊了 "compile-time vs runtime" 边界,因此当你 运行,说一个 JITted Scheme 程序时,它应该能够提供相同的作为等效解释器的行为。
对吗?
程序的 JITted 版本必须具有与解释版本完全相同的可识别行为,否则实现会出现错误。
我想说所有的编程语言都可以用 JIT 来实现,但是生成的机器代码在执行时可能需要进行大量的运行时调用来帮助它,它可能需要跳出到疑难案件的口译员。反优化和重新编译也有帮助。
但最终解释器只是决定执行什么机器代码,JIT 可以用另一种方式做同样的事情。