© Ihar Yanouski/Shutterstock.com
Entwickler Magazin
Eine Bestandsaufnahme mit Ausblick auf die Zukunft

Was ist neu in Ruby?

Am 25. Dezember 2017 wurde planmäßig die neue Ruby-Version 2.5.0 freigegeben. Wie jede Minor-Version bringt auch Ruby 2.5 einige Neuerungen mit sich, die dieser Artikel vorstellen möchte. Darüber hinaus werden die im Rahmen von 2.6 für dieses Jahr anstehenden Veränderungen nebst einem vorsichtigen Ausblick auf die langfristigen Ziele von Ruby im Hinblick auf Ruby 3 vorgestellt.

Marvin Gülker


Seitdem im Februar 2013, am 20. Geburtstag von Ruby, die Version 2.0 der Programmiersprache veröffentlicht wurde, wird jedes Jahr zu Weihnachten eine neue Minor-Version fällig (Tabelle 1). Da Ruby nur einem modifizierten semantischen Versionsschema folgt, können auch in Minor-Versionen neben neuen Features kleinere Inkompatibilitäten auftreten (Furore machte etwa mit 2.4 die Streichung von Fixnum und Bignum). In Ruby 2.5 überwiegen jedoch klar die neuen Features [1]. Lediglich eine nennenswerte Inkompatibilität ist zu verzeichnen, nämlich die Entfernung der Auflösung von Konstanten der obersten Ebene über Klassen. So war bis 2.5 Folgendes möglich:

class Fooend puts Foo::RUBY_VERSION# => warning: toplevel constant RUBY_VERSION referenced by # Foo::RUBY_VERSION# => 2.2.9

Das war zwar schon immer schlechter Stil, jetzt ist damit aber Schluss, denn Ruby generiert in diesen Fällen eine ordentliche Exception der Klasse NameError.

VersionVeröffentlichtFehlerkorrekturen bisSicherheitsfixes bis2.0.024.02.201324.02.201524.02.20162.1.025.12.201330.03.201631.03.20172.2.025.12.201428.03.201731.03.20182.3.025.12.2015voraussichtlich Ende März 2018voraussichtlich Ende März 20192.4.025.12.2016voraussichtlich Ende März 2019voraussichtlich Ende März 20202.5.025.12.2017voraussichtlich Ende März 2020voraussichtlich Ende März 20212.6.0voraussichtlich 25.12.2018voraussichtlich Ende März 2021voraussichtlich Ende März 2022

Tabelle 1: Derzeit unterstützte Ruby-Versionen (Quelle: [2])

Interessanter als diese marginale Inkompatibilität sind die neu in Ruby 2.5 eingeführten Features. Eine wichtige, aber nicht auf Anhieb verständliche Änderung betrifft das Modul Enumerable. Zunächst muss man sich dafür kurz vor Augen führen, dass es in Ruby neben der gewöhnlichen, mit dem Operator „==“ durchgeführten Gleichheitsprüfung noch die sogenannte case-Gleichheit mit dem Operator „===“ gibt. Die case-Gleichheit wird – daher der Name – insbesondere vom case-Konstrukt geprüft und stellt eher einen Musterabgleich als eine Inhaltsprüfung dar. Die Änderung in Enumerable generalisiert den zuvor schon in der Methode Enumerable#grep vorhandenen Ansatz, die case-Gleichheit als Abkürzung anstelle eines Blocks zu benutzen, indem ein optionales Argument ausgewertet wird. Dies ermöglicht Code wie den folgenden, in dem anstatt eines aufwendigen Blocks einfach nur ein case-Gleicheit unterstützendes Objekt als Argument übergeben wird:

# statt: room_temperatures.all? { |t| (19..24).include?(t) }room_temperatu...

Entwickler Magazin
Eine Bestandsaufnahme mit Ausblick auf die Zukunft

Was ist neu in Ruby?

Am 25. Dezember 2017 wurde planmäßig die neue Ruby-Version 2.5.0 freigegeben. Wie jede Minor-Version bringt auch Ruby 2.5 einige Neuerungen mit sich, die dieser Artikel vorstellen möchte. Darüber hinaus werden die im Rahmen von 2.6 für dieses Jahr anstehenden Veränderungen nebst einem vorsichtigen Ausblick auf die langfristigen Ziele von Ruby im Hinblick auf Ruby 3 vorgestellt.

Marvin Gülker


Seitdem im Februar 2013, am 20. Geburtstag von Ruby, die Version 2.0 der Programmiersprache veröffentlicht wurde, wird jedes Jahr zu Weihnachten eine neue Minor-Version fällig (Tabelle 1). Da Ruby nur einem modifizierten semantischen Versionsschema folgt, können auch in Minor-Versionen neben neuen Features kleinere Inkompatibilitäten auftreten (Furore machte etwa mit 2.4 die Streichung von Fixnum und Bignum). In Ruby 2.5 überwiegen jedoch klar die neuen Features [1]. Lediglich eine nennenswerte Inkompatibilität ist zu verzeichnen, nämlich die Entfernung der Auflösung von Konstanten der obersten Ebene über Klassen. So war bis 2.5 Folgendes möglich:

class Fooend puts Foo::RUBY_VERSION# => warning: toplevel constant RUBY_VERSION referenced by # Foo::RUBY_VERSION# => 2.2.9

Das war zwar schon immer schlechter Stil, jetzt ist damit aber Schluss, denn Ruby generiert in diesen Fällen eine ordentliche Exception der Klasse NameError.

VersionVeröffentlichtFehlerkorrekturen bisSicherheitsfixes bis2.0.024.02.201324.02.201524.02.20162.1.025.12.201330.03.201631.03.20172.2.025.12.201428.03.201731.03.20182.3.025.12.2015voraussichtlich Ende März 2018voraussichtlich Ende März 20192.4.025.12.2016voraussichtlich Ende März 2019voraussichtlich Ende März 20202.5.025.12.2017voraussichtlich Ende März 2020voraussichtlich Ende März 20212.6.0voraussichtlich 25.12.2018voraussichtlich Ende März 2021voraussichtlich Ende März 2022

Tabelle 1: Derzeit unterstützte Ruby-Versionen (Quelle: [2])

Interessanter als diese marginale Inkompatibilität sind die neu in Ruby 2.5 eingeführten Features. Eine wichtige, aber nicht auf Anhieb verständliche Änderung betrifft das Modul Enumerable. Zunächst muss man sich dafür kurz vor Augen führen, dass es in Ruby neben der gewöhnlichen, mit dem Operator „==“ durchgeführten Gleichheitsprüfung noch die sogenannte case-Gleichheit mit dem Operator „===“ gibt. Die case-Gleichheit wird – daher der Name – insbesondere vom case-Konstrukt geprüft und stellt eher einen Musterabgleich als eine Inhaltsprüfung dar. Die Änderung in Enumerable generalisiert den zuvor schon in der Methode Enumerable#grep vorhandenen Ansatz, die case-Gleichheit als Abkürzung anstelle eines Blocks zu benutzen, indem ein optionales Argument ausgewertet wird. Dies ermöglicht Code wie den folgenden, in dem anstatt eines aufwendigen Blocks einfach nur ein case-Gleicheit unterstützendes Objekt als Argument übergeben wird:

# statt: room_temperatures.all? { |t| (19..24).include?(t) }room_temperatu...

Neugierig geworden?


   
Loading...

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang