我知道Clojure Repl 做了什么以及它是如何有用的,但我没有任何关于它内部如何工作的信息。它是在JVM中运行的程序吗? repl的内部如何工作?
答案 0 :(得分:8)
背后的技术:
微小的Java入口点:
https://github.com/clojure/clojure/blob/clojure-1.7.0/src/jvm/clojure/main.java
用Clojure编写的REPL的实际实现:
https://github.com/clojure/clojure/blob/clojure-1.7.0/src/clj/clojure/main.clj
这些链接指向1.7.0版本的文件,这是本文撰写时最新的稳定版本。
总结一下这些做法,clojure.main
是一个小型Java类,其main
方法作为REPL的入口点。 (所以,它只是一个标准的Java程序。)main
方法接受任何参数并将它们交给clojure.main
Clojure命名空间中的函数(使用一些简单的方法调用clojure.lang.RT
类实现了Clojure运行时的一些核心细节以获得有问题的函数 - 严格来说,就是保存函数的Var。然后,所述函数调用实际读取用户输入的代码,评估它,打印出结果并再次循环读取更多输入,直到由 Cd 或其他方法终止,并具有各种复杂性,如设置一些Var绑定等(允许用户控制REPL操作和某些编译器设置的某些方面)。