我知道Clojure Repl 做了什么以及它是如何有用的,但是我没有关于它的内部结构如何工作的任何信息.它是在JVM中运行的程序吗?repl的内部如何工作?
背后的技术:
微小的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).然后,所述函数调用实际读取用户输入的代码,对其进行评估,打印结果并再次循环读取更多输入,直到通过C-d或其他方法终止,以及设置一些Var绑定等各种复杂情况(以允许用户控制REPL操作和某些编译器设置的某些方面).