| .. | ||
| apps | ||
| languages | ||
| libraries | ||
| multifile | ||
| polyglot | ||
| README.md | ||
calog example scripts
Small, runnable programs for the calog command-line runner (bin/calog). Each one is
verified to run against the built binary. They double as a tour of the engines and the
built-in libraries.
Running
make # builds bin/calog (among others)
bin/calog examples/scripts/languages/lua.lua # run by extension
bin/calog examples/scripts/apps/uuidGen # no extension -> searches .lua/.js/.nut/.bas/.be/.scm/.wren
bin/calog examples/scripts/multifile/producer.js \
examples/scripts/multifile/consumer.lua # several files share one runtime
Conventions every example follows:
calogPrint(...)writes to stdout (calog-prefixed so it never clashes with an engine's ownprint/keyword; on Wren it isCalog.call("calogPrint", [...])).calogExit([code])ends the run. calog is event-driven -- a script's top level finishing does not exit the process (it may still have timers/subscriptions live), so a script asks to exit explicitly.Ctrl-Calso tears things down cleanly.- Extensions map to engines:
.lua .js .nut .bas .be .scm .wren.
languages/ -- one guided tour per engine
| file | shows |
|---|---|
lua.lua |
Lua 5.4: locals, a function, a numeric for building a table, then crypto + json natives |
javascript.js |
JavaScript (QuickJS, ES2023): const/let, arrow fns, Array.map/filter, template literals, JSON round-trip |
squirrel.nut |
Squirrel: locals, a function, foreach over an array, a table, a small class |
mybasic.bas |
my-basic: variables, a FOR..NEXT sum, IF..THEN..ELSE, plus crypto + kv |
berry.be |
Berry (Python-like): a def, a list built with a for, a map, then json + uuid |
scheme.scm |
s7 Scheme: a recursive factorial, list build + map, string ops (all in one (begin ...)) |
wren.wren |
Wren: a class, a List, and every native reached via Calog.call(name, [args]) |
libraries/ -- one focused example per built-in library
| file | library / shows |
|---|---|
crypto.lua |
crypto: SHA-256/SHA-1, HMAC, base64 + hex round-trips, UUID, random bytes |
cryptoInJs.js |
crypto from JavaScript |
json.lua |
json: parse a nested doc, read fields, stringify a table |
jsonInBerry.be |
json from Berry |
kv.lua |
kv store: set / get / has / keys / delete |
kvInScheme.scm |
kv from s7 Scheme |
fs.lua |
fs: mkdir/write/append/read/stat/list/remove, all in a unique /tmp dir |
time.lua |
time: timeNow, and measuring a timeSleep with timeMonotonic |
timer.lua |
timer (Lua callbacks): a timerAfter one-shot + a self-cancelling timerEvery |
timerInMyBasic.bas |
timer callbacks in my-basic -- the our-basic fork makes def/lambda first-class |
database.lua |
db: an in-memory SQLite table, bound-parameter inserts, a query + an aggregate |
export.lua |
export: publish a function, call it by name (and, on Lua, by bare name) |
pubsub.lua |
pubsub: two handlers subscribe, publish delivers to both, then unsubscribe |
task.lua |
task: taskSelf, spawn a sibling child, taskCount |
net.lua |
net: a UDP echo over loopback between a spawned listener and a sender |
http.lua |
http: self-contained -- a spawned child runs a one-shot HTTP/1.1 server, then httpGets it |
ssh.lua |
ssh/sftp: a documented, safe-to-run template (prints guidance if no server is configured) |
polyglot/ -- several languages sharing one runtime
| file | shows |
|---|---|
exportAcrossEngines.lua |
Lua exports a function; a spawned JavaScript task calls it |
pubsubAcrossEngines.lua |
Lua subscribes to a topic; a spawned JavaScript task publishes to it |
sharedKv.lua |
Lua seeds the shared kv store; a spawned JavaScript task reads it back and mutates it |
taskFanout.lua |
one Lua script spawns a task on five different engines, each printing in its own language |
multifile/ -- multiple script files in one run
Files listed on the calog command line run concurrently in one process and share the
same runtime (kv store, pubsub bus, exports). One calogExit() from any file ends the run.
bin/calog examples/scripts/multifile/producer.js examples/scripts/multifile/consumer.lua
| file | role |
|---|---|
producer.js |
(JavaScript) writes shared data to kv, then signals "ready" on the pubsub bus after a short delay |
consumer.lua |
(Lua) subscribes to "ready", and on the signal reads the shared kv data, prints it, and exits |
apps/ -- tiny end-to-end tools
| file | shows |
|---|---|
uuidGen.lua |
print five random UUIDs |
hashText.lua |
write text to a temp file, read it back, print its SHA-256/SHA-1/length, clean up |
wordCount.js |
word-count a paragraph (totals, uniques, top frequencies), emit the summary as JSON |