| Did you know ... | Search Documentation: |
| Pack hornguard -- crates/README.md |
`hornguard/` is the Rust client: it spawns a judge worker and returns typed verdicts. It is not a second implementation of the judge.
A Rust port of the judge and reader is deferred, on purpose, and this note says why so the decision can be revisited with the same facts.
The Prolog judge grew: stratification, floundering, policy files, deferred needs, classification. A Rust port must track every rule of it, and the fixture suite makes parity checkable but does not make two implementations cheaper than one. Meanwhile the first two goals turned out to have a cheaper path that needs no second implementation:
swipl process, separate
from the engine that runs authors' code, speaking a line protocol over stdio.
Any host in any language spawns it and gets trusted-position judging. The
same worker can serve a Scryer or Trealla engine: the judge does not have to
run on the engine it protects.
Goals 1, 2 and 4 are now met by the worker, and goal 3 is met for Rust by the
client crate, which speaks the worker protocol. What a Rust core would
uniquely add is judging in-process for a host that cannot spawn a swipl at
all. Nobody has asked for that yet.
hornguard-judge plus a binding.hornguard-reader on tree-sitter-prolog, refusing any tree
with an error node and re-emitting canonical form.
Until one of those arrives, the next portability work is the judge worker and canonical re-emission in the pack, not this directory.