Усі мови не повинні намагатися включати всі особливості будь-якої іншої мови.
C ++ - це, по суті, дуже і дуже складний макроскладач. Це НЕ (у традиційному розумінні) мова високого рівня, наприклад C #, Java, Objective-C, Smalltalk тощо.
Добре мати різні інструменти для різних робіт. Якщо у нас є лише молотки, всі речі виглядатимуть як цвяхи тощо. Наявність мов скриптів корисно для деяких завдань, а відбиваючі мови OO (Java, Obj-C, C #) корисні для іншого класу завдань, і супер -ефективні мови, близькі до машини, голі кістки корисні для ще одного класу завдань (C ++, C, Assembler).
C ++ виконує дивовижну роботу з розширення технології Assembler до неймовірних рівнів управління складністю та абстракцій, щоб зробити програмування більшими, складнішими завданнями набагато більш можливими для людини. Але це не обов'язково мова, яка найкраще підходить для тих, хто підходить до своєї проблеми зі строго високого рівня (Lisp, Smalltalk, Java, C #). Якщо вам потрібна мова з цими функціями, щоб найкраще реалізувати рішення ваших проблем, то подякуйте тим, хто створив такі мови для всіх нас!
Але C ++ призначений для тих, хто з будь-якої причини (-ів) повинен мати сильну кореляцію між своїм кодом та роботою базової машини. Незалежно від його ефективності, або програмування драйверів пристроїв, або взаємодії зі службами нижчого рівня ОС, або будь-яким іншим, C ++ краще підходить для цих завдань.
Для C #, Java, Objective-C потрібна значно більша, багатша система виконання для підтримки їх виконання. Цей час виконання повинен бути доставлений до відповідної системи - попередньо встановлений для підтримки роботи вашого програмного забезпечення. І цей шар повинен підтримуватися для різних цільових систем, налаштованих ДУМОЮ ІНШОЮ МОВОЮ, щоб він працював на цій платформі. І той середній шар - той адаптивний шар між хост-операційною системою та вашим кодом - під час виконання, майже завжди написаний такою мовою, як C або C ++, де ефективність №1, де передбачуване розуміння точної взаємодії програмного забезпечення та обладнання може бути добре зрозуміли і маніпулювали до максимальної вигоди.
Я люблю Smalltalk, Objective-C і маю багату систему виконання з відображенням, метаданими, збиранням сміття тощо. Дивовижний код можна написати, щоб скористатися цими можливостями! Але це просто більш високий шар на стеку, шар, який повинен опиратися на нижчі шари, який сам повинен врешті-решт сидіти на ОС та апаратному забезпеченні. І нам завжди буде потрібна мова, яка найкраще підходить для створення цього шару: C ++ / C / Assembler.
Додаток: C ++ 11/14 продовжує розширювати можливості C ++ для підтримки абстракцій та систем вищого рівня. Нитки, синхронізація, точні моделі пам’яті, більш точні визначення абстрактних машин дозволяють розробникам C ++ досягти багатьох абстракцій високого рівня, якими деякі з цих мов лише високого рівня використовували ексклюзивний домен, продовжуючи надавати тісний продуктивність металу та відмінна передбачуваність (тобто мінімальні підсистеми виконання). Можливо, засоби відображення будуть вибірково включені в майбутньому перегляді C ++, для тих, хто цього хоче, або, можливо, бібліотека надаватиме такі послуги часу (можливо, це є зараз, або початок роботи в цій програмі?).