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

Clojure REPL到底是什么?它背后的技术是什么?,clojure,Clojure,我知道Clojure Repl的功能以及它是如何有用的,但是我没有关于它的内部工作原理的任何信息。它是在JVM中运行的程序吗?repl的内部结构是如何工作的?其背后的技术: 微型Java入口点: 用Clojure编写的REPL的实际实现: 这些链接指向文件的1.7.0版本,这是本文撰写时最新的稳定版本 概括地说,clojure.main是一个很小的Java类,它有一个main方法作为REPL的入口点。(因此,它只是一个标准Java程序。)main方法接受任何参数,并将它们交给clojure.

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

其背后的技术:

  • 微型Java入口点:

  • 用Clojure编写的REPL的实际实现:

  • 这些链接指向文件的1.7.0版本,这是本文撰写时最新的稳定版本


    概括地说,
    clojure.main
    是一个很小的Java类,它有一个
    main
    方法作为REPL的入口点。(因此,它只是一个标准Java程序。)
    main
    方法接受任何参数,并将它们交给
    clojure.main
    clojure命名空间中的函数(使用对
    clojure.lang.RT
    类中的方法的一些简单调用,该类实现了clojure运行时的一些核心细节,以获取所讨论的函数–严格来说,就是保存该函数的Var)。然后,所述函数调用实际读取用户输入的代码,对其进行求值,打印出结果,并再次循环读取更多输入,直到用C-d或其他方法终止,并伴随各种复杂情况,如设置一些Var绑定等(允许用户控制REPL操作的某些方面和某些编译器设置).

    您是否先尝试寻找REPL?正如我所说,我知道它是什么,它是做什么的,但不知道它的底层技术和工作原理。它最适合项目的邮件列表。@jmargolisvt这个问题对程序员来说不太合适-它会很快被否决并关闭,请参阅推荐阅读:感谢详细答案。所以repl被嵌入到主程序中?它是否使用类似JRebel的东西将类加载到运行的JVM中?在repl中定义的新函数需要编译为字节码,我假设以某种方式“注入”到运行的JVM中?这是一个单独的JVM吗?这方面的细节超出了注释的范围,但是JDK它本身为在运行时加载新类提供了一种复杂的机制(有关开始信息,请参阅本页:)。Clojure编译器将各种Clojure构造编译成类,使用大量自定义逻辑和库获取最低级别的详细信息,然后加载这些类。还可以选择将这些类发送到文件中–这称为AOT编译,使在将来的JVM实例中加载它们更快。