Soll ich jetzt C ++ 11 Lambdas verwenden?

7

Hier ist mein Dilemma: Ich mag Lambda sehr und habe Boost.Fusion und Phoenix sehr oft benutzt. Sie sind ziemlich ausgereift und spielen gut in vielen Compilern.

Was ist mit den C ++ 11-Lambdas? Sie sind wirklich nett und viel einfacher zu verwenden, dann Alternativen zu booten (keine Funktoren mehr!). Neuere ICC- und GCC-Compiler unterstützen sie. Aber es gibt immer noch viele ICC 9.x und GCC 4.1 und darunter Systeme, ganz zu schweigen von XL und Sun Compilern. Bietet dieser Compiler Lambda-Unterstützung?

Ich tendiere zu denken, dass ich vielleicht darauf warten sollte, C ++ 11-Funktionen zu verwenden, damit ältere Systeme den Code nicht ablehnen. Was denken Sie? Warte, bis ältere Compiler verblassen oder es einfach machen?

    
Anycorn 11.02.2011, 03:35
quelle

4 Antworten

13

Müssen Sie in der Lage sein, Ihren Code mit einem Compiler zu kompilieren, der C ++ 11 Lambdas nicht unterstützt?

Wenn ja, dann können Sie sie (offensichtlich) nicht benutzen. Ansonsten gibt es wirklich keinen Grund, sie nicht zu benutzen.

Es hat einige Änderungen an der Spezifikation von Lambda-Ausdrücken in C ++ 11 gegeben, daher besteht nur ein geringes Risiko, sie jetzt zu verwenden. Sicherlich wird es gelegentlich Compiler-Bugs geben, aber in den meisten Fällen sind es nur wenige.

Das einzige wichtige lambda-bezogene Feature, von dem ich weiß, dass es von den neuesten Versionen mehrerer Compiler, die Lambda-Ausdrücke unterstützen, nicht unterstützt wird, wurde im März hinzugefügt. Dadurch können implizite lambdas implizit in Funktionszeiger umgewandelt werden. Visual C ++ 2010 und Intel C ++ 11.1 unterstützen das nicht (ich habe keine neuere Version von Intel C ++, mit der ich testen kann, tut mir leid). Visual C ++ 11 unterstützt jedoch die implizite Konvertierung.

    
James McNellis 11.02.2011, 03:43
quelle
5

Zielen Sie auf mehrere Compiler? Dann nein. Wenn Sie genau wissen, auf welchen Compiler (n) Sie abzielen, und sie die Syntax auf die gleiche Weise handhaben, dann fahren Sie fort und verwenden Sie die neuen Funktionen!

    
John Fisher 11.02.2011 03:43
quelle
3

Meine Perspektive ist, dass Sie, wenn Sie an einem Bibliothekscode arbeiten, wahrscheinlich warten sollten. Ich meine, wenn Sie eine Bibliothek entweder für die Open-Source-Distribution oder die Verwendung in einem kommerziellen plattformübergreifenden Paket bündeln wollen, dann können Sie kaum kontrollieren, welche Compiler-Unterstützung für Lambdas verfügbar sein wird und wie sie sich verhalten wird. Glücklicherweise handelt es sich bei Lambda-Ausdrücken, so nett sie auch sind, hauptsächlich um syntaktischen Zucker. Sie bieten nicht mehr Funktionalität als traditionelle Funktoren, sie machen es einfach schöner und örtlicher (ich kann mich natürlich irren, meine Kenntnisse über die Verwendung von Lambdas sind ziemlich oberflächlich). Aber typischerweise soll eine Bibliothek die Hässlichkeit der Implementierung verbergen. Und wenn Sie diese Bibliothek für Compiler verwenden müssen, die keine lambdas unterstützen, müssen Sie die alternativen portablen Implementierungen sowieso bereitstellen. Also, es sei denn, es gibt einen klaren Vorteil bei der Verwendung von lambdas in Ihrer Bibliothek (entweder in der Effizienz (Kompilierungszeit oder Laufzeit) oder in der Benutzererfahrung (zB wenn Sie lambdas verwenden, um die Verwendung Ihrer Bibliothek einfacher oder klarer oder intuitiver zu machen) ), ist es wahrscheinlich nicht die Mühe wert.

Für den Benutzercode können Sie die Zielplattformen und / oder Compiler für Ihre Software jedoch leichter steuern. Wenn in diesem Fall alle Compiler, die Sie verwenden möchten, lambdas unterstützen, dann gehen Sie verrückt!

Jetzt der philosophische Punkt, Standards sind da, damit Leute zu ihnen passen. Dazu gehören natürlich die Leute, die die Compiler machen, aber auch die Leute, die sie benutzen. Wenn Leute anfangen, nette Bibliotheken und / oder Software zu schreiben, die Lambda-Unterstützung benötigen, werden Leute, die sie benutzen wollen, sich an die Compilerhersteller beschweren, um die Unterstützung hinzuzufügen, was wiederum Leute dazu animieren wird, Lambdas zu benutzen ... und auch der Ball roll los.

Schließlich denke ich, dass die Programmierer durch die Beurteilung der Menge an Buzz, die dieser neue Standard hervorbringt, und der Aufregung, die während seiner Veröffentlichung auf ihn wartet, diesen Standard schnell zum "Standard" machen werden zu folgen, um am Leben zu bleiben.

    
Mikael Persson 11.02.2011 04:21
quelle
1

In Ihrem eigenen Code, absolut, gehen Sie dafür. Es ist in der Tat eine ausgezeichnete Idee.

Für die Arbeit ist stackoverflow nicht der richtige Ort. Es sei denn, Sie sind der Entscheidungsträger an Ihrem Arbeitsplatz, und Ihr Compiler weiß, wovon Sie sprechen. In diesem Fall ermutige ich Sie, fantastisch zu sein.

    
wilhelmtell 11.02.2011 03:49
quelle

Tags und Links