Nim was designed from the ground up to be simple, yet powerful. Forget about pointers and manual memory management*, Nim's threaded garbage collector will automatically ensure that your code keeps its memory footprint low. Even though it has the benefits of an interpreted language, as a compiled language, Nim can achieve very high performance when optimized, on par with C or C++.
* Can still be done manually if needed.
# Compute average line length
var
sum = 0
count = 0
for line in stdin.lines:
sum += line.len
count += 1
echo("Average line length: ",
if count > 0: sum / count else: 0)
# Create and greet someone
type Person = object
name: string
age: int
proc greet(p: Person) =
echo "Hi, I'm ", p.name, "."
echo "I am ", p.age, " years old."
let p = Person(name:"Jon", age:18)
p.greet() # Or greet(p)
With its automatic array bounds checking, among many other safety features, Nim is one of the safest languages to program in.
Nim is interoperable with C and C++, which means you can not only call C or C++ code if needed, but also leverage the power of existing libraries such as GTK+, libui, SDL, SFML and many more.
# Declare a C procedure…
proc unsafeScanf(f: File, s: cstring)
{.varargs,
importc: "fscanf",
header: "<stdio.h>".}
# …and use it…
var x: cint
stdin.unsafeScanf("%d", addr x)
# A simple html server
import
jester, asyncdispatch, htmlgen
routes:
get "/":
resp h1("Hello world")
runForever()
Using the Sinatra-like Jester Web framework, Nim makes it easy to quickly create Web applications.