KurtZ+2008-02-28 01:50:56--@Murphy:
perl5005delta - what's new for perl5.005
"foreach (1..1000000)" optimized
ist mir eigentlich neu genug
Stimmt schon. Trotzdem ist es doof, dass diese Optimierung im Prinzip ein Implementationsdetail ist und nicht vom Sprachstandard vorgesehen wird. Aber andererseits ist das bei Perl nicht schrecklich relevant da es nur eine Implementation gibt ;-)
QuoteQuoteAußerdem fehlt leider die Möglichkeit, Objekten eigener Klassen eine Iterationsfunktionalität zu verpassen :-(
ähm ich verstehe dich nicht ganz, was hindert dich daran eine Klassenvariable anzulegen die ein Array aller Objektrefs ist.
(ungetesteter Code)
Daran hindert mich gar nichts, es ist aber umständlich, speicheraufwändig und nicht intuitiv zu benutzen wenn eigentlich das Objekt selber eine iterierbare Datenstruktur sein soll.
Quoteoder eine Klassenmethode next() anzulegen:
Auch daran hindert mich nichts, aber es ist nicht threadsicher und ebenfalls unintuitiv zu benutzen, weil es sich wie auch die Lösung mit der Instanzvariablen einfach anders verhält als die Iteration über ein natives Array.
Quoteoder was möchtest du genau???
Etwas wie das
Iterable-Interface von Java, C# oder jeder anderen vernünftigen objektorientierten Sprache ;-)
Es stört mich einfach, dass das Iterieren über Kollektionen von Objekten im Speziellen und die Typen von Kollektionen im Allgemeinen bei Perl nicht konsequent aus einem Guss sind. Für meinen Geschmack würde es von besserem Sprachdesign zeugen, wenn man zum Beispiel sowohl
foreach my $value (@stuff) { ... } als auch
foreach my ($key, $value) (%stuff) { ... } als auch
foreach my $line (<>) { ... } als auch
foreach my $sonstwas ($irgendein_objekt) { ... } schreiben könnte und keine dieser Varianten nutzlos Speicher verpulvern würden.
Das fällt aber wie gesagt in den Bereich der Geschmacksfragen und wenn's mir nicht passt, muss ich ja kein Perl programmieren ;-)
When C++ is your hammer, every problem looks like your thumb.