summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--HACKING26
1 files changed, 26 insertions, 0 deletions
diff --git a/HACKING b/HACKING
new file mode 100644
index 0000000..e357fd3
--- /dev/null
+++ b/HACKING
@@ -0,0 +1,26 @@
+## How to support a new Scheme implementation
+
+Geiser works by running an instance of a REPL, or remotely connecting
+to one, and evaluating the scheme code it sees there. Then, everytime
+it needs to perform some operation (like, say, printing autodoc,
+jumping to a source location or expanding a macro), it asks the
+running scheme instance for that information.
+
+So supporting a new scheme usually means writing a small scheme
+library that provides that information on demand, and then some
+standard elisp functions that invoke the procedures in that
+library.
+
+To see what elisp functions one needs to implement, just execute the
+command `M-x geiser-implementation-help` inside emacs with a recent
+version of geiser installed. And then take a look at, say,
+geiser-guile.el or geiser-racket.el for examples of how those
+functions are implemented for concrete schemes (those are the most
+featureful implementations we have, so perhaps it's easier to begin
+with something like geiser-chicken.el or geiser-chibi.el).
+
+Not all schemes can provide introspective information to implement all
+the functionality that geiser tries to offer. That is okay: you can
+leave as many functions unimplemented as you see fit (there is even an
+explicit list of unsupported features), and geiser will still know how
+to use the ones that are implemented.