unrepl, 更好的Clojure REPLs的通用基础

分享于 

5分钟阅读

GitHub

  繁體 雙語
A common ground for better Clojure REPLs
  • 源代码名称:unrepl
  • 源代码网址:http://www.github.com/Unrepl/unrepl
  • unrepl源代码文档
  • unrepl源代码下载
  • Git URL:
    git://www.github.com/Unrepl/unrepl.git
    Git Clone代码到本地:
    git clone http://www.github.com/Unrepl/unrepl
    Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/Unrepl/unrepl
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    
    unrepl

    基于通用流的工具,采用基于通用流的REPL协议。

    Unrepl是一组交换协议的通用基础。 is nREPL or或者套接字REPL的升级路径,允许不同的基于unrepl的客户端实现自己的扩展来实现REPL协议( 比如 )。 例如基于unrepl的客户机将通过基本的REPL连接发送自己的服务器负载("blob"),以升级这里连接的服务器端,以升级该连接的服务器端。 升级后,客户端可以使用现有的REPL连接上的新特性。

    这个过程的好处是,目标进程不需要包括超出套接字REPL的REPL代码,它已经包含在 Clojure 1.8 + 中。 只有在需要的时候才加载其他内容,并且可以根据客户的需要扩展。 由于共享公共基础,在不同的Unrepl导数之间共享服务器实现的部分是很容易的。

    因此Unrepl用于 toolsmiths,而不是普通用户通常直接接触的东西。 假设有人使用"myide",他们将从用户界面设置一个"myide替换"连接,而"myide"会透明地将REPL连接 upgrade,而不需要用户注意到像Unrepl这样的东西。

    Unrepl真的是客户使用的衍生 private 作品的基础。

    什么是"这个斑点"?

    blob是一条由 Bootstrap 代码发送到的unrepl实现。 它应该是 static 和不透明的。

    如果unrepl实现是客户端的,那么这个超媒体的废话为什么不?

    它将客户端和unrepl实现解耦,使客户端维护者更容易使用或者共享它的服务器实现代码。

    这里外,如果开始考虑客户端可以发送几个 blob ( 比如面向 Clojure,一个用于 Clojurescript ),那么它允许客户端独立于端点的性质。

    用法

    如果你是一个简单的用户,你不需要关心 unrepl,甚至不需要将它添加到你的项目中。 只需使用现有客户机之一:

    如果你想开发一个客户或者理解更好的事情发生在后面,然后尝试:

    
    
    
    
    git clone https://github.com/Unrepl/unrepl.git
    
    
    cd unrepl
    
    
    # start a plain repl (non unrepl, non nrepl), so if you are in a lein project:
    
    
    java -cp `lein classpath` -Dclojure.server.repl="{:port 5555,:accept clojure.core.server/repl,:server-daemon false}" clojure.main -e nil &
    
    
    # generate the blob
    
    
    clj -m unrepl/make-blob
    
    
    # connect, upgrade and enjoy!
    
    
    rlwrap cat resources/unrepl/blob.clj - | nc localhost 5555
    
    
    
    

    背景

    设想一个非常灵活的协议,你可以将它的升级到任何你想要的。

    该协议存在,它是一个替换。 标准 repl ( clojure.main 或者套接字替换) 不是完美的工具,但它提供了一个共同的最小地: 字符的输入和输出流。 这两个都可以被劫持来安装你自己的处理程序,包括另一个更适合它的客户机的REPL。

    REPL: 最终内容协商协议 !

    当前存储库建议 machine-to-machine REPLs的表示,并提供参考实现。

    从本质上讲,REPL是一个非常有序的过程: 它读取然后evals然后打印然后重新开始。 一个 REPL = 一个线程。 并发是通过几个REPLs实现的。

    它也是有状态的,它是一个连接的协议,因这里不需要经常传输上下文。

    REPL是用来评估代码的。

    一些工具需要( 比如。自动补全) 更好地服务于一个单独的连接,这不应该是一个更新( 可以能已经升级到它的他内容)。

    这里规范的部分假定两个 REPLs: 主( 或者用户) REPL和控件( 或者客户端) 替换。


    COM  rep  COMM  repl  Clojure  clojure-repl  
    相关文章