Основная причина использования С++ над управляемым языком в наши дни - получить преимущества, которые С++ приносит в таблицу. Одним из столпов С++ является "вы не платите за то, что вам не нужно". Можно утверждать, что иногда вы не хотите платить за обратную совместимость с C. Многие из нечетных причуд С++ можно отнести к этой обратной совместимости. Какие еще языки существуют там, где "вы не платите за то, что вам не нужно", включая обратную совместимость с C?
Изменить/уточнить: Настоящий убийца для меня находится в этом втором предложении. Есть ли язык, действительно разработанный с нуля, который не навязывает то, что вы не хотите в своем коде? С++ имеет это как философию дизайна: не хотите RTTI? Этого не существует. Не хотите сбор мусора? Это не так. Проблема с С++ заключается в том, что (IMO) нарушает это требование, когда он отказывается отрываться от прошлого. Я не хочу, чтобы крутизна обратной совместимости с 20-летним кодом мешала мне идти вперед. С++ не хочет этого делать. Что есть/есть?
Edit2: Полагаю, мне следовало бы более четко узнать, что такое стоимость. Существует несколько потенциальных затрат. Тот, на котором я первоначально фокусировался, был временем выполнения.
В С++ полиморфизм через виртуальные методы имеет стоимость. Но не все методы оплачивают эту стоимость. Вызывается не виртуальный метод С++ с одинаковой стоимостью времени выполнения, как простая старая функция C (имеющая хотя бы один параметр). С++ не требует использования полиморфизма. В других языках ООП все методы являются виртуальными и поэтому нельзя избежать затрат на полиморфизм.
Расходы на Runtime являются наиболее важными, но другие затраты снижаются. Очевидно, что язык ассемблера будет иметь наименьшие издержки во время выполнения, но затраты на запись и обслуживание языка ассемблера являются огромным ударом по нему.
С этой целью идея состоит в том, чтобы найти языки, которые предоставляют полезные абстракции, которые, когда они не используются, не влияют на затраты времени исполнения.