Минуло несколько лет с тех пор как была написана первая статья по этой тематике. Как ни странно мое мнение ничуть не изменилось, а даже напротив укрепись. Как и раньше я считаю, что С++ является на сегодняшний день, хотя и сложным , но наиболее удобным, эффективным и продвинутым средством. Некоторые могут меня упрекнуть, что Java и C# более переносимы, на них проще писать, у них меньше проблем с наследованием и управлением памятью. Со всеми этими доводами я не согласен!
Начнем попорядку.
С++ vs Java
Да, на Java писать программы проще, однако язык С++ по словам Б. Страуструпа с самого начала не предназначался для штампованных программистов пишущих штампованные программы. По поводу управления памятью могу привести цитату Б. Страуструпа из книги "Дизайн и эволюция С++ ":
Данные утверждения хорошо иллюстрируются тем фактом, что в свое время шли разговоры (и даже были некоторые экспериментальные разработки) по созданию Java-процессоров напрямую поддерживающих инструкции Java. Вот насколько были плохи дела...При проектировании С++ я сознательно решил не полагаться на автоматическую сборку мусора, опасаясь весьма значительных издержек по времени и памяти, которые удалось наблюдать в различных сборщиках мусора. <...> Общий вывод таков: сборка мусора желательна и возможна, но мы не можем позволить, чтобы от нее была зависима семантика С++ и большинства стандартных базовых библиотек.
В Java реализованы шаблоны, но они сильно уступают по возможностям и гибкости шаблонам С++. Отсюда выдод: зачем нужны инструменты в новом языке, повторяющие уже созданные, но менее совершенные... не понятно...
Некоторые из читателей могу сказать, что Java абсолютно переносима. Нет скажу я Вам... Попробуйте перекомпилировать без виртуальной Java-машины код под процессоры SPARK, MIPS, что не получается? Правильно нужна Java-машина.. Что нет Java-машины под этот процессор? Давайте саму Java-машину перекомпилируем. А тут оп-па! программный код на С++! И кто тут переносимей?)))
С++ vs C#
С C# немного лучше в плане языка - тут тебе и управление памятью на низком уровне (Unmanaged code) и перегрузку операторов для шаблонных можно реализовать (изрядно помявшись правда и спустившись до MASM'a, но кого это пугает!). Но вот незадача, даже под Linux ваша программа не пойдет - .NET Framework нужен! (стоит добавить что существует проект Mono для портирования программ на C# под Linux но он очень далек от совершенства). Заглянем внуть .NET Framework! И... О боже и здесь C++!
В заключении хочу сказать - многие, очень многие пророчут скорую смерть С++.
Бред!
С++ будет еще очень долго существовать, поскольку реальной замены еще даже на горизонте не видно!