summaryrefslogtreecommitdiff
path: root/rust/README.md
blob: 7ea2db6e70c6d95fcc99c846091d399608c5bbf9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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.