显然,JVM有一个label/goto
机制。我们能否将Clojure语言中添加这样的功能?
我想有两个问题可以100%独立地解决。
1. 理论上是否可能。也就是说,JVM指令真的允许这样的Clojure原语吗。也许我弄错了,这实际上是不可能的。
2. 核心Clojure维护者能否被说服这个请求的合理性。
通常,goto在机器生成代码中很有用,不太适合人类编写的代码。
我至少有三个用例,我希望有这样一个机制。
- 确定性有限自动机的序列化
- 区分网的序列化
- 将Knuth风格算法从《计算机程序设计艺术》转换为Clojure
我知道很多人可能会用哲学论点来回应为什么你不应该使用goto。我希望避免在这里进行这样的讨论。
对我来说,一个合理的选择可能是类似于Common Lisp prog的Clojure原语,尽管绑定变量的能力并不是必需的,因为这可以通过用户使用带有宏的let轻松实现。