Very nice article. I'll be interested to hear where you end up, with eglot or lsp-mode.
A quibble (based on my knowledge of Common Lisp, I'm not sure if it applies exactly the same way to Clojure):
"Language server has to do all of that statically, using their own parsers, tracking of variables, modules, and so on."
There's no reason an LSP server can't be run inside the Lisp image and integrate with its internal xref data. In fact, to do it any other way has serious problems due to Lisp's procedural macros making static analysis impossible.
Taking a quick look around, I see this is how the alive-lsp server works. You load it into your image and run (alive/server::start :port 8006)
It seems like this would address some of your complaints about the lack of fallback when looking for xrefs, because fallback wouldn't be necessary.
You can't bootstrap OpenDylan from source without a Dylan compiler. You can bootstrap Gwydion without one with substantial elbow work, which you can then pivot into bootstrapping OpenDylan.
I know what I was doing, and if you look elsewhere in the thread, I was right about what the GUIX maintainer wanted. Not to get egg on your face.
I, for one, welcome my whitespace-surrounded operator overlords, but if you really don't want that you're welcome to use function-call syntax for them.
Sure, and the efforts for OpenDylan should be appreciated, however I think its opportunity has been lost and what remains are the ideas on how to do a proper Algol like Lisp.
Possible! When I restart the server there are instantly hundreds of connections. If so many people are interested in Dylan, let's get some code contributions going, folks. :)
Should be back up. I have a bug in the http server, which is also written in Dylan and hasn't been battle hardened, where it sometimes fails to close connections.
@cgay be great to see this integrated with the OpenDylan homepage (interactive examples) and a nice blog write up on how it works on the news/articles section. Very cool.
Thanks, that's the plan, although I hadn't thought about writing it up. :) It's pretty simple, really, but it has definitely highlighted the fact that there's a lot of work to do on the http server. I'm trying to decide whether to push forward with that or "just" provide Dylan integration with an existing web server framework, or maybe port Hunchentoot to Dylan with https://github.com/dylan-lang/lisp-to-dylan
The Dylan language spec has amazingly few edge cases. It allows a continuum of dynamic -> static typing and a range of functional <-> OO. With the right set of libraries it could be great in the scripting space as Python, but is also designed for building large systems that run fast.
A quibble (based on my knowledge of Common Lisp, I'm not sure if it applies exactly the same way to Clojure):
"Language server has to do all of that statically, using their own parsers, tracking of variables, modules, and so on."
There's no reason an LSP server can't be run inside the Lisp image and integrate with its internal xref data. In fact, to do it any other way has serious problems due to Lisp's procedural macros making static analysis impossible.
Taking a quick look around, I see this is how the alive-lsp server works. You load it into your image and run (alive/server::start :port 8006)
It seems like this would address some of your complaints about the lack of fallback when looking for xrefs, because fallback wouldn't be necessary.