C++ – компилируемый язык со статической типизацией. С++ сочетает свойства как высокоуровневых, так и низкоуровневых языков программирования. На сегодняшний день С++ развивается с целью соответствия требованиям современного общества.
Обратимся к отрицательным чертам рассматриваемого языка.
- Избыточность синтаксиса. Исследование и дальнейшее использование требуемых постулатов С++ не всегда дает возможность сосредоточиться на задачах и целях программы. К примеру, зачастую появляются трудности применения списков – для верного использования, которых важны шаблоны, область видимости и т.д.
- Перегруженность исходного кода. Существует версия о неизбежности совмещения перегрузки методов (overloading) и переопределения (overriding) метода.
- Длительное время компиляции. С++ обладает большим периодом компиляции в сравнении с языком С.
- Прямое использование указателей (менеджмент памяти). Указатель в С++ рассматривается в качестве переменной, значением которой является адрес ячейки памяти. То есть указатель ссылается на блок данных из области памяти, причем на самое его начало. Прямое использование указателей может повлечь за собой множество проблем.
- Длительное время отладки. Хоть система/программа указывает на ошибки, но это не отменяет неудобства продолжительности времени отладки.
- Поддержка стандарта С++ разными компиляторами. Невзирая на это, не имеется заключений о преимуществе одного компилятора над другими. У каждого из существующих компилятора есть собственные области применения.
- Сложность имплементации, компилятора (действительно, имплементация предполагает реализации различных методов).
- Например, в большинстве случаев оптимизатор лучше пользователя разберется, что следует инлайнить, а что не стоит (в том числе если функция имеет модификатор inline, то это не значит, что она на самом деле она встраиваемая, а обычная скомпилированная функция может быть "развернута" и без явного указания).
- Неоптимальный код (по сравнению с С). В качестве видов оптимизации готового кода в С++ необходимо отметить написание подходящего кода с начала, исключительно использование оптимальных конструкций и оптимизацию уже готового и проверенного кода.
- Высокий порог вхождения при изучении. Необходима квалификация программиста. Более того, сегодня C++ продолжает идти по пути бесконечного усложнения. Современные условия с некоторой вероятностью делают путь его развития трудным. Кроме этого, для работы с данным языком программирования необходимо всегда применять ручное выделение и освобождение памяти, откуда вытекает необходимость внимательности [5, 6].
- Непригодность для больших проектов вследствие экспонентного увеличения наследуемых конструкций.
- Проблемы поддержки конструкции С. Так, языки имеют большое количество различий, и могут возникнуть трудности. Пробуя скомпилировать любую программу под любым компилятором на С++, есть риск столкнуться с основными сложностями. Есть мнения о некоторых неточностях и несоответствиях документации и языка разработки.
- Множественное наследование. Иногда множественное наследование может усложнить поддержку кода, и увеличить сложность программы.
- Узость применения. С++ не широко распространен. В то же время существует версия: ведущая область применения рассматриваемого С++ – крайне популярное и широко применимое системное программирование. Например: при использовании С++ окажется невозможным создание портативной библиотеки для работы с регулярными выражениями, так как в этом случае не получится выполнить компиляцию и генерацию кода в выполнимом файле. Однако, справедливости ради стоит обратить внимание: С++ не в полной мере, но использовался для создания множества полезных приложений. Примеры – таблица.
- Плохая поддержка модульности. В классическом языке С отсутствует модульность на уровне язык, точнее, обеспечение ее переложено на компоновщик [3]. При этом подключение интерфейса внешнего модуля через препроцессорную вставку заголовочного файла (#include) серьезно замедляет компиляцию при подключении большого количества модулей (из-за того, что результирующий файл, обрабатываемого компилятором, оказывается слишком велик по размеру).
Таблица
Приложения, для создания которых, использовался C++
Adobe Systems | браузер Mozilla Firefox | Почтовый клиент Thunderbird |
---|---|---|
Продукты Sun | HotSpot Java Virtual Machine | OpenOffice |
OC Apple OS X написана преимущественно на С++ | Поисковый движок Google | Поисковый движок Google |
MySQL Cluster | Операционная система Symbian | Браузер Chromium |
WindowsXP | Windows NT | Microsoft Office |
Internet Explorer | Visual Studio | SQL |
Получены следующие выводы. Существует версия, что была представлена не полная концепция дополнения существующего языка С избыточными конструкциями вместо создания отдельного инструментария. Данные дополнения не могут эффективно применяться в областях применения языка С (системное программирование) и слишком громоздкие и избыточные для создания приложений.