Side-by-side, interactive cheatsheets for C programmers
comparing C to other languages. Every example runs live in your browser — no
setup, no installation.
Choose your own path by reordering languages
C reimagined for the networked world. Go keeps C's simplicity and compile speed while adding goroutines, garbage collection, and a standard library built for servers and CLIs.
(result, error) pairs; no global state, no setjmp/longjmpWhat C programmers reach for when they want to stop managing memory. Ruby's runtime handles everything C makes you do by hand — strings as objects, arrays that resize themselves, a garbage-collected heap — freeing you to describe the problem instead of the machine that solves it.
.upcase, .split, .gsub built in; no null terminator to trackC's speed and control, with memory safety enforced by the compiler. Rust eliminates use-after-free, buffer overruns, and data races — at compile time, with no garbage collector and no runtime overhead.
Result and Option replace errno, NULL returns, and setjmp — every error path is explicit and the compiler enforces handling itmatch — no fallthrough, no missed cases, destructuring of any typeextern "C" and #[repr(C)] let you replace individual C files in an existing project one at a timeWhat C would look like if designed today. Zig keeps C's simplicity and direct hardware access while replacing the preprocessor, adding explicit allocators, and making every error path visible in the type system.
malloc for an arena or stack allocator without touching library code!T) — every error path is visible in the return type; no unchecked errno, no silent failures, exhaustive handling enforced by the compiler@cImport — import any C header directly; use existing C libraries without writing manual bindingsC with a full systems-programming tower on top. C++ adds classes, templates, RAII, and the STL while staying zero-overhead and fully compatible with every C library and C ABI you already use.
class is a struct with methods and access controlunique_ptr, shared_ptr) — deterministic resource cleanup replacing manual free() and fclose()vector, map, sort, transform, ranges — type-safe, zero-overhead containers and algorithms replacing your hand-rolled C equivalentsstd::format, structured bindings, std::optional, std::expected — ergonomics that close the gap with higher-level languagesWhat C could have grown into. D keeps C's performance and low-level access while adding a module system, garbage collection, ranges, built-in unit tests, and a metaprogramming system that replaces the preprocessor — without dragging in C++'s complexity.
#include, no header guards, no order-of-declaration rules; each file is a self-contained modulemalloc/free; @nogc lets you opt out completely for hot pathsstrlen(s) and s.strlen() are identical; method chaining without C++ class machinerystd.algorithm — lazy, composable iteration (filter, map, sort) replacing hand-written C loopsunittest blocks and contract programming (in/out/invariant) — testing and precondition checking without an external frameworkextern(C); the C standard library is available as core.stdc.*