Wszystkie języki nie powinny próbować uwzględniać wszystkich funkcji każdego innego języka.
C ++ jest zasadniczo bardzo wyrafinowanym asemblerem makr. NIE jest to (w tradycyjnym sensie) język wysokiego poziomu, taki jak C #, Java, Objective-C, Smalltalk itp.
Dobrze jest mieć różne narzędzia do różnych zadań. Jeśli mamy tylko młotki, wszystko będzie wyglądać jak gwoździe itp. Posługiwanie się językami skryptowymi jest przydatne do niektórych zadań, a odblaskowe języki OO (Java, Obj-C, C #) są przydatne do innej klasy zadań i super -wydajne, pozbawione kości języki zbliżone do maszyny są przydatne w jeszcze innej klasie zadań (C ++, C, asembler).
C ++ wykonuje niesamowitą pracę polegającą na rozszerzeniu technologii Asemblera na niewiarygodne poziomy zarządzania złożonością i abstrakcjach, dzięki czemu programowanie jest większe, bardziej złożone zadania są znacznie łatwiejsze dla ludzi. Ale niekoniecznie jest to język, który najlepiej nadaje się dla tych, którzy podchodzą do swojego problemu ze ściśle wysokiego poziomu (Lisp, Smalltalk, Java, C #). Jeśli potrzebujesz języka z tymi funkcjami, aby jak najlepiej wdrożyć rozwiązanie swoich problemów, dziękuj tym, którzy stworzyli takie języki, z których wszyscy możemy korzystać!
Ale C ++ jest dla tych, którzy z jakichkolwiek powodów muszą mieć silną korelację między swoim kodem a działaniem maszyny bazowej. Niezależnie od tego, czy jest to wydajność, czy programowanie sterowników urządzeń, czy interakcja z usługami systemu operacyjnego niższego poziomu, czy cokolwiek innego, C ++ jest bardziej odpowiedni do tych zadań.
C #, Java, Objective-C wszystkie wymagają znacznie większego, bogatszego systemu wykonawczego do obsługi ich wykonywania. Środowisko wykonawcze należy dostarczyć do systemu, o którym mowa, wstępnie zainstalowane w celu obsługi działania oprogramowania. Tę warstwę należy utrzymywać dla różnych systemów docelowych, dostosowanych przez NIEKTÓRY JĘZYK, aby działał na tej platformie. I ta środkowa warstwa - ta warstwa adaptacyjna między systemem operacyjnym hosta a twoim kodem - środowisko wykonawcze, prawie zawsze jest napisana w języku takim jak C lub C ++, gdzie wydajność jest na pierwszym miejscu, gdzie zrozumiałe jest dokładne zrozumienie dokładnej interakcji między oprogramowaniem a sprzętem zrozumiany i zmanipulowany do maksymalnego wzmocnienia.
Uwielbiam Smalltalk, Objective-C i posiadanie bogatego systemu wykonawczego z refleksją, metadanymi, wyrzucaniem elementów bezużytecznych itp. Można wykorzystać niesamowity kod, aby skorzystać z tych udogodnień! Ale to po prostu wyższa warstwa na stosie, warstwa, która musi spoczywać na niższych warstwach, które same muszą ostatecznie oprzeć się na systemie operacyjnym i sprzęcie. I zawsze będziemy potrzebować języka, który najlepiej nadaje się do budowania tej warstwy: C ++ / C / Asembler.
Dodatek: C ++ 11/14 nadal rozszerza możliwości C ++ do obsługi abstrakcyjnych poziomów i systemów. Wątki, synchronizacja, precyzyjne modele pamięci, bardziej precyzyjne abstrakcyjne definicje maszyn umożliwiają programistom C ++ osiągnięcie wielu abstrakcyjnych poziomów wysokiego poziomu, nad którymi niektóre z tych tylko języków wysokiego poziomu posiadały wyłączną domenę, jednocześnie zapewniając bliskość do wydajność metalu i doskonała przewidywalność (tj. minimalne podsystemy czasu wykonywania). Być może narzędzia do refleksji zostaną selektywnie włączone w przyszłej wersji C ++ dla tych, którzy tego chcą - a może biblioteka zapewni takie usługi środowiska uruchomieniowego (może jest teraz jedna, lub początki jednej w fazie ulepszenia?).