Nim
Andreas Rumpf’s language, first out in 2008 as Nimrod, renamed in December 2014, 1.0 in 2019 and 2.0 in
August 2023. Statically typed with inference, indentation-based syntax after Python, compiled, and
aimed at systems work. The compiler emits C by default and hands the object build to an external C
compiler, with C++, JavaScript and Objective-C also available as targets. Syntactic and term-rewriting
macros over the AST. MIT licence, community-run, NimConf annually. One oddity: identifiers are
style-insensitive, so useHttps, useHTTPS and use_https are the same name.
T2 — third-party encyclopaedic.
Memory management as a setting
Every other language here answers memory-management-model once, and the answer defines where it can be deployed: manual (c), traced GC (go, php, clojure), compile-time ownership (rust). Nim offers ARC (reference counting with move semantics), ORC (ARC plus a cycle collector, the 2.0 default), mark-and-sweep and refc collectors, and manual management — chosen per build, for deterministic behaviour when real-time work needs it.
That breaks the axis in a way worth recording rather than smoothing over. This wiki’s founding claim is that a language is a small set of early decisions paid for everywhere; Nim moves one of those decisions out of the language and into the build. Whether that is a fifth answer or an evasion, the corpus cannot say from an encyclopaedia entry — what it can say is that no first-party page here would present its memory model as configurable, because the whole genre treats that choice as identity.
Compiling to another language, again
typescript emits JavaScript, fsharp can via Fable, kotlin and dart target JS and Wasm, jank re-hosts Clojure on C++. Nim’s default output is C, which makes portability someone else’s problem — the c toolchain reaches every platform, so Nim does too. Set against assembly-language, where portability is exactly what a high-level language buys: Nim buys it secondhand, from the language that standardized the ABI everything terminates at.
Macros put it next to lisp and common-lisp on the “who may add to the language” question, with the difference that Nim’s AST is not its source syntax, so metaprogramming is a facility rather than a consequence of the notation.
Related
memory-management-model · c · rust · typescript · assembly-language · common-lisp · programming-language · synthesis