Skip to content

Language Explorer

Quantitative comparison of programming languages — measured from real code, not opinions.

Zig vs RustTwo modern takes on systems programming. Different tradeoffs.
Zig
ZigZig — Types: 12Zig — Control: 10Zig — Functions: 6Zig — OOP/Data: 5Zig — Memory: 15Zig — Concurrency: 5Zig — Metaprog: 5Zig — Errors: 7TypesControlFunctionsOOP/DataMemoryConcurrencyMetaprogErrors
Rust
RustRust — Types: 22Rust — Control: 12Rust — Functions: 12Rust — OOP/Data: 12Rust — Memory: 22Rust — Concurrency: 10Rust — Metaprog: 10Rust — Errors: 10TypesControlFunctionsOOP/DataMemoryConcurrencyMetaprogErrors
Zig Rust
Zig bets on simplicity — comptime, no hidden allocators, 65 concepts. Rust bets on safety — ownership, lifetimes, borrow checker, 110 concepts. Same polygon axes, radically different shapes.
ZigRust
Concepts to Learn
65
110
Keywords
49
58
Verbosity
1055
370
Ceremony
20%
30%
Safety
3.3 / 5
4.8 / 5
compile-timeruntimenone
Zig3.3 / 5
MemoryNullRaceOverflowCoercion
Rust4.8 / 5
MemoryNullRaceOverflowCoercion

Expressiveness

How concise is the code? Averaged across 7 benchmark problems.

Language Lines Verbosity Ceremony
Clojure81820
Erlang122570
Objective-C143200.2
Ruby14.32060.2
Python14.62280.1
JavaScript15.72930.2
TypeScript15.93200.2
C#162910.4
Elixir17.42620.1
Kotlin19.73010.3
Haskell21.96610.2
Swift22.34360.3
Rust22.63700.3
Go26.64450.3
Java26.64780.4
Milo26.95930.3
C++27.95280.3
C39.79510.3
Zig39.910550.2

Full metrics on the Compare page. Methodology →

TypeScript vs JavaScript — Types added — 100 vs 65 concepts, but stronger safety
TypeScript
TypeScriptTypeScript — Types: 22TypeScript — Control: 10TypeScript — Functions: 12TypeScript — OOP/Data: 14TypeScript — Memory: 2TypeScript — Concurrency: 10TypeScript — Metaprog: 14TypeScript — Errors: 16TypesControlFunctionsOOP/DataMemoryConcurrencyMetaprogErrors
JavaScript
JavaScriptJavaScript — Types: 6JavaScript — Control: 8JavaScript — Functions: 12JavaScript — OOP/Data: 10JavaScript — Memory: 2JavaScript — Concurrency: 10JavaScript — Metaprog: 10JavaScript — Errors: 7TypesControlFunctionsOOP/DataMemoryConcurrencyMetaprogErrors
TypeScript JavaScript
compile-timeruntimenone
TypeScript3.3 / 5
MemoryNullRaceOverflowCoercion
JavaScript2.3 / 5
MemoryNullRaceOverflowCoercion
Python vs Haskell — Same total concepts (75), opposite shapes
Python
PythonPython — Types: 8Python — Control: 10Python — Functions: 10Python — OOP/Data: 18Python — Memory: 2Python — Concurrency: 10Python — Metaprog: 12Python — Errors: 5TypesControlFunctionsOOP/DataMemoryConcurrencyMetaprogErrors
Haskell
HaskellHaskell — Types: 22Haskell — Control: 8Haskell — Functions: 15Haskell — OOP/Data: 3Haskell — Memory: 2Haskell — Concurrency: 8Haskell — Metaprog: 5Haskell — Errors: 12TypesControlFunctionsOOP/DataMemoryConcurrencyMetaprogErrors
Python Haskell
compile-timeruntimenone
Python3.8 / 5
MemoryNullRaceOverflowCoercion
Haskell4.8 / 5
MemoryNullRaceOverflowCoercion
Rust vs Go — Systems safety vs simplicity
Rust
RustRust — Types: 22Rust — Control: 12Rust — Functions: 12Rust — OOP/Data: 12Rust — Memory: 22Rust — Concurrency: 10Rust — Metaprog: 10Rust — Errors: 10TypesControlFunctionsOOP/DataMemoryConcurrencyMetaprogErrors
Go
GoGo — Types: 10Go — Control: 8Go — Functions: 6Go — OOP/Data: 8Go — Memory: 5Go — Concurrency: 10Go — Metaprog: 3Go — Errors: 8TypesControlFunctionsOOP/DataMemoryConcurrencyMetaprogErrors
Rust Go
compile-timeruntimenone
Rust4.8 / 5
MemoryNullRaceOverflowCoercion
Go3.5 / 5
MemoryNullRaceOverflowCoercion
C vs Zig — C successor — similar size (60 vs 65), more safety
C
CC — Types: 12C — Control: 8C — Functions: 6C — OOP/Data: 4C — Memory: 15C — Concurrency: 5C — Metaprog: 6C — Errors: 4TypesControlFunctionsOOP/DataMemoryConcurrencyMetaprogErrors
Zig
ZigZig — Types: 12Zig — Control: 10Zig — Functions: 6Zig — OOP/Data: 5Zig — Memory: 15Zig — Concurrency: 5Zig — Metaprog: 5Zig — Errors: 7TypesControlFunctionsOOP/DataMemoryConcurrencyMetaprogErrors
C Zig
compile-timeruntimenone
C0 / 5
MemoryNullRaceOverflowCoercion
Zig3.3 / 5
MemoryNullRaceOverflowCoercion