the previous excellent discussion on wrapping emacs seemed to bring up
an interesting topic.
What would be the right messaging architecture to passing information
between components of an IDE?
Something which has impressed me recently is Humanized's Enso. (
become indispensible to me in Windows.
I noticed that you write new services for it as XML-RPC servers and
they provide a simple Python example which is easy to get running. I'm
now thinking of putting a couple of my own Python programs behind an
Enso front-end, which effectively means making them XML-RPC servers.
So my question is, is this too loosely coupled an architecture for a
pluggable IDE? Is it too heavy? Is it still likely to be too heavy in
a couple of years time?
Really it's a question of in-process, out-of-process, synchronous, or
asynchronous. Using Enso, it seems like the idea is to build
everything out-of-process synchronous (xml-rpc is typically
implemented as a call/return semantic, not a fire/forget/callback
semantic). I'm personally a fan if in-process/synchronous for the
vast majority of operations. It keeps things predictable. Allowing
out-of-process does allow for alternate implementations of parsers,
plugins, etc., but it's not something that I personally would want.
Having async calls can be convenient (I use them myself), but
typically usage is rare, so it may not be a big deal.
thanks , I like the classification of in-process / out-process and
synchronous / asynchronous
One thing that occurs to me is that "in-process" must imply "in the
same language" or at least on the same virtual machine? Or can Python
call elisp within a wrapped Emacs in this way?
I suppose one things that attracted me to the out-process XML-RPC
approach was that I could understand exactly how it worked. I get the
idea of a server listening on a port. Whereas some of the other
wrapping / message passing technologies I can't quite intuitively
imagine how they work; and I worry that they may be more hostage to
the specifics of the operating system. Can these wrappers work
unchanged on Windows, Linux and Mac for example?