summaryrefslogtreecommitdiff
path: root/rust/README.md
diff options
context:
space:
mode:
Diffstat (limited to 'rust/README.md')
-rw-r--r--rust/README.md21
1 files changed, 21 insertions, 0 deletions
diff --git a/rust/README.md b/rust/README.md
new file mode 100644
index 0000000..7ea2db6
--- /dev/null
+++ b/rust/README.md
@@ -0,0 +1,21 @@
+# Rust λ-calcul reference implementation
+
+This directory contains a reference implementation of a normal order semantics λ-calculus based language.
+Current syntax is based on S-expressions, ie. Lisp. There is a command-line interpreter for batch and interactive evaluation of input, and an embryonic tester daemon.
+
+# Tester
+
+**NOTE**: This is a work-in-progress, current tester is only capable of running program locally through a forked process
+
+The tester daemon is inspired by [Extreme Startup](https://github.com/rchatley/extreme_startup): It's a REST-ish server and client that allows to repeatedly send λ-terms to a remote execution engine and compare the result against its expectations.
+
+The interaction flow is simple:
+
+* The server listens on a well-known port
+* A client connects to this port and requests a test session (`POST /register`), giving a URL to callback,
+* The server returns an identification token, to passed to and from the client in subsequent calls,
+* Then the server repeatedly sends requests to the client (`POST /eval`) whose body is a S-expr representing a λ-term, and it expects an evaluation result.
+ * Note the evaluation can return error if the term is syntactically malformed
+ * The server waits at most 60 seconds for the answer
+* If the client fails to answer, or answers wrongly, the server keeps sending the same request
+* If the client's answer is correct, the server sends another term, more complex, to evaluate.