Skip to content

Commit c79389b

Browse files
committed
Translate 2.7.0-rc1 post (de)
1 parent cfb73d2 commit c79389b

File tree

1 file changed

+385
-0
lines changed

1 file changed

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

0 commit comments

Comments
 (0)