Running and stopping a program
Ordinary top-level setup statements execute in source order while top-level
when statements register event scripts. After setup, the runtime runs the
registered started scripts, arms every one-shot after script, and processes
queued message work cooperatively. A program normally finishes when neither
ready nor sleeping scripts remain, unless persistent key or pointer handlers
keep it waiting for input.
exitApp() finishes the complete program immediately and successfully, even
from a nested function, loop, or event script. Remaining work does not run.
In an IDE or browser preview, exitApp() finishes only the learner program’s
execution session and leaves the preview available for inspection. A native
graphical program that naturally reaches its final statement retains its last
frame until the user closes the window; exitApp() instead requests normal
host shutdown and resource cleanup.
return exits only the current function. IDE Stop is external cooperative
cancellation and is not Pliro syntax.
Positive wait calls and completed input requests are cooperative checkpoints.
They keep Stop and graphical event processing responsive and start a fresh
instruction-budget slice. In an event script, wait parks only the active
script. broadcast queues exactly matching message scripts and yields the
active script so the deterministic FIFO scheduler can continue other ready
work. Put a persistent animation loop in when started(): when other event
handlers need to run during its waits; ordinary top-level setup must finish
before the event-scheduler phase begins.
# language: en
let running = true
while running:
if keyDown("space"):
exitApp()
# Update and draw one frame here.
wait(0.04)
