Released: nREPL 0.2.0-beta1

99 views
Skip to first unread message

Chas Emerick

unread,
Feb 14, 2012, 9:42:32 AM2/14/12
to Clojure, cloju...@googlegroups.com, lein...@googlegroups.com
I have released nREPL 0.2.0-beta1, which should show up in Maven central soon.

For those that don't know, nREPL is "a Clojure network REPL that provides a REPL server and client, along with some common APIs of use to IDEs and other tools that may need to evaluate Clojure code in remote environments":

https://github.com/clojure/tools.nrepl

This release is the result of gathering ideas, feedback, and requirements from dozens of people that need to have a REPL backend in a variety of environments, and want to maximize interoperability of Clojure tooling — much of which inevitably ends up grounding out at running or connecting to a REPL somewhere.

This release marks a thorough breaking change from every aspect the last release of nREPL, 0.0.5. (The rationale for this is detailed in design notes in the project's wiki, for those that haven't followed along.) The result is that a design that settles a number of failings of nREPL's original design, and which provides a number of different vectors of extensibility — similar in many respects to those provided by Ring — that I hope people will take advantage of to build astonishingly cool tools.

Note that pre-release versions of many Clojure tools are already using snapshots of nREPL 0.2.0, including Counterclockwise, Leiningen, and Reply, and as far as I know, more are on their way.

My plans for the near future are to continue to tighten up the documentation, and release an HTTP transport: a Ring handler that exposes nREPL as an HTTP API.

If you have any questions or find some shortcoming, bug, or problem with this release, please reply here or ping me on irc or twitter (`cemerick` in either case).

Happy tooling,

- Chas

Stathis Sideris

unread,
Feb 15, 2012, 8:46:37 AM2/15/12
to Clojure
It sounds great Chas, especially the wide acceptance that nREPL seems
to already have with the various tools.

I wanted to ask about the potential of this as an embedded Clojure
REPL in existing Java applications for the purpose of connecting
remotely and performing inspection (and possibly manipulation?) of the
current state of the application for debugging purposes. Is this a
legitimate use case? How easy do you think it would be to achieve this
with the current version of nREPL?

Thanks!

Stathis

Chas Emerick

unread,
Feb 15, 2012, 10:31:21 AM2/15/12
to clo...@googlegroups.com
You can absolutely run an nREPL server from a mostly-Java application. Something like this would do (just a sketch, untested):

////
private static IFn startServer, stopServer;

static {
try {
RT.var("clojure.core", "require").invoke(Symbol.intern("clojure.tools.nrepl.server"));
startServer = RT.var("clojure.tools.nrepl.server", "start-server");
stopServer = RT.var("clojure.tools.nrepl.server", "stop-server");
} catch (Exception e) {
throw new RuntimeException(e);
}
}

public static Object startServer (int port) {
return startServer.invoke(Keyword.intern("port"), port);
}

public static void stopServer (Object server) {
stopServer.invoke(server);
}
////

There's already a thin Java wrapper for the nREPL client API (https://github.com/clojure/tools.nrepl/blob/master/src/main/java/clojure/tools/nrepl/Connection.java); one for the server side would be good to cover that use case as well.

- Chas

> --
> You received this message because you are subscribed to the Google
> Groups "Clojure" group.
> To post to this group, send email to clo...@googlegroups.com
> Note that posts from new members are moderated - please be patient with your first post.
> To unsubscribe from this group, send email to
> clojure+u...@googlegroups.com
> For more options, visit this group at
> http://groups.google.com/group/clojure?hl=en

Stathis Sideris

unread,
Feb 16, 2012, 4:10:19 AM2/16/12
to Clojure
Apart from going a bit cross-eyed from seeing clojure-as-java code
from the first time, I get it :-)

Thanks Chas, I'll give it a try and let you know how it goes.

Stathis


On Feb 15, 3:31 pm, Chas Emerick <c...@cemerick.com> wrote:
> You can absolutely run an nREPL server from a mostly-Java application.  Something like this would do (just a sketch, untested):
>
> ////
> private static IFn startServer, stopServer;
>
> static {
>   try {
>     RT.var("clojure.core", "require").invoke(Symbol.intern("clojure.tools.nrepl.server"));
>     startServer = RT.var("clojure.tools.nrepl.server", "start-server");
>     stopServer = RT.var("clojure.tools.nrepl.server", "stop-server");
>   } catch (Exception e) {
>       throw new RuntimeException(e);
>   }
>
> }
>
> public static Object startServer (int port) {
>   return startServer.invoke(Keyword.intern("port"), port);
>
> }
>
> public static void stopServer (Object server) {
>   stopServer.invoke(server);}
>
> ////
>
> There's already a thin Java wrapper for the nREPL client API (https://github.com/clojure/tools.nrepl/blob/master/src/main/java/cloj...one for the server side would be good to cover that use case as well.
Reply all
Reply to author
Forward
0 new messages