MasterK hat geschrieben:
Und wie schreibst du in C++ deine delegates/events? Properties? Wie sieht die foreach-schleife in C++ aus? Schreibst du in c++ auch sowas wie "5.toString()"? Anonyme methoden? Partielle klassen? LINQ (auch wenns dir nicht gefällt, das ist ja kein kriterium)? Attribute?
Delegates/Events:
Das hängt vom Framework ab, daher in meinen Augen kein Feature der Sprache an sich.
In WxWidgets läuft das Win32 API like über Callbacks, wobei hier die Möglichkeit besteht über zusätzliche Bibliotheken das selbe zu erreichen.
In Qt läuft das letztlich über das gleiche System, 2 Methoden werden durch ein Objekt verbunden
Mit MFC grausam über Macros, was aber auch am ehesten mit Qt/.NET vergleichbar ist, weil hier vorm compilieren der Code noch verändert wird.
Und in .NET muss man teilweise auch auf das Callback Konzept zurückgreifen z.B. bei der Benutzung der Win32Api oder auch bei Threads.
Properties:
Sind Methoden, get_*/set_*. Daher würde ich auch das als Compiler-Feature bezeichnen, und damit indirekt als Sprachfeature, denn hier baut der Compiler dir die Methoden. Also vergleichbar mit dem Meta-Object Compiler aus Qt.
Potenziell kann sich jeder sowas selbst bauen in dem er ein eigenen Programm/Script vor dem übersetzen über den Code laufen lässt und "x" durch "y" ersetzt.
foreach:
Das würde ich klar als Compiler-Feature bezeichnen, denn durch z.B. ein Macro würde man genau das gleiche erreichen. Syntaktisch ist es in der Tat nur ähnlich, weil halt in der einen Sprache/Framework ein "in" statt "," verwendet wird und entsprechend durch den Compiler ersetzt wird.
oder mit der STL so
http://www.cplusplus.com/reference/algorithm/for_each/
Grundsätzlich aber Feature-Technisch auch mehr oder weniger überall vorhanden.
Wobei, in diesem Zusammenhang, vielleicht interessant wäre das diese Vereinfachung (foreach in .NET) auf Kosten der Performance geht, solange man keine Collection durchläuft(!) und bei Collections immer über den Key laufen, es fallen mindestens 2 Operationen pro foreach Schleife mehr an als bei einer vergleichbaren for-Schleife. 5 Operationen für eine foreach-Schleife gegenüber 3 Operationen bei einer for-Schleife. Teilweise werden auch die Objekte vorher noch kopiert.
partielle Klassen:
Ich weiss nicht ob sowas auch in C++ geht, ich denke das kann man ruhig als Sprach, und damit als Compiler, Feature bezeichnen.
LINQ:
Ist letztlich ja auch nur etwas das vor dem übersetzen durch Code ersetzt wird. Daher Sprach/Compiler-Feature.
Das ist für mich ein Compiler-Feature,
denn vollständig würde der Code so aussehen:
Hier wird eine Variable durch den Compiler stark typisiert, also so als wenn ich selbst:
geschrieben hätte.
Das Feature an sich, würde ich dem Compiler/Präprozessor zuordnen, da halt Code erzeugt wird. Ist halt ne Vereinfachung für mich. Syntaktisch aber in meinen Augen gleich.
Objekt/Struct-Punkt-Methode
MasterK hat geschrieben:
Das (und das war ja bei weitem nicht alles) sind alles sprachelemente, also syntax. Die syntax einer sprache besteht ja nun nicht nur aus der art und weise, wie man blöcke kennzeichnet.
Dann haben wir beide einfach eine andere Auffassung davon was Sytax bedeutet, das ist aber ja auch in Ordnung.
In meinen Augen besteht die Syntax nur daraus wie man Klassen definiert, Enums, Böcke, Variablen, Schleifen, Operatoren, Methoden und Kontrollstrukturen. Und da gibt es eben nur das ";" mehr in c++ bei Enums und Klassen, "::" in c++ statt "." in C# für Namespaces. Und ein paar, drei oder vier die mir spontan einfallen, Unterschiede bei den Operatoren.
MasterK hat geschrieben:
Und wenn man mit C++ programmierern ein project praktisch komplett neu in C# aufziehen will, dann verwette ich meinen arsch, dass der erste versuch nach einer weile als eher suboptimal angesehen wird. Ist das gleiche wie wenn du c++ entwickler an ein java-projekt setzt. Auch da kommt nicht sofort die krone der entwickler-schöpfung bei raus. Und wenn die C++ entwickler dann auch noch C-altlasten mit sich rumschleppen, siehts ganz schnell ganz übel aus.
Daher ist es durchaus nicht unwichtig, ob du nun einen haufen C++ entwickler hast oder auch leute mit C# erfahrung. Da reicht ja ein teil, aber wenn du nur leute mit c++ erfahrung hast, da geht dann einfach viel zeit für einlernen und erfahrung sammeln drauf. Und die zeit hat man nunmal eher selten.
Hier würde ich mit ja und nein zustimmen.

Also was Leute angeht die mit C großgeworden sind, ganz klar ja. Da war halt prozedural angesagt, jetzt ist Objektorientierung angesagt. Und wir Menschen sind halt faul und wählen schnell mal den "quick and dirty" Weg statt den designtechnisch sauberen zu wählen, mache ich selbst ja auch ab und an mal.

Leute die mit C++ groß geworden sind, und gelernt haben nicht diese c Altlasten zu verwenden, da denke ich schon das die keine größeren Probleme hätten bei einem Umstieg da sich meiner Meinung nach eben nur das Framework, also die Bibliothek(en) ändert.
Interfaces z.B. sind ja keine neue Erfindung, in C++ wäre das eine Klasse mit lauter virtuellen Methoden.
Abschliessend würde ich die meisten der Punkte als Framework oder Bibliothek spezifische Konzepte bezeichnen.
Bei der Trennung zwischen Sprach- und Compiler-Feature tue ich mich in der Tat auch etwas schwer bzw. dessen Definition.
EDIT:
Hauptsächlich Rechtschreibung korrigiert.