50 design dimensions
Every language makes calls on dozens of design axes. Here's how U's calls compare to the state of the art — and whether each one is right.
Safety defaults-N default, +N opt-in. Non-null unless you ask.-M default. Everything read-only unless you ask for +M.let vs let mut proved this works. U goes further — immutability propagates through references.-R default (stack), +R opt-in (heap with ARC).+R(parent) for weak edges.Weak<T>. U makes cycles a compile error.! in signature, x postfix handler. No try/catch.Result<T,E> works but ? swallows types. U's x is typed per-error.catch(Exception e) {}.L is true or false.±E in the signature. One character.±D independent from ±E.+IO, +Net, +DB, +Crypto, +Exec, +Unsafe.a f = async, z f = compile-time, u f = AI-managed. Composable prefixes.c explicit shallow (stops at +R), c! force deep.<<. No locks, no deadlocks.a prefix, frame-struct state machines.=>. Capture governed by the modifier system.+R captures survive scope, -R are stack-local. No [weak self] or move.SQL`...`, HTML`...`. Raw S is a type error.u audit.+Net in a patch release is machine-detectable. No other package manager does this.o() with capability grants. Type-checked before execution.u keyword in the grammar. Contract fingerprinting.z f for compile-time functions.comptime. Template tag validators, schema checks, regex compilation — all at build time.f d r c e a o t z u w x none.r => instead of return.r => saves only 2 characters over return.f, d, r, etc. But banning i, x, n is annoying for math code.d Child : Parent."..." literal, `...` template, 'A' byte.{{expr}} in templates.\{{ escapes cleanly.S is immutable UTF-8..on() unifies iteration, matching, and dispatch..on(), .map(), .filter(), .reduce(). No for i loop.<< for MVCC).a + b should always mean addition.Q type. 0.1 + 0.2 == 0.3 is true.+V modifier, auto-vectorize through .map().u build / u run / u test built in.public/private keywords.The pattern
Every "right" call follows the same principle: the safe thing is the default, and you opt in to the dangerous thing with an explicit annotation. -N is the default; +N is opt-in. -R is the default; +R is opt-in. -M is the default; +M is opt-in. -E is the default; +E is opt-in.
The five "debatable" calls are all tradeoffs between internal consistency (single-letter keywords match single-letter modifiers; 1-indexing matches mathematical convention) and external familiarity (developers expect 0-indexed arrays and multi-character keywords). None are design mistakes — they're coherent choices with trade-offs.
The zero "wrong" calls is the interesting part. U's defaults match what every modern language has converged toward, and the novel features — capability tracking, u keyword, MVCC, template tags, M-of-N signing — solve real problems that nothing else in the mainstream addresses.