Thread C/C++ vs Clojure vs Perl (20 answers)
Opened by tonewheel at 2014-05-26 21:49

murphy
 2014-05-27 21:23
#175785 #175785
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
2014-05-27T18:55:54 Raubtier
2014-05-27T18:26:11 murphy
2014-05-27T17:55:19 Raubtier
Klar, denn man kann Strings ja ändern.
[...]

Und hundert Punkte bekommt der Kandidat, der auf Anhieb weiß, welche Methoden eines Strings diesen verändern und welche nicht, das ist nämlich alles andere als intuitiv und offensichtlich.

Im Gegensatz zu Perl sagt mir das mein Editor. Und wenn ich einen const string habe, schlägt er mir z.B. reserve gar nicht in der Code-Completion vor. Ausnahmsweise mal ein Punkt an C++ hier!
[...]

Ein Vorteil statischer Typinformation ist die Möglichkeit bessere semantische Werkzeuge wie Editoren zu bauen, ja. Dummerweise ist das Typsystem von C und C++ löchrig und was Dir Dein Editor hier anzeigt könnte täuschen (für das einfache Beispiel mit Strings ist die Information aber vermutlich hilfreich und richtig).

Quote
[...]
Quote
Quote
[...]
(ab C++11 folgt aus const thread-safe).

Alleine die Tatsache, dass man erwähnen muss, dass das erst ab einer bestimmten Sprachversion gilt, lässt schon wieder tief blicken, wie schlecht designt C++ tatsächlich ist und wie verwirrend für Anfänger.


Naja, du kannst in Perl 5.0 auch kein "say" verwenden. Der vorherige relevante Standard ist C++98, dort hatte man sich auf andere Dinge als Nebenläufigkeit konzentriert. Das Design folgt anderen Zielen.
[...]

Das ist aber ein schlechter Vergleich: Unabhängig davon was das Designziel war, enthält oder enthielt der C++ Standard einfach Teile, die überhaupt nicht korrekt implementierbar sind (z.B. external templates) und Teile, die recht unintuitiv sind (z.B. das Verhalten von const). Neuere Versionen des Standards fügen nicht einfach ein kompatibles Feature hinzu (wie Perls say) sondern ändern anscheinend die Definition der Semantik, wenn man Deiner Aussage mit der Threadsicherheit glauben schenken darf.

Das ist eher so, wie wenn Perl bis Version 5.16 alle mit my deklarierten Variablen global abgelegt hätte und jetzt beschließen würde, dieses Verhalten mal abzustellen weil schon lange jeder damit gerechnet hatte, dass es so sein müsste ;-)

Quote
[...]
Quote
Außerdem lässt sich die Aussage, auch wenn sie für const Instanzen von std::string in bestimmten Versionen der STL gelten mag, nicht auf const Instanzen anderer Klassen übertragen.


Weil?
[...]

Zum Beispiel weil es mutable gibt, was dazu führt, dass const Methoden in einer const Instanz trotzdem etwas ändern können.

Zum Beispiel weil auch eine const Instanz Zeiger oder Referenzen enthalten könnte, deren Ziele nicht const sind, denn die Eigenschaft const zu sein ist nicht transitiv.
When C++ is your hammer, every problem looks like your thumb.

View full thread C/C++ vs Clojure vs Perl