Asyncronous Extensible Reliable Sleek RPC Server for Guile
README: Update disclaimer and FAQ
README: Update description and development info
README: Update



You can also use your local clone with git send-email.

1. Introduction

Asynchronous Reliable Extensible Sleek RPC Server for Guile. It's based on nREPL protocol and can be used for programmable interactions with a running guile processes, for implementing REPLs, IDEs, test runners or other tools.

WARNING: It's in early stage of development, the API is a subject to change.

guile-ares-rs was previously known as guile-nrepl (because it started as just nREPL implementation in Guile Scheme). It was renamed to avoid any confusion with network/socket REPL, guile-ares-rs is not a usual REPL, it's actually not a REPL at all, it's an RPC Server, however it's possible to implement REPL-like experience with it (and respective client).

It's intended for use with Arei IDE, but you can use it with other generic nREPL clients.

2. Usage

The are multiple ways to utilize Ares RS, but most straightforward is to spawn a standalone server and connect to it from a client (Emacs Arei for example):

guix shell guile-next guile-ares-rs -- \
guile -c '((@ (nrepl server) run-nrepl-server) #:port 7888)'

Don't forget to add your project source code and other dependencies to load path.

3. Development

It depends, on fibers, and on guile-next (custom textual ports), tests are executed with gider.

Send patches to rde-devel mailing list in format: [PATCH guile-ares-rs 0/3] SUBJECT-HERE.

Send feedback to rde-discuss.

3.1. First Release Roadmap

  • [X] Implement eval on top of reusable threads.
  • [X] Implement read interception for current-input-port.
  • [X] Implement completion
  • [ ] lookup operations.
  • [ ] Implement extension extension (swap-extension, add-extension).
  • [X] Change Scheme to Sleek in project description.

3.2. Open Questions

  • How to work with fibers in nrepl? Maybe C-2 C-c C-e to entered to the clonned session with fibers spawned.
  • Bootstrap from guile network repl? (Send guile-ares-rs implementation to remote network repl server to make it nrepl).
  • Multiple guile languages support.
  • How to bypass continuation barrier in evaluation thread, when using previously stored continuation.
  • Translation level for shrothanded nrepl base operations?
  • Do we need to support meta-commands? (Probably not, it just functions, which can be exported to user or repl module scope).

4. Other REPLs Quirks

One of the reasons this project started is unfortunate missbehave of current REPL soultions in different situation and here is a list of some of them:

6. FAQ

Q: Can I use guile-ares-rs with an existing network REPL?

A: Theoretically it's possible to upgrade existing REPL to guile-ares-rs, see bootstrap and infect modules (they can be not implemented yet).

7. Acknowledgements

Thanks for inspiration, help, support and motivation to Nikita Domnitskii, Maxime Devos, Andy Wingo, Bozhidar Batsov, Andrey Listopadov, Dmitrii Bogdanov, David Thompson, Dmitry Polyakov.

Author: Alice's brother

Created: 2023-12-05 Tue 10:58