Warum sind Enumeratoren in Ruby (2.0 +) standardmäßig nicht faul?

8

Warum verhält sich Ruby Enumerator standardmäßig nicht wie Enumerator::Lazy ?

Gibt es einen Fall, in dem jemand eine nicht-faule Enumerator verwenden möchte?

Bearbeitet:

Ein Kommentar zu den Rückwärtskompatibilitätsantworten unten erklärt, warum ich noch nicht überzeugt bin:

Nehmen wir an, wir hätten diese "brechenden" Änderungen zu Ruby 2.0.0 hinzugefügt, das eine Hauptversion ist, Sie würden Ihren Code (vor allem wenn Sie in die Produktion gehen) gründlich testen, bevor Sie den Wechsel machen, nein?

Bearbeiten Sie # 2

Ich vermutete, dass es etwas mit Effizienz zu tun hat (lassen Sie es mich wissen, wenn etwas nicht stimmt), also habe ich den folgenden Benchmark gemacht: (Natürlich gibt es Orte, an denen faul ist besser. Das ist möglicherweise zu zeigen, warum Ruby nicht ist Faulenzen die ganze Zeit?)

%Vor%

Ich bekomme Folgendes: (vielleicht aufgrund des Aufrufs von .lazy Methode anstelle von Enumerator::Lazy von Anfang an?)

%Vor%     
Abdo 13.02.2014, 19:44
quelle

2 Antworten

3

Wenn Sie Faulheit als Standard festlegen möchten, wäre breaking change für jeden Code, der erwartet / verwendet wird auf Nebenwirkungen.

Jede frühere Verwendung von Enumerator müsste untersucht und getestet werden. Der "sicherste" / "vernünftigste" Ansatz besteht einfach darin, das nicht-faule Verhalten als Standard beizubehalten - und gleichzeitig eine Lazy-Alternative bereitzustellen.

Einige grundlegende / vorherige Entwurfsentscheidungen werden nicht so leicht verworfen; Enumeratoren werden so weit wie Ruby 1.8.7 unterstützt.

    
user2864740 13.02.2014, 19:51
quelle
2

Wahrscheinlich aus Gründen der Kompatibilität. Lazy Enumeratoren wurden kürzlich eingeführt, und viele Code hängen davon ab, dass Enumeratoren nicht faul sind.

    
sawa 13.02.2014 19:47
quelle

Tags und Links