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.lenHallo, 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 u10 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)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
So führst du den Code aus: Datei hallo.nim speichern und mit nim c -r hallo.nim übersetzen und starten (Nim von nim-lang.org, Paketmanager nimble).
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
Aufgabe
Berechne die Fläche eines Kreises mit Radius 2,5 und gib sie mit formatFloat auf zwei Stellen aus.