The trio the author decided on 2026-09-20 is now all built: def is CL's defparameter — its initialiser runs on every daemon re-run, unguarded, so an edited initialiser repaints the same storage on C-c C-c plus re-run — defonce (Clojure's name for CL's defvar, per the author) initialises once behind the .init~once. flag, and defconst stays the image. One parse arm reads both forms; the difference is Ast.reinit, carried to Tast.global's grerun. Emit.startup_plan gives a def no guard flag, and Check.check_global lifts every def initialiser — zero and literal included — into global/<n>, so the host's startup reaches it through the function cell and a re-evaluated def swaps it (Session's def_inits; Emit.redefinition declares the cell for a non-sibling target). The old defvar spelling is refused with the rename and both compiling spellings, and every program, test, doc and editor list is swept — except sand.flan, the author's live WIP, whose seven defvar lines are flagged in FIX.org and keep its three dependent tests red on this branch.
43 lines
1.7 KiB
Plaintext
43 lines
1.7 KiB
Plaintext
;;;; A program that does call (agent/start ...) — but only after something
|
|
;;;; slow, which is the shape a real one has.
|
|
;;;;
|
|
;;;; sand.flan opens a window first and starts the agent afterwards, so on a
|
|
;;;; machine where window setup takes a while the socket appears seconds into
|
|
;;;; the run. [merged_serve] used to wait up to ten seconds for that socket
|
|
;;;; *before* starting its accept loop, so those seconds were charged to the
|
|
;;;; first thing the editor asked, every session. This fixture is that delay
|
|
;;;; with the window taken out: a sleep, then the agent, then an ordinary
|
|
;;;; poll loop.
|
|
;;;;
|
|
;;;; Two claims are checked against it in test_dev.ml: the session answers
|
|
;;;; while the sleep is still running, and a redefinition sent during the
|
|
;;;; sleep is installed once the program is up.
|
|
;;;;
|
|
;;;; The socket is no longer late, only the call is. The package's constructor
|
|
;;;; binds it before main when a daemon has said where, so the start below
|
|
;;;; arrives at an agent that is already listening and is a no-op answering the
|
|
;;;; same socket — which is what makes this fixture the double-start case under
|
|
;;;; a real daemon as well.
|
|
(import agent "vendor:agent")
|
|
|
|
(defonce frames i64)
|
|
|
|
(defn step [] i64 7)
|
|
|
|
(defn tick [] i64
|
|
(set frames (+ frames 1))
|
|
frames)
|
|
|
|
(defn main [] i32
|
|
;; Long enough for a test to connect, ask something and evaluate inside it,
|
|
;; and short enough that the rest of the test is not waiting on it.
|
|
(sleep-seconds 3.0)
|
|
(agent/start "/tmp/flan-dev-lateagent-fallback.sock")
|
|
;; dev-chatty.flan's count, for its reason: the test ends the session when
|
|
;; it is done, and a program that ran out of frames first would fail for
|
|
;; the wrong reason.
|
|
(dotimes [i 24000]
|
|
(tick)
|
|
(agent/wait 1))
|
|
0)
|