Skip to content

Commit c8e9589

Browse files
committed
Translate 2.6.0 release post (de)
1 parent 43399ee commit c8e9589

File tree

1 file changed

+228
-0
lines changed

1 file changed

+228
-0
lines changed
Lines changed: 228 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,228 @@
1+
---
2+
layout: news_post
3+
title: "Ruby 2.6.0 veröffentlicht"
4+
author: "naruse"
5+
translator: "Marvin Gülker"
6+
date: 2018-12-25 00:00:00 +0000
7+
lang: de
8+
---
9+
10+
Wir freuen uns, die Veröffentlichung von Ruby 2.6.0 bekanntgeben zu können.
11+
12+
Diese Version enthält eine Reihe neuer Features und
13+
Performanzverbesserungen, darunter insbesondere:
14+
15+
* Ein neuer JIT-Compiler.
16+
* Das Modul `RubyVM::AbstractSyntaxTree`.
17+
18+
## JIT [Experimentell]
19+
20+
Ruby 2.6 führt erstmals einen JIT-Compiler _(Just in Time Compiler)_ ein.
21+
22+
Der JIT-Compiler soll die allgemeine Performanz aller Ruby-Programme
23+
verbessern. Rubys JIT-Compiler arbeitet anders als herkömmliche
24+
JIT-Compiler für andere Programmiersprachen, denn er schreibt C-Code
25+
auf die Festplatte und startet dann einen gewöhnlichen
26+
C-Compiler-Prozess, um Maschinencode zu erzeugen. Siehe dazu auch:
27+
[Die Funktionsweise von MJIT (von Wladimir Makarow)](https://github.com/vnmakarov/ruby/tree/rtl_mjit_branch#mjit-organization).
28+
29+
Um den JIT-Compiler zu benutzen, geben Sie `--jit` als Kommandozeilenoption
30+
oder in der Umgebungsvariablen `$RUBYOPT` an. Bei Angabe von
31+
`--jit-verbose=1` werden Informationen über die laufende
32+
JIT-Kompilation ausgegeben. Weitere Optionen können `ruby --help` oder
33+
der [Dokumentation](https://bugs.ruby-lang.org/projects/ruby/wiki/MJIT#Basic-usage)
34+
entnommen werden.
35+
36+
Für den Einsatz des JIT-Compilers ist es erforderlich, dass Ruby
37+
mithilfe von GCC, Clang oder Microsoft VC++ kompiliert worden
38+
ist. Darüber hinaus muss der verwendete Compiler zur Laufzeit auf dem
39+
System zur Verfügung stehen.
40+
41+
Mit Stand Ruby 2.6.0 haben wir eine 1,7-fache Verbesserung
42+
der Performanz gegenüber Ruby 2.5 bei einem CPU-intensiven,
43+
nicht-trivialen Belastungstest namens [Optcarrot](https://gist.github.com/k0kubun/d7f54d96f8e501bbbc78b927640f4208)
44+
festgestellt. Allerdings ist der JIT-Compiler noch experimentell und
45+
speicherhungrige Anwendungen wie solche auf Rails-Basis können
46+
möglicherweise noch nicht von ihm profitieren. Weitere Informationen
47+
finden Sie im Artikel [Ruby 2.6 JIT - Fortschritt und Zukunft](https://medium.com/@k0kubun/ruby-2-6-jit-progress-and-future-84e0a830ecbf).
48+
49+
Machen Sie sich bereit für eine neue Ära von Rubys Performanz.
50+
51+
## `RubyVM::AbstractSyntaxTree` [Experimentell]
52+
53+
Ruby 2.6 führt das Modul `RubyVM::AbstractSyntaxTree` ein. **Die
54+
Kompatibilität dieses Moduls mit zukünftigen Versionen kann nicht
55+
garantiert werden.**
56+
57+
Dieses Modul verfügt über die Methoden `parse`, die den als String
58+
übergebenen Ruby-Code verarbeitet und eine Liste von Knoten des ASTs
59+
_(Abstract Syntax Tree)_ zurückgibt, und `parse_file`, die die
60+
übergebene Ruby-Quelldatei auf ähnliche Weise verarbeitet und
61+
ebenfalls AST-Knoten zurückgibt.
62+
63+
Weiterhin wird die ebenfalls experimentelle Klasse `RubyVM::AbstractSyntaxTree::Node`
64+
eingeführt. Mithilfe von `Node`-Objekten können die Positionsinformationen und
65+
Angaben über Kindknoten ermittelt werden.
66+
67+
## Weitere nennenswerte neue Features
68+
69+
* Neuer alias `#then` für `Kernel#yield_self`. [[Feature #14594]](https://bugs.ruby-lang.org/issues/14594)
70+
71+
* Konstantennamen können auch mit Großbuchstaben außerhalb des
72+
ASCII-Zeichensatzes beginnen. [[Feature #13770]](https://bugs.ruby-lang.org/issues/13770)
73+
74+
* Endlos-Range eingeführt. [[Feature #12912]](https://bugs.ruby-lang.org/issues/12912)
75+
76+
Es wird ein Endlos-Range `(1..)` eingeführt, der über kein Ende
77+
verfügt. Typische Anwendungsfälle sehen wie folgt aus:
78+
79+
ary[1..] # identisch zu ary[1..-1] ohne magische -1
80+
(1..).each {|index| ... } # Endlosschleife ab Index 1
81+
ary.zip(1..) {|elem, index| ... } # ary.each.with_index(1) { ... }
82+
83+
* `Enumerable#chain` und `Enumerator#+` hinzugefügt. [[Feature #15144]](https://bugs.ruby-lang.org/issues/15144)
84+
85+
* Operatoren `<<` und `>>` für die Kombination von Funktionen zu
86+
`Proc` und `Method` hinzugefügt. [[Feature #6284]](https://bugs.ruby-lang.org/issues/6284)
87+
88+
f = proc{|x| x + 2}
89+
g = proc{|x| x * 3}
90+
(f << g).call(3) # -> 11; identical to f(g(3))
91+
(f >> g).call(3) # -> 15; identical to g(f(3))
92+
93+
* `Binding#source_location` hinzugefügt. [[Feature #14230]](https://bugs.ruby-lang.org/issues/14230)
94+
95+
Diese Methode gibt ein 2-Element-Array mit den Bestandteilen
96+
`__FILE__` und `__LINE__` zurück, die beschreiben, an welcher Stelle
97+
im Quelltext ein Binding definiert wurde. Dieselbe Information
98+
konnte bisher über `eval("[__FILE__, __LINE__]", binding)` ermittelt
99+
werden, allerdings planen wir, dieses Verhalten so zu ändern, dass
100+
`Kernel#eval` den Definitionsort eines `binding` ignoriert
101+
[[Bug #4352]](https://bugs.ruby-lang.org/issues/4352). Nutzern wird
102+
deshalb empfohlen, auf diese neu eingeführte Methode umzusteigen.
103+
104+
* Option `:exception` zu `Kernel.#system` hinzugefügt. Diese Option
105+
führt dazu, dass #system statt `false` zurückzugeben einen Fehler
106+
verursacht. [[Feature #14386]](https://bugs.ruby-lang.org/issues/14386)
107+
108+
* Einmal-Modus _(oneshot mode)_ zu `Coverage`
109+
hinzugefügt. [[Feature#15022]](https://bugs.ruby-lang.org/issues/15022)
110+
111+
* Anstelle von „wie oft wurde eine bestimmte Zeile ausgeführt“,
112+
prüft dieser Modus, „ob jede Zeile wenigstens einmal oder gar
113+
nicht ausgeführt wurde“. Der entsprechende Hook wird für jede
114+
Zeile höchstens einmal ausgeführt. Nach seinem Abschluss wird die
115+
entsprechende Flagge entfernt, d.h. das Programm läuft danach
116+
ohne geschwindigkeitsrelevante Einschränkungen.
117+
* Schlüsselwortargument `:oneshot_lines` zu Coverage.start
118+
hinzugefügt.
119+
* Schlüsselwortargumente `:stop` und `:clear` zu Coverage.result
120+
hinzugefügt. Wenn `clear` wahr ist, setzt es den Zähler auf Null
121+
zurück. Wenn `:stop` wahr ist, wird die Abdeckungsmessung
122+
ausgeschaltet.
123+
* `Coverage.line_stub` hinzugefügt. Es handelt sich um eine einfache
124+
Hilfsfunktion, die eine kurze Zusammenfassung der Zeilenabdeckung
125+
des übergebenen Quellcodes erzeugt.
126+
127+
* `FileUtils#cp_lr` hinzugefügt. Diese Methode funktioniert wie
128+
`cp_r`, verlinkt aber statt zu kopieren. [[Feature #4189]](https://bugs.ruby-lang.org/issues/4189)
129+
130+
## Performanzverbesserungen
131+
132+
* `Proc#call` durch die Entfernung der temporären Allozierung von
133+
`$SAFE` beschleunigt. [[Feature #14318]](https://bugs.ruby-lang.org/issues/14318)
134+
135+
Mithilfe des `lc_fizzbuzz`-Belastungstests, der sehr häufig `Proc#call`
136+
benutzt, haben wir eine 1,4-fache Beschleunigung gemessen. [[Bug #10212]](https://bugs.ruby-lang.org/issues/10212)
137+
138+
* `block.call` beschleunigt, wenn `block` als Block-Parameter
139+
übergeben wird. [[Feature
140+
#14330]](https://bugs.ruby-lang.org/issues/14330)
141+
142+
Zusammen mit den bereits in Ruby 2.5 diesbezüglich vorgenommenen
143+
Verbesserungen ist die Evaluation von Blöcken in Ruby 2.6 nun
144+
ausweislich eines Micro-Benchmarks 2,6-mal schneller.
145+
146+
* Es wird ein flüchtiger Heap _(transient heap, theap)_
147+
eingeführt [[Bug #14858]](https://bugs.ruby-lang.org/issues/14858) [[Feature #14989]](https://bugs.ruby-lang.org/issues/14989).
148+
149+
Dabei handelt es sich um einen automatisch verwalteten Freispeicher
150+
für kurzlebige Objekte im Speicher, auf welche von bestimmten
151+
Klassen (Array, Hash, Object und Struct) verwiesen wird. Dies führt
152+
beispielsweise dazu, dass die Erstellung kleiner und kurzlebiger
153+
Hash-Objekte doppelt so schnell ist. Im RDoc-Belastungstest haben
154+
wir eine 6- bis 7-prozentige Performanzverbesserung festgestellt.
155+
156+
* Diverse native Implementierungen (`arm32`, `arm64`, `ppc64le`, `win32`,
157+
`win64`, `x86`, `amd64`) von Coroutinen verbessern die Performanz
158+
des Kontextwechsels bei `Fiber` signifikant.
159+
160+
`Fiber.yield` und `Fiber#resume` sind auf einem 64-bit Linux-System
161+
etwa 5 mal so schnell wie bisher. Programme, die intensiven
162+
Gebrauch von Fibers machen, können insgesamt eine bis zu
163+
fünfprozentige Performanzverbesserung erwarten.
164+
165+
## Sonstige bemerkenswerte Änderungen seit 2.5
166+
167+
* `$SAFE` ist ein prozess-globaler Zustand und kann wieder auf `0` gesetzt
168+
werden. [[Feature #14250]](https://bugs.ruby-lang.org/issues/14250)
169+
170+
* Die Übergabe von `safe_level` an `ERB.new` ist als veraltet
171+
markiert worden. Die Parameter `trim_mode` und `eoutvar` wurden in
172+
Schlüsselwortargumente geändert. [[Feature #14256]](https://bugs.ruby-lang.org/issues/14256)
173+
174+
* Ruby unterstützt jetzt Unicode in Version 11. Es ist geplant, die
175+
Versionen 12 und 12.1 in zukünftigen TEENY-Veröffentlichungen von
176+
Ruby 2.6 zu unterstützen und damit Unterstützung für die [neue
177+
japanische Ära](http://blog.unicode.org/2018/09/new-japanese-era.html) einzuführen.
178+
179+
* RubyGems 3.0.1 aufgenommen. Die Optionen `--ri` und `--rdoc`
180+
wurden entfernt. Benutzen Sie stattdessen `--document` und
181+
`--no-document`.
182+
183+
* [Bundler](https://github.com/bundler/bundler) wird standardmäßig
184+
mitgeliefert.
185+
186+
* `else` ohne `rescue` in Fehlerbehandlungsblöcken verursacht einen
187+
Syntaxfehler. [EXPERIMENTELL][[Feature #14606]](https://bugs.ruby-lang.org/issues/14606)
188+
189+
Siehe die [NEWS](https://github.com/ruby/ruby/blob/v2_6_0/NEWS) oder
190+
die [Commit-Logs](https://github.com/ruby/ruby/compare/v2_5_0...v2_6_0)
191+
für weitere Details.
192+
193+
Mit diesen Änderungen wurden [6437 Dateien geändert, 231471 Einfügungen(+), 98498
194+
Löschungen(-)](https://github.com/ruby/ruby/compare/v2_5_0...v2_6_0)
195+
seit Ruby 2.5.0!
196+
197+
Frohe Weihnachten, schöne Ferien und viel Spaß bei der Programmierung
198+
mit Ruby 2.6!
199+
200+
## Download
201+
202+
* <https://cache.ruby-lang.org/pub/ruby/2.6/ruby-2.6.0.tar.gz>
203+
204+
SIZE: 16687800 bytes
205+
SHA1: c95f4e86e21390270dad3ebb94491fd42ee2ce69
206+
SHA256: f3c35b924a11c88ff111f0956ded3cdc12c90c04b72b266ac61076d3697fc072
207+
SHA512: 01f886b0c0782a06315c4a46414e9f2b66ee634ba4349c8e0697f511793ae3c56d2ad3cad6563f2b0fdcedf0ff3eba51b9afab907e7e1ac243475772f8688382
208+
209+
* <https://cache.ruby-lang.org/pub/ruby/2.6/ruby-2.6.0.zip>
210+
211+
SIZE: 20582054 bytes
212+
SHA1: a804e63d18da12107e1d101918a3d8f4c5462a27
213+
SHA256: 8a4fb6ca58202495c9682cb88effd804398bd0ef023e3e36f001ca88d8b5855a
214+
SHA512: 16d66ec4a2c6a2e928d5b50e094a5efa481ac6e4d5ed77459d351ef19fe692aa59b68307e3e25229eec5f30ae2f9adae2663bafe9c9d44bfb45d3833d77839d4
215+
216+
* <https://cache.ruby-lang.org/pub/ruby/2.6/ruby-2.6.0.tar.bz2>
217+
218+
SIZE: 14585856 bytes
219+
SHA1: b8638eb806efbf7b6af87b24ccc6ad915f262318
220+
SHA256: c89ca663ad9a6238f4b1ec4d04c7dff630560c6e6eca6d30857c4d394f01a599
221+
SHA512: ca3daf9acf11d3db2900af21b66231bd1f025427a9d2212b35f6137ca03f77f57171ddfdb99022c8c8bcd730ff92a7a4af54e8a2a770a67d8e16c5807aa391f1
222+
223+
* <https://cache.ruby-lang.org/pub/ruby/2.6/ruby-2.6.0.tar.xz>
224+
225+
SIZE: 11918536 bytes
226+
SHA1: 9ddaeba3505d2855460c8c653159fc0ac8928c0f
227+
SHA256: acb00f04374899ba8ee74bbbcb9b35c5c6b1fd229f1876554ee76f0f1710ff5f
228+
SHA512: c56eaf85ef7b79deb34ee4590b143c07f4fc83eb79775290761aee5a7c63374659613538a41f25706ed6e19e49d5c67a1014c24d17f29948294c7abd0b0fcea8

0 commit comments

Comments
 (0)