# Language gaps this page depends on

Some operations on this page rely on parts of the language that other
pages describe: `for` over a set, `[]` as an empty map, inline functions
of two values, maths on `Decimal`, secrets used only as a `crypto` key,
`random`, `locale:` on sorting and case, `text.format` and `text.parse`,
aggregate queries, rules across fields, normalised text, and `Money`. The
[design notes](https://github.com/jadpo-dev/jadpo/blob/main/docs/language/notes/19-standard-library.md#language-gaps-this-page-depends-on)
list each one, the page it lives on and the operations it makes possible.

Some things are left out on purpose. Here is what to use instead:

| Left out | Instead |
|---|---|
| Generic functions in your own code | The standard library stays generic ([Generic code](generic-code.md)) |
| `reduce`, `fold` | `for` with `var mut`; `list.sum` |
| Comparators | `sort_by`, `reverse` |
| `items[i]` | `list.at`, which gives `T?` |
| Regular expressions as calls | `pattern:` and construction ([Constraints](named-types.md#constraints)) |
| Graphemes | Code points |
| Dynamic keys on records | `Map` |
| A dynamic JSON value | `json.read(..., as:)`; `Text` to pass on |
| CSV in memory | `csv.read` through a store |
| MD5, SHA-1 | A package ([External services](external-services.md)) |
| Bitwise operations | `Set<Enum>` |
| Fetching exchange rates | A provider package; `money.convert` applies a rate the app holds |
| Gender, sex at birth | Your app's own type, marked sensitive ([Personal data](personal-data.md)) |
| CMYK and print colour | A package on the standard `Colour` |
| Training models | A package or an outside service |
| Aliases (`size` for `count`) | The table's name |

Why each is left out is in the
[design notes](https://github.com/jadpo-dev/jadpo/blob/main/docs/language/notes/19-standard-library.md#left-out-by-design).

Of the parts of the language these operations rely on, only keys held as
data aren't built yet; see [What is built](standard-library-built.md).
