Every time I look at Ada I find some cool little features I forgot about:

- Representation clauses that let you separately specify the layout of record types
- Requiring `aliased` on record fields for them to be individually addressable
- Variant records whose tag is immutable
- Variant records whose allocation size is variable and dependent on a parameter, sort of like C flexible array members but supporting multiple arrays (and of course differing between variants).
- Ragged arrays with non-uniform dimensions

It really is an alternate PL history branching off from Algol-68.

@zwarich Have you looked at the newer ownership/borrowing features in SPARK?
@pervognsen I haven’t seen good docs for them. It was my understanding that at the beginning they were just adding better checking (both static and dynamic) for the Ada accessibility rules than prior toolchains, but I heard that more recently they’ve done things that are more Rust-inspired. If you have a good link I’d love to take a look.
5.9. Pointer Support, Ownership, and Dynamic Memory Management — SPARK User's Guide 27.0w

@pervognsen Thanks for the link! I'm surprised this didn't come up in my Google search.

This system (combined with Ada's more classical Algol feel) reminds me of Reynolds' Syntactic Control of Interference. They even distinguish between the "borrow" mode (which is `&mut` in the Rust parlance) and the "observe" mode (which is `&`), with the latter sounding similar to Reynolds' "passive" mode.

One thing I was almost expecting by the end was support for unrestricted mutability within storage pools using pool-specific access types, but I can see how this might not really be a fit for their target audience.