Measures Concepts
GitHub icon

Nim

Nim - Programming language

< >

Nim is an open source programming language created in 2008 by Andreas Rumpf.

Source code:
git clone https://github.com/nim-lang/Nim
#105on PLDB 16Years Old 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 ✓
# Though they may be phased out:
# https://github.com/nim-lang/RFCs/issues/456
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

View source

- Build the next great programming language · Search · Add Language · Features · Creators · Resources · About · Blog · Acknowledgements · Queries · Stats · Sponsor · Day 605 · feedback@pldb.io · Logout