什么是Clojure REPL?它背后的技术是什么?

Zur*_*iar 2 clojure

我知道Clojure Repl 了什么以及它是如何有用的,但是我没有关于它的内部结构如何工作的任何信息.它是在JVM中运行的程序吗?repl的内部如何工作?

Mic*_*zyk 8

背后的技术:

  1. 微小的Java入口点:

    https://github.com/clojure/clojure/blob/clojure-1.7.0/src/jvm/clojure/main.java

  2. 用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操作和某些编译器设置的某些方面).