Menu
Learn
Overview 50 Dimensions Tutorial Snippets vs Other Languages
Build
Editor Playground Compiler API
Docs
Language Spec Formats u keyword Dataframe AI Library Feature Status Packages What's Implemented
Platform
Server About Transpilation Web & Templates
Safebox
Why U Analysis Engine Comparison Possibilities

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.

44right 5debatable 0wrong out of 50 dimensions
Safety defaults
1
Null safety RIGHT
-N default, +N opt-in. Non-null unless you ask.
Kotlin, Swift, Rust all retrofitted this. U has it from day one.
2
Mutability RIGHT
-M default. Everything read-only unless you ask for +M.
Rust's let vs let mut proved this works. U goes further — immutability propagates through references.
3
Heap allocation RIGHT
-R default (stack), +R opt-in (heap with ARC).
Most values don't need the heap. Making heap explicit is the right default.
4
Garbage collection RIGHT
None. ARC + compile-time cycle prevention.
No GC pauses, deterministic deallocation. Swift chose ARC too but needs a runtime cycle collector.
5
Cycle prevention RIGHT
Compile-time via Tarjan's SCC. +R(parent) for weak edges.
Novel. Rust uses runtime Weak<T>. U makes cycles a compile error.
6
Error handling RIGHT
! in signature, x postfix handler. No try/catch.
Java's checked exceptions were verbose. Rust's Result<T,E> works but ? swallows types. U's x is typed per-error.
7
Silent error swallowing RIGHT
Impossible. No catch(Exception e) {}.
Every error must be handled, propagated, or fallback'd.
8
Boolean coercion RIGHT
No truthy/falsy. L is true or false.
Every language has different truthiness for 0, "", []. U requires an explicit boolean.
Type system
9
Effect tracking RIGHT
±E in the signature. One character.
Haskell proved effects matter. Koka proved they can be tracked. U skips the monadic wrapper.
10
Determinism tracking RIGHT
±D independent from ±E.
No other mainstream language separates "has side effects" from "is nondeterministic."
11
Capability tracking RIGHT
+IO, +Net, +DB, +Crypto, +Exec, +Unsafe.
Pony and E did this academically. U makes it practical — propagates through call chains.
12
Declared over inferred RIGHT
Annotations are declarations of intent, not noise for the compiler to infer away.
The paper's core insight. Inference recovers what the code is; declaration records what the author meant.
13
Generics RIGHT
Type parameters, monomorphized (like Rust, not Java's erasure).
No runtime cost. No type erasure surprises.
14
Modifier composition RIGHT
a f = async, z f = compile-time, u f = AI-managed. Composable prefixes.
One system instead of new keywords for each feature.
Memory and concurrency
15
Memory model RIGHT
Four-tier: stack → nursery → slab → arena.
Right allocation for each lifetime. Slab allocator with hierarchical bitmask is O(1).
16
Copy semantics RIGHT
c explicit shallow (stops at +R), c! force deep.
Python's implicit sharing, JS's spread, C++'s implicit copy ctors — all bugs. U makes every copy visible.
17
Concurrency RIGHT
MVCC via <<. No locks, no deadlocks.
PostgreSQL proved MVCC works. Clojure's STM proved it works in a language. U makes it a primitive.
18
Async model RIGHT
No coloring. a prefix, frame-struct state machines.
Go proved no-coloring works. Rust proved state machines work. U combines both.
19
Async portability RIGHT
Heap-allocated frames, not segmented stacks.
Works on WASM. No ISA-specific code. Go's goroutines need stack copying.
20
Closures RIGHT
Lambdas with =>. Capture governed by the modifier system.
+R captures survive scope, -R are stack-local. No [weak self] or move.
Security
21
Injection prevention RIGHT
Template tags — SQL`...`, HTML`...`. Raw S is a type error.
Type-level, not runtime filtering. Eliminates OWASP Top 10 #1 structurally.
22
Package signing RIGHT
M-of-N from day one. Not bolted on later.
npm's "whoever has the token" is broken. M-of-N means a single compromised maintainer can't push malware.
23
Capability auditing RIGHT
Manifest trail + version diffing. u audit.
A JSON parser adding +Net in a patch release is machine-detectable. No other package manager does this.
24
JIT plugin sandbox RIGHT
o() with capability grants. Type-checked before execution.
LLM-generated plugins verified before a single line runs. Not a runtime filter.
25
Compiler as red team RIGHT
Structural bugs are compile errors, not warnings.
Warnings get ignored. Errors get fixed. Null, injection, races, capability leaks — all errors.
AI integration
26
AI-managed functions RIGHT
u keyword in the grammar. Contract fingerprinting.
No other language puts the human/AI boundary in the syntax.
27
LLM learnability RIGHT
1,600-token primer. 96% compile rate from Claude Sonnet.
13 keywords means the entire language fits in 0.8% of context. No fine-tuning needed.
28
Dual audience RIGHT
Designed for humans AND LLMs simultaneously.
The thesis. Declared annotations serve both audiences — readable by humans, parseable by machines.
29
Compile-time evaluation RIGHT
z f for compile-time functions.
Like Zig's comptime. Template tag validators, schema checks, regex compilation — all at build time.
Syntax and ergonomics
30
Keyword count DEBATABLE
13 single-letter keywords: f d r c e a o t z u w x none.
Tiny grammar = LLMs learn it instantly. But opaque to newcomers reading code for the first hour.
31
Return keyword DEBATABLE
r => instead of return.
Avoids Rust's "accidental last expression" problem. But r => saves only 2 characters over return.
32
1-indexed arrays DEBATABLE
Arrays start at 1, not 0.
Lua and Julia do this. Eliminates off-by-one in human reasoning. But 0-indexed is universal muscle memory.
33
Variable naming DEBATABLE
2+ character minimum. Single letters reserved for keywords.
Prevents collision with f, d, r, etc. But banning i, x, n is annoying for math code.
34
Inheritance DEBATABLE
Single inheritance, d Child : Parent.
Composition over inheritance is the modern consensus. U supports it but doesn't push it. Trait-only (Rust) might have been bolder.
35
Indentation-based blocks RIGHT
Yes, like Python. No braces.
Forces consistent formatting. No brace wars. Python proved it works at scale.
36
Semicolons RIGHT
None.
Go, Python, Kotlin, Swift all dropped them.
37
String model RIGHT
"..." literal, `...` template, 'A' byte.
Clean separation. No "is this interpolated?" ambiguity. Template tags extend naturally.
38
Interpolation RIGHT
{{expr}} in templates.
Double-brace avoids conflict with JS template literals. \{{ escapes cleanly.
39
String type RIGHT
S is immutable UTF-8.
Immutable strings eliminate aliasing bugs. UTF-8 is the winner, not UTF-16 (Java, JS, C#).
40
Pattern matching RIGHT
.on() unifies iteration, matching, and dispatch.
One mechanism instead of three. Exhaustiveness checked. No forgotten cases.
41
Iteration RIGHT
.on(), .map(), .filter(), .reduce(). No for i loop.
No index variable to get wrong. Off-by-one is structurally impossible.
42
Operator overloading RIGHT
None (except << for MVCC).
C++ proved operator overloading is a readability trap. a + b should always mean addition.
43
Scope rules RIGHT
Lexical, block-scoped.
No hoisting (JS), no surprising scope leaks (Python for-loop variables).
Tooling and ecosystem
44
Compile target: C RIGHT
Compiles to portable C. GCC/Clang produce the binary.
C runs everywhere. No runtime dependency. The generated binary is self-contained.
45
WASM target RIGHT
WAT emission for web, edge, and plugin sandboxing.
Essential for JIT-loaded plugins in Safebox.
46
Exact rationals RIGHT
Q type. 0.1 + 0.2 == 0.3 is true.
Financial code, crypto, scientific computing. The boundary at transcendentals is mathematically honest.
47
SIMD RIGHT
+V modifier, auto-vectorize through .map().
The same code that's safe is fast. No separate SIMD intrinsics.
48
Build system RIGHT
u build / u run / u test built in.
Go proved a built-in build system works. No Makefiles, no CMake, no webpack.
49
Transpiler support RIGHT
PHP, JS, Python → U with V3 source maps.
Adoption path for existing codebases. Analyze 389K lines without rewriting.
50
Privacy/visibility RIGHT
Module boundaries are the visibility boundary. No public/private keywords.
Simpler. Go makes the same call. Large codebases may eventually want field-level visibility.

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.