Dispatches
Ideas, design notes, specs in progress, implementation stories and the occasional opinion, written by the people building Bondy while we build it.
The manifest is a module
A Bondy project describes itself in BCL, a configuration language with the same types as Bondy. The manifest of each application compiles to a module, so its code, its dependents and its releases all read one configuration type.
The alarm that cleared itself
A derived boolean clears itself the moment the reading dips. A flag fixes that and loses when and why. Fluents and signals keep both, and they are the part of Bondy that is designed but not yet built.
What a function is allowed to do
An Erlang -spec says what a function takes and returns, and nothing about whether it writes a file, sends a message or reads the clock. Bondy's compiler works that out, keeps it in the function's type, and checks it wherever it matters.
Ask questions of your data
The recursive traversal you hand-roll loops on cycles, and fixing it takes a visited set and an accumulator. As a relation it is two lines, it terminates without a visited set, and the compiler rejects the version that could not.
The process that owns the store
A rule store has to live somewhere, and on the BEAM that somewhere is a process. GenReactor is a supervised process whose state is a store and whose logic is rules, and the event is how it tells the world what happened.
Rules that fire themselves
The state machine in your handle_call is one rule spread over a message shape, a lookup, a guard, a map update and a reply tuple. Written as a rule, it is four lines, and the engine decides when it runs.
The type that validates
In Bondy a shape says which values are allowed and which are required. Unification checks data against it, at compile time when it can and at runtime when it must. You stop writing data validators by hand.
One noun, more roles
Rich Hickey is right that complecting is the disease. But a map can play one role, datum. Bondy lets one typed value be held, imposed, emitted or latched, each role with its own verbs.
Bondy as Consilience
Bondy began as a distributed application networking (DAN) platform, but that was only one piece of the puzzle. The ultimate goal was always the coming together of ideas into a single, coherent language and platform.