Alle Sprachen sollten nicht versuchen, alle Funktionen jeder anderen Sprache zu integrieren.
C ++ ist im Wesentlichen ein sehr, sehr ausgefeilter Makro-Assembler. Es ist KEINE (im traditionellen Sinne) Hochsprache wie C #, Java, Objective-C, Smalltalk usw.
Es ist gut, verschiedene Werkzeuge für verschiedene Jobs zu haben. Wenn wir nur Hämmer haben, werden alle Dinge wie Nägel usw. aussehen. Skriptsprachen sind für einige Jobs nützlich, und reflektierende OO-Sprachen (Java, Obj-C, C #) sind für eine andere Klasse von Jobs nützlich und super -effiziente Bare-Bones-Sprachen in der Nähe der Maschine sind nützlich für eine weitere Klasse von Jobs (C ++, C, Assembler).
C ++ leistet einen erstaunlichen Beitrag zur Erweiterung der Assembler-Technologie auf ein unglaubliches Maß an Komplexitätsmanagement und Abstraktionen, um das Programmieren größerer, komplexerer Aufgaben für den Menschen erheblich zu ermöglichen. Es ist jedoch nicht unbedingt eine Sprache, die am besten für diejenigen geeignet ist, die sich ihrem Problem aus einer streng hochrangigen Perspektive nähern (Lisp, Smalltalk, Java, C #). Wenn Sie eine Sprache mit diesen Funktionen benötigen, um eine Lösung für Ihre Probleme zu implementieren, dann danken Sie denen, die solche Sprachen erstellt haben, damit wir sie alle verwenden können!
C ++ ist jedoch für diejenigen gedacht, die aus irgendeinem Grund eine starke Korrelation zwischen ihrem Code und dem Betrieb des zugrunde liegenden Computers benötigen. Unabhängig von der Effizienz, der Programmierung von Gerätetreibern oder der Interaktion mit den untergeordneten Betriebssystemdiensten oder was auch immer, C ++ ist für diese Aufgaben besser geeignet.
C #, Java und Objective-C erfordern alle ein viel größeres und umfangreicheres Laufzeitsystem, um ihre Ausführung zu unterstützen. Diese Laufzeit muss an das betreffende System geliefert werden - vorinstalliert, um den Betrieb Ihrer Software zu unterstützen. Und diese Schicht muss für verschiedene Zielsysteme beibehalten werden, die von EINIGER ANDERER SPRACHE angepasst wurden, damit sie auf dieser Plattform funktioniert. Und diese mittlere Schicht - diese adaptive Schicht zwischen dem Host-Betriebssystem und Ihrem Code - die Laufzeit - wird fast immer in einer Sprache wie C oder C ++ geschrieben, in der die Effizienz an erster Stelle steht und in der das genaue Verständnis der genauen Interaktion zwischen Software und Hardware gut sein kann verstanden und auf maximale Verstärkung manipuliert.
Ich liebe Smalltalk, Objective-C und ein reichhaltiges Laufzeitsystem mit Reflexion, Metadaten, Speicherbereinigung usw. Es kann erstaunlicher Code geschrieben werden, um diese Funktionen zu nutzen! Aber das ist einfach eine höhere Schicht auf dem Stapel, eine Schicht, die auf niedrigeren Schichten ruhen muss, die letztendlich selbst auf dem Betriebssystem und der Hardware sitzen muss. Und wir werden immer eine Sprache brauchen, die am besten zum Erstellen dieser Ebene geeignet ist: C ++ / C / Assembler.
Nachtrag: C ++ 11/14 erweitert die C ++ - Fähigkeit zur Unterstützung übergeordneter Abstraktionen und Systeme weiter. Threading, Synchronisation, präzise Speichermodelle und präzisere abstrakte Maschinendefinitionen ermöglichen es C ++ - Entwicklern, viele der Abstraktionen auf hoher Ebene zu erzielen, über die einige dieser nur auf hoher Ebene verwendeten Sprachen exklusive Domänen verfügten, während sie weiterhin nahezu Metallleistung und hervorragende Vorhersagbarkeit (dh minimale Laufzeitsubsysteme). Möglicherweise werden Reflexionsfunktionen in einer zukünftigen Version von C ++ für diejenigen, die dies wünschen, selektiv aktiviert - oder eine Bibliothek bietet solche Laufzeitdienste an (möglicherweise gibt es jetzt einen oder die Anfänge eines Boost-Dienstes?).