# Decision records

These records explain the decisions that shape Fastmash and why they were made.
Read the relevant one before proposing a change to what it covers. A decision
can be revisited; do so with a new record that supersedes the old one.

| Record | Decision |
| --- | --- |
| [0001](0001-gnu-command-language.md) | Implement the GNU datamash command language, independently |
| [0002](0002-rust-without-c-numerics.md) | Write everything in Rust, including the numerics |
| [0003](0003-portable-results.md) | Portable results through software arithmetic |
| [0004](0004-refuse-rather-than-guess.md) | Refuse rather than guess |
| [0005](0005-growable-checked-storage.md) | Growable, checked storage instead of fixed limits |
| [0006](0006-supervised-external-sort.md) | Supervise the system `sort` for the remaining sort routes |
| [0007](0007-linux-first.md) | Linux x86-64 first |
| [0008](0008-hash-grouping-with-restart.md) | Group sorted input by hash, and sort again when unsure |
| [0009](0009-built-in-locale-tables.md) | Built-in locale tables, not the host's locales |
| [0010](0010-native-apple-silicon.md) | Native Apple Silicon macOS, verified through hosted commands and installed archives |
