blob: f4bced5b8f7d0423d280a6a7bf637a9492353798 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
# 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
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:
* HTTP server starts on some known port (eg. 8080)
* Client sends a `POST /register` request, passing in as payload a JSON object with a `url` and `name` string fields
```
curl -v -X POST -d '{"url":"http://127.0.0.1:8888/eval", "name": "toto"}' -H 'Content-type: application/json' http://localhost:8080/register
```
* Obviously, client needs to start a HTTP server able to respond to a `GET` request at the given URL
* If URL is not already registered, server accepts the registration (returning a 200 result) and starts a _testing thread_
* The _tester_ then repeatedly sends `POST` requests to the client's registered URL
* The body of the request is plain text S-expression representing a λ-term
* The tester expects the response to be the plain text result of the evaluation of those terms
* 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 to evaluate and awards 1 point to the client
* The `/leaderboard` endpoint provides a crude HTML page listing each clients' current score
## Building
This software is written in Rust (sorry @xvdw), so one needs a Rust toolchain installed, then:
```
cargo build && cargo test
```
## Running
To run the server:
```
cargo run --bin server
```
There are `--port` and `--host` arguments should one want to change the default `127.0.0.1:8080`
# NOTES
* make command line to register more explicit
* `nc -l` is a simple echo server to show what's sent by the server
* keep the readme exposed by the server
* use JSON formatting for request/response
* debug user address on the leaderboard page
* shows status of client (not connected/connected/replying correctly or not)
* add more logs to server to help troubleshoot users access/registration
* THE SERVER MUST NOT CRASH
* cheatsheet λ-calcul exposed on `/help`
* propose to send JSON or S-Exp
* persist user state to avoid losing connections
* ask people to implement something
* prepare starter kit to overcome
* différentes couleurs de pistes (verte/rouge/noire)
* pair programming w/ Manu, people do their own stuff if they want
* ne pas oublier le routeur wifi
|