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
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ührenDas 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.lenAusgabe:
Hallo, Welt!
1 + 2 = 3
ohne Zeilenumbruch
Hallo, Mia!
Länge: 3echo 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 uAusgabe:
10 25 30
5 2.5 Text true z
127 9000000000
int float string bool
127 -128 9223372036854775807
0Rechnen
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 12Hinweis
/liefert immer eine Fließkommazahl;divist die Ganzzahldivision. Nim schreibt Namen stil-insensitiv:mein_name,meinNameundmeinnamebezeichnen 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/modfü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
Wodurch werden Blöcke in Nim gebildet?
- Durch Einrückung (richtig)
- Durch geschweifte Klammern
- Durch begin/end
- Durch Semikolons
Was ergibt 7 div 2?
- 3 (richtig)
- 3.5
- 4
- 2
Wohin kann Nim Code übersetzen?
- Nach C, C++ und JavaScript (richtig)
- Nur nach Java
- Nur nach Assembler
- Nur nach Python
Weiter im Kurs
Weiter: Kontrollfluss und Prozeduren
Alle Kapitel: Nim im Überblick