H
Hello World
Routinier
Die Java-Generics können Templates in >90% aller Fälle ersetzen.von welchen "macken" oder schwächen von c++ sprecht ihr eigentlich? ich finde c++ ist java in fast jeder beziehung voraus.
man hat templates, speicherarythmetik, operatorüberladung, mehrfachvererbung... das alles kann java nicht und deshalb findet ihr c++ schlechter?
Zeigerarithmetik hat sich wiederholt als so fehleranfällig erwiesen, dass man es aus Java herausgelassen hat. Außerdem macht es das sehr viel einfacher, einen performanten Garbage Collector zu implementieren, bei C++ geht das nämlich nicht so einfach. Microsoft hat bei C++/CLI extra einen neuen Zeigertyp eingeführt (der mit ^ anstelle von * markiert wird), mit dem keine Pointerarithmetik nutzbar ist, damit die GC vernünftig funktioniert. Operatorüberladung ist syntaktischer Zucker, den man nicht unbedingt braucht. Was die Mehrfachvererbung angeht, so habe ich mir darüber noch kein Urteil gebildet, aber ich habe schon von vielen Leuten gehört, dass man sie eh so gut wie nie braucht. Außerdem spricht der Fakt, dass die meisten Programmiersprachen sie eben nicht erlauben, nicht gerade für Mehrfachvererbung.
Dieser Satz ist an Blödheit wohl kaum zu überbietenich denke eher, dass java mehr ein spielzeug für anfänger ist.
Und weil Du ja ein paar Macken von C und C++ hören wolltest:
- In C kein Exception Handling, in C++ kein gutes (kein finally-Block)
- keine Reflection, bzw. nur mit zusätzlichen Frameworks wie Qt.
- Kein Schutz vor arithmetischen Überläufen
- Riskante Pointerarithmetik
- keine Garbage Collection (und wegen Pointerarithmetik nicht performant implementierbar)
- rudimentäre Standardbibliothek
- nicht sehr schnell (dass Java und .NET C++ überholen, ist eine Frage weniger Jahre, Java ist jetzt schon etwa 3-5x schneller bei der Speicherallokation)
- bei C++ sehr großer Sprachumfang, also schwieriger zu implementieren, zu lernen und zu optimieren, langsam beim kompilieren.
- Binaries nicht plattformunabhängig
- kein standardisiertes ABI --> Binaries, die mit gcc 3.3 oder älter erstellt wurden, funktionieren teilweise heute nicht mehr
- man muss Header- und Implementierungsdateien separat pflegen, das nervt