Programmiersprache: Nim 2.0 erweitert die Standard Library

Das Team hinter der statisch typisierten Sprache Nim hat an der Typinferenz, dem Entpacken von Tupeln und neuen Modulen für die Standard Library gearbeitet.

In Pocket speichern vorlesen Druckansicht 25 Kommentare lesen

(Bild: Semisatch/Shutterstock.com)

Lesezeit: 2 Min.

Die Programmiersprache Nim 2.0 soll eine Evolution statt einer Revolution sein, bringt jedoch einige neue Features mit. Die statisch typisierte, kompilierte Programmiersprache erschien erstmals 2008 und erreichte Version 1.0 vor rund vier Jahren. Sie kombiniert Konzepte anderer Sprachen wie Python, Ada und Modula und legt laut dem Entwicklungsteam ihren Fokus auf "Effizienz, Ausdrucksstärke und Eleganz". Das aktuelle Release soll unter anderem die Typinferenz verbessern, baut die Standard Library weiter aus, aktualisiert den Paketmanager Nimble auf Version 0.14 und bringt den Atlas Package Cloner mit.

Nim 2.0 soll das Entpacken von Tupeln für Variablen verbessern: Es wird nun als syntaktischer Zucker behandelt, der direkt in multiple Zuweisungen expandiert. Zudem erlaubt die Version, das Tupel-Entpacken für Variablen zu verschachteln:

proc returnsNestedTuple(): (int, (int, int), int, int) = (4, (5, 7), 2, 3)

# Now nesting is supported!
let (x, (_, y), _, z) = returnsNestedTuple()

Als eine weitere Änderung führt das Release eine neue Form von Typinferenz namens Top-Down-Inferenz ein. Das Entwicklungsteam hat sie für mehrere grundlegende Fälle eingeführt, sodass beispielsweise der folgende Code kompiliert:

let foo: seq[(float, byte, cstring)] = @[(1, 2, "abc")] 

Im Umgang mit Tag Tracking lassen sich nun verbotene Tags definieren. Dazu kommt das Pragma .forbids zum Einsatz. Damit lassen sich bestimmte Effekte in proc-Typen deaktivieren, wie das Nim-Team demonstriert:

type IO = object ## input/output effect
proc readLine(): string {.tags: [IO].} = discard
proc echoLine(): void = discard

proc no_IO_please() {.forbids: [IO].} =
  # this is OK because it didn't define any tag:
  echoLine()
  # the compiler prevents this:
  let y = readLine()

Die Standard Library hat Zuwachs gewonnen. Zu den neuen Modulen zählen std/envvars für das Handling von Umgebungsvariablen, std/paths für Path Handling, std/cmdline für das Lesen von Kommandozeilenparametern und std/oserrors für Betriebssystem-Fehlermeldungen.

Der Paketmanager Nimble hat unterdessen Version 0.14 erreicht und bringt Support für lock-Dateien mit. Libraries werden nun in $nimbleDir/pkgs2 statt in $nimbleDir/pkgs gespeichert. Daneben ist der Atlas Package Cloner enthalten, der mit dem Nimble-Dateiformat umgehen kann. Weitere Informationen zu Atlas sollen mit den nächsten Nim-Versionen folgen.

Wer sich näher mit Nim befassen möchte, findet in der Dokumentation Einführungen, die speziell auf Entwicklerinnen und Entwickler aus den Bereichen C, Python und TypeScript/JavaScript abgestimmt sind. In einem Playground lässt sich die Sprache ausprobieren.

Weitere Details zum evolutionären Nim-Release lassen sich einem Blogeintrag entnehmen.

(mai)