Skip to content

Commit 17b115b

Browse files
committed
Translate 2.7.0-rc2 post (de)
1 parent c79389b commit 17b115b

File tree

1 file changed

+381
-0
lines changed

1 file changed

+381
-0
lines changed
Lines changed: 381 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,381 @@
1+
---
2+
layout: news_post
3+
title: "Ruby 2.7.0-rc2 veröffentlicht"
4+
author: "naruse"
5+
translator: "Marvin Gülker"
6+
date: 2019-12-21 12:00:00 +0000
7+
lang: de
8+
---
9+
10+
{% assign release = site.data.releases | where: "version", "2.7.0-rc2" | first %}
11+
12+
Wir freuen uns, die Veröffentlichung von Ruby 2.7.0-rc2 bekannt geben
13+
zu können.
14+
15+
Ein Veröffentlichungskandidat wird veröffentlicht, um bis zur
16+
geplanten finalen Freigabe am 25. Dezember Erfahrungsberichte sammeln zu
17+
können.
18+
19+
Daneben enthält sie eine Anzahl neuer Funktionalitäten und
20+
Performanzverbesserungen, namentlich:
21+
22+
* Musterabgleiche
23+
* Verbesserungen der interaktiven Kommandozeile _(REPL)_
24+
* Defragmentierung für den GC _(Campaction GC)_
25+
* Trennung der Positions- und der Schlüsselwortargumente
26+
27+
## Musterabgleiche [Experimentell]
28+
29+
Musterabgleiche sind eine häufig genutzte Funktion funktionaler
30+
Programmiersprachen. Mit 2.7.0 werden sie als experimentell in die
31+
Programmiersprache Ruby eingeführt. [#14912](https://bugs.ruby-lang.org/issues/14912)
32+
33+
Ein Musterabgleich untersucht das übergebene Objekt und weist seinen
34+
Wert dann zu, wenn er auf ein bestimmtes Muster passt.
35+
36+
{% highlight ruby %}
37+
require "json"
38+
39+
json = <<END
40+
{
41+
"name": "Alice",
42+
"age": 30,
43+
"children": [{ "name": "Bob", "age": 2 }]
44+
}
45+
END
46+
47+
case JSON.parse(json, symbolize_names: true)
48+
in {name: "Alice", children: [{name: "Bob", age: age}]}
49+
p age #=> 2
50+
end
51+
{% endhighlight %}
52+
53+
Weitere Details können Sie der Präsentation [Musterabgleiche - Neue Funktion in Ruby 2.7](https://speakerdeck.com/k_tsj/pattern-matching-new-feature-in-ruby-2-dot-7)
54+
entnehmen.
55+
56+
## Verbesserung der interaktiven Kommandozeile
57+
58+
Die mitgelieferte interaktive Kommandozeile `irb` _(REPL: Read-Eval-Print-Loop)_
59+
wird mehrzeiliges Editieren unterstützen. Dies wird mithilfe von
60+
`reline`, einer `readline`-kompatiblen nur mit Ruby implementierten Bibliothek,
61+
umgesetzt. Darüber hinaus wird `irb` besser mit RDoc integriert: es
62+
wird möglich, die Referenzdokumentation für eine bestimmte Klasse,
63+
ein bestimmtes Modul oder auch eine bestimmte Methode nachzuschlagen.
64+
[[Feature #14683]](https://bugs.ruby-lang.org/issues/14683),
65+
[[Feature #14787]](https://bugs.ruby-lang.org/issues/14787),
66+
[[Feature #14918]](https://bugs.ruby-lang.org/issues/14918)
67+
68+
Schließlich werden von `Binding.irb` angezeigte Quellcode-Zeilen und
69+
Ergebnisse von `inspect` farblich hevorgehoben werden.
70+
71+
<video autoplay="autoplay" controls="controls" muted="muted" width="576" height="259">
72+
<source src="https://cache.ruby-lang.org/pub/media/irb_improved_with_key_take2.mp4" type="video/mp4">
73+
</video>
74+
75+
## Defragmentierender GC
76+
77+
Die neue Version wird einen defragmentierenden GC _(Compaction GC)_
78+
einführen, der fragmentierten Arbeitsspeicherplatz defragmentieren
79+
kann.
80+
81+
Einige Ruby-Programme, die mit mehreren Threads arbeiten, leiden
82+
derzeit unter Speicherfragmentierung. Dies verursacht einen hohen
83+
Speicherverbrauch und eine reduzierte Ausführungsgeschwindigkeit.
84+
85+
Zur Behebung des Problems wird die neue Methode `GC.compact`
86+
eingeführt. Sie defragmentiert den Freispeicher _(Heap)_, indem sie
87+
noch aktive Objekte näher zusammenrückt, sodass weniger Speicherseiten
88+
benötigt werden und der Freispeicher insgesamt besser für
89+
Copy-on-Write (CoW) geeignet ist. [#15626](https://bugs.ruby-lang.org/issues/15626)
90+
91+
## Trennung von Positions- und Schlüsselwortargumenten
92+
93+
Die automatische Konvertierung zwischen Schlüsselwort- und
94+
Positionsargumenten gilt nun als veraltet und wird mit Ruby 3 entfernt
95+
werden. [[Feature #14183]](https://bugs.ruby-lang.org/issues/14183)
96+
97+
* Wenn bei einem Methodenaufruf ein Hash als letztes Argument
98+
übergeben wird, wenn sonstige Argumente fehlen und wenn die
99+
aufgerufene Methode Schlüsselwortargumente annimmt, dann gibt Ruby
100+
eine Warnung aus. Um das Hash weiterhin als Schlüsselwortargument zu
101+
verwenden, ist es notwendig, den doppelten Auflösungsoperator
102+
_(double splat operator)_ zu benutzen. Nur so kann die Warnung
103+
vermieden und das korrekte Verhalten in Ruby 3 sichergestellt
104+
werden.
105+
106+
```ruby
107+
def foo(key: 42); end; foo({key: 42}) # Warnung
108+
def foo(**kw); end; foo({key: 42}) # Warnung
109+
def foo(key: 42); end; foo(**{key: 42}) # OK
110+
def foo(**kw); end; foo(**{key: 42}) # OK
111+
```
112+
113+
* Wenn bei einem Methodenaufruf Schlüsselwortargumente an eine
114+
Methode, die auch Schlüsselwortargumente akzeptiert, übergeben
115+
werden, jedoch nicht genügend Schlüsselwortargumente bereitgestellt
116+
werden, dann werden die übergebenen Schlüsselwortargumente als
117+
finales erforderliches Positionsargument gewertet und eine Warnung
118+
wird ausgegeben. Übergeben Sie das Argument als Hash statt als
119+
Schlüsselwortargumentliste, um die Warnung zu vermeiden und
120+
korrektes Verhalten in Ruby 3 sicherzustellen.
121+
122+
```ruby
123+
def foo(h, **kw); end; foo(key: 42) # Warnung
124+
def foo(h, key: 42); end; foo(key: 42) # Warnung
125+
def foo(h, **kw); end; foo({key: 42}) # OK
126+
def foo(h, key: 42); end; foo({key: 42}) # OK
127+
```
128+
129+
* Wenn eine Methode bestimmte Schlüsselwortargumente, nicht aber den
130+
doppelten Auflösungsoperator verwendet, und ein Hash oder eine
131+
Schlüsselwortargumenteliste mit einer Mischung aus Strings und
132+
Symbolen übergeben wird, dann wird das Hash weiterhin aufgespalten.
133+
Zudem wird eine Warnung ausgegeben. Sie müssen für das korrekte
134+
Verhalten in Ruby 3 den aufrufenden Code so ändern, dass zwei
135+
einzelne Hashes übergeben werden.
136+
137+
```ruby
138+
def foo(h={}, key: 42); end; foo("key" => 43, key: 42) # Warnung
139+
def foo(h={}, key: 42); end; foo({"key" => 43, key: 42}) # Warnung
140+
def foo(h={}, key: 42); end; foo({"key" => 43}, key: 42) # OK
141+
```
142+
143+
* Wenn eine Methode keine Schlüsselwortargumente akzeptiert, aber mit
144+
solchen aufgerufen wird, werden solche Schlüsselwortargumente
145+
weiterhin ohne Warnung als Hash für ein Positionsargument
146+
interpretiert. Dieses Verhalten wird auch in Ruby 3 weiterhin
147+
beibehalten.
148+
149+
```ruby
150+
def foo(opt={}); end; foo( key: 42 ) # OK
151+
```
152+
153+
* Schlüsselwortargumente mit anderen Schlüsseln als Symbolen sind
154+
zulässig, wenn die Methode beliebige Schlüsselwortargumente
155+
akzeptiert. [[Feature #14183]](https://bugs.ruby-lang.org/issues/14183)
156+
157+
```ruby
158+
def foo(**kw); p kw; end; foo("str" => 1) #=> {"str"=>1}
159+
```
160+
161+
* `**nil` kann genutzt werden, um in einer
162+
Methodendefinition ausdrücklich festzulegen, dass die Methode keine
163+
Schlüsselwörter akzeptiert. Der Aufruf einer solchen Methode mit
164+
Schlüsselwortargumenten erzeugt einen ArgumentError. [[Feature #14183]](https://bugs.ruby-lang.org/issues/14183)
165+
166+
```ruby
167+
def foo(h, **nil); end; foo(key: 1) # ArgumentError
168+
def foo(h, **nil); end; foo(**{key: 1}) # ArgumentError
169+
def foo(h, **nil); end; foo("str" => 1) # ArgumentError
170+
def foo(h, **nil); end; foo({key: 1}) # OK
171+
def foo(h, **nil); end; foo({"str" => 1}) # OK
172+
```
173+
174+
* Die Übergabe einess leeren doppelten Auflösungsoperators an eine
175+
Methode, die keine Schlüsselwortargumente akzeptiert, führt nicht
176+
länger zur impliziten Übergabe eines leeren Hashes, es sei denn, das
177+
Hash ist wegen eines erforderlichen Parameters notwendig.
178+
In diesem Fall wird eine Warnung ausgegeben. Entfernen Sie den
179+
doppelten Auflösungsoperator, um ein Hash als Positionsargument zu
180+
übergeben. [[Feature #14183]](https://bugs.ruby-lang.org/issues/14183)
181+
182+
```ruby
183+
h = {}; def foo(*a) a end; foo(**h) # []
184+
h = {}; def foo(a) a end; foo(**h) # {} und Warnung
185+
h = {}; def foo(*a) a end; foo(h) # [{}]
186+
h = {}; def foo(a) a end; foo(h) # {}
187+
```
188+
189+
HINWEIS: Es ist darauf hingewiesen worden, dass die vielen Warnungen über
190+
die Inkompatibilitäten von Schlüsselwortargumenten störend sind. Derzeit
191+
werden zwei mögliche Lösungen diskutiert: die standardmäßige
192+
Abschaltung von Veraltungs-Warnungen ([#16345](https://bugs.ruby-lang.org/issues/16345))
193+
und das Unterdrücken doppelter Warnungen
194+
([#16289](https://bugs.ruby-lang.org/issues/16289)).
195+
Hierüber ist noch nicht abschließend entschieden worden. Dies wird
196+
jedoch bis zur offiziellen Veröffentlichung nachgeholt.
197+
198+
## Sonstige bemerkenswerte neue Funktionen
199+
200+
* Ein Methoden-Referenz-Operator, `.:`, war als experimentelles
201+
Feature in früheren Vorschauen eingeführt worden, wurde aber wieder
202+
entfernt.
203+
[[Feature #12125]](https://bugs.ruby-lang.org/issues/12125),
204+
[[Feature #13581]]( https://bugs.ruby-lang.org/issues/13581),
205+
[[Feature #16275]](https://bugs.ruby-lang.org/issues/16275)
206+
207+
* Blockparameter werden für abgekürzten Zugriff automatisch nummeriert (experimentell).
208+
[#4475](https://bugs.ruby-lang.org/issues/4475)
209+
210+
* Es werden anfangslose Range-Objekte eingeführt. Diese sind vielleicht nicht so
211+
nützlich wie endlose Range-Objekte, könnten aber für
212+
domänenspezifische Sprachen praktisch sein.
213+
[#14799](https://bugs.ruby-lang.org/issues/14799)
214+
215+
```ruby
216+
ary[..3] # identical to ary[0..3]
217+
rel.where(sales: ..100)
218+
```
219+
220+
* `Enumerable#tally` wird hinzugefügt. Die Methode zählt das Vorkommen
221+
jedes Elements.
222+
223+
```ruby
224+
["a", "b", "c", "b"].tally
225+
#=> {"a"=>1, "b"=>2, "c"=>1}
226+
```
227+
228+
* Es ist jetzt zulässig, eine private Methode auf dem Schlüsselwort `self` aufzurufen.
229+
[[Feature #11297]](https://bugs.ruby-lang.org/issues/11297)
230+
[[Feature #16123]](https://bugs.ruby-lang.org/issues/16123)
231+
232+
```ruby
233+
def foo
234+
end
235+
private :foo
236+
self.foo
237+
```
238+
239+
* `Enumerator::Lazy#eager` wird hinzugefügt. Diese Methode generiert
240+
einen nicht verzögertern Enumerator (_non-lazy enumerator_) aus
241+
einem verzögerten Enumerator (_lazy enumerator_). [[Feature #15901]](https://bugs.ruby-lang.org/issues/15901)
242+
243+
```ruby
244+
a = %w(foo bar baz)
245+
e = a.lazy.map {|x| x.upcase }.map {|x| x + "!" }.eager
246+
p e.class #=> Enumerator
247+
p e.map {|x| x + "?" } #=> ["FOO!?", "BAR!?", "BAZ!?"]
248+
```
249+
250+
## Performanzverbesserungen
251+
252+
* JIT [Experimentell]
253+
254+
* JIT-kompilierter Code wird neu zu weniger optimiertem Code
255+
kompiliert, wenn eine Optimierungsannahme sich als falsch
256+
herausstellt.
257+
258+
* Method-Inlining wird durchgeführt, wenn eine Methode als rein
259+
_(pure)_ gilt. Diese Optimierung ist noch experimentell und
260+
zahlreiche Methoden gelten noch nicht als rein.
261+
262+
* Der Standardwert von `--jit-min-calls` wird von 5 auf 10.000
263+
geändert.
264+
265+
* Der Standardwert von `--jit-max-cache` wird von 1.000 auf 100
266+
geändert.
267+
268+
* `Module#name`, `true.to_s`, `false.to_s`,
269+
und `nil.to_s` geben jetzt immer einen eingefrorenen String zurück. Der
270+
zurückgegebene String ist für das jeweilige Objekt immer derselbe.
271+
[Experimenell] [[Feature #16150]](https://bugs.ruby-lang.org/issues/16150)
272+
273+
* Die Performanz von `CGI.escapeHTML` wurde verbessert. [GH-2226](https://github.com/ruby/ruby/pull/2226)
274+
275+
* Die Performanz von Monitor und MonitorMixin wurde verbessert.
276+
[[Feature #16255]](https://bugs.ruby-lang.org/issues/16255)
277+
278+
## Sonstige bemerkenswerte Änderungen seit 2.6
279+
280+
* Einige Standardbibliotheken werden aktualisiert.
281+
* Bundler 2.1.0.pre.3
282+
([Änderungen](https://github.com/bundler/bundler/blob/2-1-stable/CHANGELOG.md#210pre3-november-8-2019))
283+
* RubyGems 3.1.0.pre.3
284+
([Änderungen](https://github.com/rubygems/rubygems/blob/3.1/History.txt))
285+
* CSV 3.1.2
286+
([Neuigkeiten](https://github.com/ruby/csv/blob/v3.1.2/NEWS.md))
287+
* Racc 1.4.15
288+
* REXML 3.2.3
289+
([Neuigkeiten](https://github.com/ruby/rexml/blob/v3.2.3/NEWS.md))
290+
* RSS 0.2.8
291+
([Neuigkeiten](https://github.com/ruby/rss/blob/v0.2.8/NEWS.md))
292+
* StringScanner 1.0.3
293+
* Es werden auch einige Bibliotheken aktualisiert, die nicht über
294+
eine eigenständige Versionsnummer verfügen.
295+
296+
* Änderung von stdlib-Bibliotheken in Standard-Gems:
297+
* Die folgenden Standard-Gems wurden auf rubygems.org veröffentlicht:
298+
* benchmark
299+
* cgi
300+
* delegate
301+
* getoptlong
302+
* net-pop
303+
* net-smtp
304+
* open3
305+
* pstore
306+
* singleton
307+
* Die folgenden Standard-Gems werden nur mit Rubys Kern, aber noch
308+
nicht auf rubygems.org veröffentlicht:
309+
* monitor
310+
* observer
311+
* timeout
312+
* tracer
313+
* uri
314+
* yaml
315+
316+
* Die Nutzung von `Proc.new` und `proc` ohne Block in einer Methode,
317+
die einen Block erwartet, führt nun zu einer Warnung.
318+
319+
* Die Nutzung von `lambda` ohne block in einer Methode, die einen
320+
Block erwartet, erzeugt einen Fehler.
321+
322+
* Die Unicode- und Emoji-Version werden von 11.0.0 auf 12.0.0 angehoben.
323+
[[Feature #15321]](https://bugs.ruby-lang.org/issues/15321)
324+
325+
* Die Unicode-Version wird auf 12.1.0 angehoben, um Unterstützung für
326+
U+32FF SQUARE ERA NAME REIWA zu erhalten. [[Feature #15195]](https://bugs.ruby-lang.org/issues/15195)
327+
328+
* `Date.jisx0301`, `Date#jisx0301`, and `Date.parse` unterstützen die
329+
neue japanische Ära.
330+
[[Feature #15742]](https://bugs.ruby-lang.org/issues/15742)
331+
332+
* Compiler müssen jetzt C99 unterstützen.
333+
[[Misc #15347]](https://bugs.ruby-lang.org/issues/15347)
334+
* Details zum genutzten Dialekt:
335+
<https://bugs.ruby-lang.org/projects/ruby-master/wiki/C99>
336+
337+
Siehe die [NEWS](https://github.com/ruby/ruby/blob/v2_7_0_rc2/NEWS)
338+
oder die [Commit-Logs](https://github.com/ruby/ruby/compare/v2_6_0...v2_7_0_rc2)
339+
für weitere Details.
340+
341+
Mit diesen Änderungen wurden [{{ release.stats.files_changed }}
342+
Dateien geändert, {{ release.stats.insertions }} Einfügungen(+), {{ release.stats.deletions }} Löschungen(-)](https://github.com/ruby/ruby/compare/v2_6_0...v2_7_0_rc2)
343+
seit Ruby 2.6.0!
344+
Viel Spaß bei der Programmierung mit Ruby 2.7!
345+
346+
## Download
347+
348+
* <{{ release.url.bz2 }}>
349+
350+
SIZE: {{ release.size.bz2 }}
351+
SHA1: {{ release.sha1.bz2 }}
352+
SHA256: {{ release.sha256.bz2 }}
353+
SHA512: {{ release.sha512.bz2 }}
354+
355+
* <{{ release.url.gz }}>
356+
357+
SIZE: {{ release.size.gz }}
358+
SHA1: {{ release.sha1.gz }}
359+
SHA256: {{ release.sha256.gz }}
360+
SHA512: {{ release.sha512.gz }}
361+
362+
* <{{ release.url.xz }}>
363+
364+
SIZE: {{ release.size.xz }}
365+
SHA1: {{ release.sha1.xz }}
366+
SHA256: {{ release.sha256.xz }}
367+
SHA512: {{ release.sha512.xz }}
368+
369+
* <{{ release.url.zip }}>
370+
371+
SIZE: {{ release.size.zip }}
372+
SHA1: {{ release.sha1.zip }}
373+
SHA256: {{ release.sha256.zip }}
374+
SHA512: {{ release.sha512.zip }}
375+
376+
## Was ist Ruby
377+
378+
Die Programmiersprache Ruby wurde 1993 von YukihiroMatzMatsumoto
379+
erfunden und wird heute als quelloffene Software entwickelt. Sie läuft
380+
auf verschiedenen Plattformen und wird überall auf der Welt namentlich
381+
für die Webentwicklung genutzt.

0 commit comments

Comments
 (0)