Programmiersprache: Ruby 2.7 führt Pattern Matching ein

Wie immer zu Weihnachten erscheint mit Ruby 2.7 eine neue Version der Programmiersprache – das letzte der 2.x-Releaseschiene.

In Pocket speichern vorlesen Druckansicht 46 Kommentare lesen
Programmiersprache: Ruby 2.7 führt Pattern Matching ein
Lesezeit: 3 Min.
Von
  • Alexander Neumann
Inhaltsverzeichnis

Schon seit Jahren erscheint immer um Weihnachten herum oder an den Festtagen selbst eine neue Version der Skriptsprache Ruby – so auch dieses Jahr. Ruby 2.7 ist eine Mischung aus das Programmiererlebnis verbessernden Überarbeitungen wie Symbol#start_with? und Enumerable#filter_map sowie großen Features wie Pattern Matching und nummerierten Argumenten. Die obligatorischen Bugfixes dürfen ebenfalls nicht fehlen.

Eine besondere Rolle nimmt Ruby 2.7 dadurch ein, dass es das letzte Release der 2.x-Entwicklungsschiene ist, die 2013 mit Ruby 2.0 eingeläutet wurde. Im Dezember des nächsten Jahres soll dann Ruby 3.0 folgen

Das insbesondere in funktionalen Programmiersprachen gesetzte Pattern Matching, zu Deutsch Musterabgleich, ist eines der großen, aber auch von einigen skeptisch beäugten neuen Features im neuen Ruby-Release. Es kann ein bestimmtes Objekt durchlaufen und seinen Wert zuweisen, wenn es mit einem Muster übereinstimmt:

require "json"

json = <<END
{
"name": "Alice",
"age": 30,
"children": [{ "name": "Bob", "age": 2 }]
}
END

case JSON.parse(json, symbolize_names: true)
in {name: "Alice", children: [{name: "Bob", age: age}]}
p age #=> 2
end

Noch ist das Pattern-Matching-Feature als experimentell gekennzeichnet.

Ebenfalls neu ist die GC.compact-Methode, mit der sich fragmentierter Speicherplatz defragmentieren lässt. Diese Funktion komprimiert Live-Objekte im Heap, sodass sich weniger Seiten verwenden lassen und der Heap CoW-freundlicher (Copy-on-write) sein kann. Hiermit möchten die Ruby-Entwickler eine Speicherfragmentierung bei Multithread-Ruby-Programmen vermeiden.

Nummerierte Parameter als Standardblockparameter werden in Ruby 2.7 als weiteres experimentelles Feature eingeführt. Das erlaubt es, die Pipe-Definition in Blöcken (|Value|) abzulegen und kürzere Blöcke mit nummerierten Parametern wie _1[code], [code]_2, _3 etc. zu erzeugen. Weitere experimentelle Neuerungen sind der Methodenreferenzoperator ".:" und eine sogenannte Beginless/Startless Range. Am mit Ruby 2.6 eingeführten JIT-Compiler wurde ebenfalls geschraubt. Aber auch er hat immer noch experimentellen Status.

Die Read-Eval-Print-Loop (REPL) irb unterstützt nun auch mehrzeiliges Editieren. Sie basiert auf reline, einer allein in Ruby implementierten, readline-kompatiblen Bibliothek. Sie integriert sich auch mit dem Ruby-Dokumentationswerkzeug RDoc. In irb lässt sich die Referenz für eine gegebene Klasse, ein Modul oder eine Methode anzeigen

Ein Comeback feiert der Flip-Flop-Operator. Es handelt sich dabei um einen Range-Operator, der zwischen zwei Bedingungen in einer bedingten Anweisung verwendet wird. Er wird so lange als falsch gewertet, bis die erste Bedingung als "true" gewertet wird, und bleibt dann so lange wahr, bis die zweite Bedingung als "true" gewertet wird.

Einen guten Ausgangspunkt für die Sichtung der weiteren Neuerungen bietet die Ankündingung im Programmiersprachen-Blog.

Ruby sebst entstand 1993 durch den Entwickler Yukihiro Matsumoto, in der Ruby-Community schlicht nur "Matz" genannt. Die Sprache wird schon lange als Open Source entwickelt und auf mehreren Plattformen insbesondere für die Webentwicklung eingesetzt. Einen richtigen Boom erlebte sie vor mehr als zehn Jahren durch das in Ruby geschriebene Webframework Ruby on Rails. Bekanntere Nutzer von Ruby sind GitHub und Airbnb.

Ruby ist objektorientiert, doch die Sprache unterstützt auch andere Programmierparadigmen. Sie kennt Konzepte wie dynamische Typisierung, Reflexion und automatische Speicherbereinigung. Ruby-Programme werden zur Laufzeit interpretiert. (ane)