显然JVM有一个label/goto
机制。在Clojure语言中添加这种功能是否可能?
我认为可以提出两个可以完全独立解决的问题。
1. 是否在理论上可能。也就是说,JVM指令是否真的允许Clojure原语。也许我弄错了,这根本不可能。
2. 是否能够说服Clojure核心维护者该请求的优点。
一般情况下,goto
在机器生成的代码中很有用,而在人类编写的代码中则不是那么有用。
我至少有三个需要这种机制的场景。
- 确定性有限自动机的序列化
- 判别网的序列化
- 将Knuth风格的算法从《计算机编程艺术》翻译成Clojure
我知道很多人可能会对此提出一些关于为什么不应该使用goto的哲学论点。我希望避免在这里进行这样的讨论。
对我来说似乎合理的一种可能性是Clojure原语类似于Common Lisp prog,尽管绑定变量的能力并不是必需的,因为它可以通过使用带有宏的let
轻松实现。