;;;; What [flan dev] launches: a program with a loop, a function to redefine, ;;;; and a way to stop. ;;;; ;;;; It names no socket. Under [flan dev] the daemon has already decided where ;;;; it wants to talk to this program and says so in FLAN_AGENT_SOCKET โ€” which ;;;; overrode whatever the source named anyway โ€” so the argument was only ever ;;;; a value nothing read. This is the shape a program should be written in, ;;;; and the whole daemon block in test_dev.ml runs against it, so a delivery ;;;; landing there is the zero-argument form working end to end. (import agent "vendor:agent") (defonce ticks i64) ;;; A condition and something that signals it, so that a body typed in later ;;; can establish a handler and transfer past this frame โ€” spec-conditions.md ;;; ยง6. It is here rather than in the evaluated form on purpose: the guard that ;;; forwards the transfer has to be one the *host* was compiled with. (defstruct Missing [id i32]) (defn probe [] i64 (signal (Missing {.id 1})) 0) (defn step [] i64 (set ticks (+ ticks 1)) ticks) (defn main [] i32 (agent/start) (print (step)) (println "") (while (= (agent/wait 100) 0) 0) (print (step)) (println "") (while (= (agent/wait 100) 0) 0) (print (step)) (println "") (while (= (agent/wait 100) 0) 0) (print (step)) (println "") 0)