PLDB
Languages Features Calendar CSV Lists Blog About Donate Add Language
GitHub icon

Nim

< >

Nim is a programming language created in 2008 by Andreas Rumpf.

#104on PLDB 15Years Old 19.1kUsers
3Books 0Papers 8kRepos

Try now: Riju · TIO

Nim (formerly named Nimrod) is an imperative, multi-paradigm, compiled programming language designed and developed by Andreas Rumpf. It is designed to be "efficient, expressive, and elegant", supporting metaprogramming, functional, message passing, procedural, and object-oriented programming styles by providing several features such as compile time code generation, algebraic data types, a foreign function interface (FFI) with C and compiling to JavaScript, C and C++.. Read more on Wikipedia...


Example from Compiler Explorer:
# Type your code here, or load an example. proc square(num: int): int {.exportc.} = num * num
Example from Riju:
echo "Hello, world!"
Example from hello-world:
echo("Hello World")
# Hello world in Nim echo "Hello World"
Example from Linguist:
# from: https://github.com/nim-lang/Nim/blob/27b081d1f77604ee47c886e69dbc52f53ea3741f/compiler/nimfix/nimfix.nim.cfg # Special configuration file for the Nim project # gc:markAndSweep hint[XDeclaredButNotUsed]:off path:"$projectPath/.." path:"$lib/packages/docutils" path:"$nim" define:useStdoutAsStdmsg symbol:nimfix define:nimfix cs:partial #define:useNodeIds define:booting define:noDocgen
Example from Wikipedia:
proc printf(formatstr: cstring) {.header: "<stdio.h>", varargs.} printf("%s %d\n", "foo", 5)

Language features

Feature Supported Token Example
Unicode Identifers
let δ = 0.00001
Booleans true false on off
 let res = true
Strings "
"Hello world"
Assignment =
MultiLine Comments #[ ]#
#[ A comment
]#
Print() Debugging echo
Line Comments #
# A comment
Static Typing
Case Insensitive Identifiers
Semantic Indentation
Macros
# https://hookrace.net/blog/introduction-to-metaprogramming-in-nim/#macros
import macros
dumpTree:
 result = 10
Templates
# https://hookrace.net/blog/introduction-to-metaprogramming-in-nim/#templates
template debug*(args: varargs[string, `$`]) =
if logLevel <= Level.debug:
  const module = instantiationInfo().filename[0 .. ^5]
  echo "[$# $#][$#]: $#" % [getDateStr(), getClockStr(),
    module, join args]
Comments
Gotos X

Books about Nim from ISBNdb

title authors year publisher
Mastering Nim Rumpf, Andreas 2022 Independently published
Nim in Action Picheta, Dominik 2017 Manning Publications
Nim in Action Picheta, Dominik 2017 Manning
llvmir.html · nim.html · liquid.html

View source

PLDB - Build the next great programming language · v2023 · Day 153 · Docs · Build · Acknowledgements · Traffic Today · Traffic Trends · Mirrors · GitHub · feedback@pldb.com