EMZETT.
Login

Kurz: Nim (früher Nimrod, 2008, Andreas Rumpf) ist eine statisch typisierte, kompilierte Sprache mit einer Syntax, die an Python erinnert (Einrückung statt Klammern), aber Programme erzeugt, die so schnell sind wie C.

Teil des Kurses Nim

Kapitel 1 von 8 im Kurs Nim. Mit Fortschritt, Quiz und Zertifikat auf der Lernseite.

Was ist Nim?

Nim (früher Nimrod, 2008, Andreas Rumpf) ist eine statisch typisierte, kompilierte Sprache mit einer Syntax, die an Python erinnert (Einrückung statt Klammern), aber Programme erzeugt, die so schnell sind wie C. Nim übersetzt nach C, C++ oder JavaScript, hat Typinferenz, Generics, mächtige Makros und eine Speicherverwaltung ohne klassische Garbage Collection (ORC).

Eingesetzt wird Nim für Kommandozeilenwerkzeuge, Spiele, Netzwerkdienste, eingebettete Systeme und Anwendungen, die kleine, schnelle Binärdateien brauchen. Bekannt sind u. a. der Paketmanager nimble, das Web-Framework Jester/Prologue und die Statusbar Nitter.

Ausführen

nim c -r hallo.nim            # übersetzen und sofort ausführen
nim c -d:release hallo.nim    # optimiert übersetzen
nim js hallo.nim              # nach JavaScript
nim check hallo.nim           # nur prüfen
nimble init projekt           # neues Projekt
nimble install <paket>        # Paket installieren
nimble test                   # Tests ausführen

Das erste Programm

echo "Hallo, Welt!"
echo "1 + 2 = ", 1 + 2
stdout.write "ohne Zeilenumbruch"
stdout.write "\n"
let name = "Mia"
echo "Hallo, ", name, "!"
echo "Länge: ", name.len

Ausgabe:

Hallo, Welt!
1 + 2 = 3
ohne Zeilenumbruch
Hallo, Mia!
Länge: 3

echo gibt mehrere Werte durch Komma getrennt aus und beendet die Zeile. Es gibt keine Klammerpflicht beim Aufruf (command syntax).

Variablen: let, var, const

let a = 10            # unveränderlich zur Laufzeit
var b = 20            # veränderlich
const c = 30          # zur Übersetzungszeit bekannt
b += 5
echo a, " ", b, " ", c
 
var x: int = 5
var y: float = 2.5
var s: string = "Text"
var ok: bool = true
var z: char = 'z'
var klein: int8 = 127
var gross: int64 = 9_000_000_000
echo x, " ", y, " ", s, " ", ok, " ", z
echo klein, " ", gross
echo typeof(x), " ", typeof(y), " ", typeof(s), " ", typeof(ok)
echo high(int8), " ", low(int8), " ", high(int)
var u: uint8 = 255
u += 1
echo u

Ausgabe:

10 25 30
5 2.5 Text true z
127 9000000000
int float string bool
127 -128 9223372036854775807
0

Rechnen

import std/[math, strutils]
 
echo 7 + 2, " ", 7 - 2, " ", 7 * 2
echo 7 div 2, " ", 7 mod 3, " ", 7 / 2
echo 2 ^ 10, " ", pow(2.0, 0.5)
echo sqrt(16.0), " ", abs(-5), " ", max(3, 9), " ", min(3, 9)
echo floor(2.7), " ", ceil(2.1), " ", round(3.5), " ", trunc(-2.7)
echo int(3.99), " ", float(3), " ", $42 & "!", " ", parseInt("17") + 1
echo 10 shl 2, " ", 255 shr 4, " ", 12 and 10, " ", 12 or 10, " ", 12 xor 10
echo 1_000 * 1_000
echo PI
echo (1 < 2) and (2 < 3), " ", not true
echo 0.1 + 0.2
echo (17 div 5, 17 mod 5)
echo gcd(48, 18), " ", lcm(4, 6)

Ausgabe:

9 5 14
3 1 3.5
1024 1.414213562373095
4.0 5 9 3
2.0 3.0 4.0 -2.0
3 3.0 42! 18
40 15 8 14 6
1000000
3.141592653589793
true false
0.3
(3, 2)
6 12

Hinweis

/ liefert immer eine Fließkommazahl; div ist die Ganzzahldivision. Nim schreibt Namen stil-insensitiv: mein_name, meinName und meinname bezeichnen dasselbe (außer dem ersten Buchstaben).

Merke

  • Nim hat Python-ähnliche Syntax mit Einrückung, ist aber statisch typisiert und kompiliert
  • let (unveränderlich), var (veränderlich), const (Übersetzungszeit)
  • div/mod für Ganzzahlen, / liefert Fließkommazahlen
  • Nim übersetzt nach C, C++ oder JavaScript

Übungsaufgabe

Berechne die Fläche eines Kreises mit Radius 2,5 und gib sie mit formatFloat auf zwei Stellen aus.

Quiz zur Selbstkontrolle

Weiter im Kurs

Weiter: Kontrollfluss und Prozeduren

Alle Kapitel: Nim im Überblick