显然,JVM有一个label/goto
机制。有没有可能将Clojure语言添加此功能?
我想有两种问题是100%可以独立解决的。
1. 在理论上是否可行。即,JVM指令是否真的允许Clojure原语实现这样的功能。也许我弄错了,这实际上是不可行的。
2. 核心Clojure维护者是否会被请求的优点所说服。
一般来说,goto
在机器生成的代码中很有用,而在人写的代码中并不太多。
我至少有三个使用场景想要有这样的机制。
- 确定性有限自动机的序列化
- 区分网的序列化
- 将Knuth风格算法从《计算机编程艺术》翻译到Clojure
我知道很多人可能会回应说,用goto是不好的哲学观点。我希望避免这种讨论。
在我看来,一个合理的可能性是在Clojure中有一个类似于Common Lisp prog的原始组件,尽管绑定变量并不是必需的,因为用户可以通过使用具有宏用户的let
来轻松实现。