Характеристики языка C++


Сложность

Есть интересная фраза Бьёрна Страуструпа о языках C и C++:

C makes it easy to shoot yourself in the foot. C++ makes it harder, but when you do, it blows away your whole leg.
(В языке С легко прострелить себе ногу. В С++ это сложнее, но если вы сделаете это, то отстрелите всю ногу целиком.)

Такова цена мощности языка — программист получает больше возможностей, но вместе с тем и ответственность становится больше. На плечи программиста ложится много дополнительной
работы:
  • проверка корректности данных;
  • управление памятью;
  • обработка низкоуровневых ошибок.

Другая интересная цитата пришла из времен первой стандартизации языка и принадлежит Джиму Вальдо:

Every extension proposal should be required to be accompanied by a kidney. People would submit only serious proposals, and nobody would submit more than two.
(Нужно, чтобы к каждому предложению о расширении языка обязательно прилагалась почка. Тогда люди присылали бы только очень важные предложения, и никто не прислал бы более двух.)

C++ оснащен огромным количеством самых разнообразных средств. Описание стандарта занимает более 1300 страниц текста.


Мультипарадигмальный

На C++ можно писать программы в рамках нескольких парадигм программирования:
  • процедурное программирование:
    • код “в стиле C”;
  • объектно-ориентированное программирование:
    • классы;
    • наследование;
    • виртуальные функции;
  • обобщённое программирование:
    • шаблоны функций и классов;
  • функциональное программирование:
    • функторы;
    • безымянные функции;
    • замыкания;
  • генеративное программирование:
    • метапрограммирование на шаблонах.

Эффективный

Одна из фундаментальных идей языков C и C++ — отсутствие неявных накладных расходов, которые присутствуют в других более высокоуровневых языках программирования.
  • Программист сам выбирает уровень абстракции, на котором писать каждую отдельную часть программы.
  • Можно реализовывать критические по производительности участки программы максимально эффективно.
  • Эффективность делает C++ основным языком для разработки приложений с компьютерной графикой (к примеру, игры).

Низкоуровневый

Язык C++, как и C, позволяет работать напрямую с ресурсами компьютера.
  • Позволяет писать низкоуровневые системные приложения (например, драйверы операционной системы).
  • Неаккуратное обращение с системными ресурсами может привести к падению программы.
В C++ отсутствует автоматическое управление памятью.
  • Позволяет программисту получить полный контроль над программой.
  • Необходимость заботиться об освобождении памяти.

Компилируемый

C++ является компилируемым языком программирования. Для того, чтобы запустить программу на C++, её нужно сначала скомпилировать. Компиляция — преобразование текста программы на языке программирования в машинный код.
  • Нет накладных расходов при исполнении программы.
  • При компиляции можно отловить некоторые ошибки.
  • Требуется компилировать для каждой платформы отдельно.

Статическая типизация

C++ является статически типизированным языком.
  1. Каждая сущность в программе (переменная, функция и пр.) имеет свой тип,
  2. и этот тип определяется на момент компиляции.
Это нужно для того, чтобы
  1. вычислить размер памяти, который будет занимать каждая переменная в программе,
  2. определить, какая функция будет вызываться в каждом конкретном месте.
Всё это определяется на момент компиляции и “зашивается” в скомпилированную программу. В машинном коде никаких типов уже нет — там идёт работа с последовательностями байт. 

Комментариев нет:

Отправить комментарий