Crate monument

source ·
Expand description

Monument is a fast and embeddable composing engine for change ringing.

This crate aims to provide a convenient API for embedding Monument’s core engine into larger pieces of software. Monument also has a command-line interface, provided by a separate crate monument_cli which reads queries from TOML files, passes them to this library and prints the resulting compositions to the console.

Description

Monument is a composing engine. This means it is designed to run Searches to find Compositions which satisfy some set of constraints (length, methods/calls used, etc.). One can also describe what features make a Composition ‘good’ and Monument will attempt to maximise them.

Unlike other composition generators such as SMC, Monument does not attempt to exhaustively search the space of possible compositions. Instead, it aims to generate very good compositions as quickly as possible, but making no guarantee that they will be optimal. This trade-off works well: for common searches, Monument is orders of magnitude faster than SMC at producing compositions that you might want to ring. Anyway, most interesting search spaces can’t be exhausted in the time left in the universe, so waiting a few minutes for very good (but maybe not optimal) compositions seems like a very good deal.

Composing in general is so hard (NP-hard, in fact) that it’s impossible to have an engine that is both consistently fast and guarantees optimality. Thus, any promise of speed is a best-effort not a guarantee, and there will always be searches which are too complex for Monument to handle. Such must be true of any engine.

Status

This library is roughly in alpha stage of readiness. Most pieces are working, but there are a few major points that need addressing before Monument can be embedded in other projects without major pain:

  1. The API is very much work-in-progress. The critical issue here is that this library currently has only one consumer (the CLI) and therefore its API has been heavily bent by the needs of a CLI. Before I’m happy to let others use this library, I need to try embedding it so I can get a proper feel for what the library feels like to use.

Re-exports

pub use builder::SearchBuilder;

Modules

Builder API for constructing Searches.

Structs

A Composition generated by Monument.
Configuration options for a Search.
How much of a Search has been completed so far.
Handle to a search being run by Monument.

Enums

The different ways that Monument can fail.
Update message from an in-progress Search.

Type Definitions

Alias for Result<T, monument::Error>.