0.3 – Введение в C/C++
До C++ был C
Язык C был разработан в 1972 году Деннисом Ричи в лабораториях Bell Telephone, прежде всего как язык системного программирования (язык для написания операционных систем). Основными целями Ричи было создание минималистичного языка, который легко компилируется, обеспечивает эффективный доступ к памяти, создает эффективный код и является автономным (не зависит от других программ). Он был разработан, как язык высокого уровня, чтобы дать программисту большой контроль, в то же время поощряя независимость от платформы (аппаратного обеспечения и операционной системы) (то есть не нужно было переписывать код для каждой платформы).
C оказался настолько эффективным и гибким, что в 1973 году Ричи и Кен Томпсон переписали на нем большую часть операционной системы Unix. Многие предыдущие операционные системы были написаны на ассемблере. В отличие от ассемблера, на котором создаются программы, которые могут работать только на определенных процессорах, C обладал отличной портируемостью, что позволило легко перекомпилировать Unix на множестве разных типов компьютеров и ускорило его внедрение. С и Unix были связаны судьбой, и популярность С была частично связана с успехом Unix как операционной системы.
В 1978 году Брайан Керниган и Деннис Ричи опубликовали книгу под названием «Язык программирования Си». Эта книга, широко известная как K&R (по фамилиям авторов), содержала неофициальную спецификацию языка и стала стандартом де-факто. Когда требовалась максимальная портируемость, программисты придерживались рекомендаций K&R, потому что большинство компиляторов в то время были реализованы по стандартам данной книги.
В 1983 году Американский национальный институт стандартов (ANSI) сформировал комитет, чтобы утвердить для C официальный стандарт. В 1989 (комитеты постоянно что-то делают) они закончили и выпустили стандарт C89, более известный как ANSI C. 1990 Международная организация по стандартизации (ISO) приняла ANSI C (с небольшими изменениями). Эта версия C стала известна как C90. В конечном итоге компиляторы стали совместимыми с ANSI C/C90, и программы, для которых требовалась максимальная портируемость, писались в соответствии с этим стандартом.
В 1999 году комитет ANSI выпустил новую версию языка C под названием C99. C99 принял многие функции, которые уже входили в компиляторы в качестве расширений или были реализованы на C++.
C++
C++ (произносится как «си плюс плюс») разрабатывался Бьярном Страуструпом в Bell Labs как расширение C, начиная с 1979 года. C++ добавляет в язык C много новых функций и, возможно, лучше всего воспринимался как надмножество C, хотя это не совсем верно (поскольку C99 представил несколько функций, которых нет в C++). Претензия C++ на известность в первую очередь объясняется тем, что это объектно-ориентированный язык. Что касается того, что такое объект, и чем объектно-ориентированное программирование отличается от традиционных методов программирования, мы рассмотрим это в главе 8 «Основы объектно-ориентированного программирования».
C++ был стандартизирован комитетом ISO в 1998 году (это означает, что комитет ISO ратифицировал документ, описывающий язык C++, чтобы гарантировать, что все компиляторы придерживаются одного и того же набора стандартов). В 2003 году было выпущено незначительное обновление (под названием C++03).
С тех пор были внесены три основных обновления языка C++ (C++11, C++14 и C++17, ратифицированные в 2011, 2014 и 2017 годах соответственно), каждое из которых добавляет дополнительные функции. В частности, в C++11 добавлено огромное количество новых возможностей, и на данный момент он широко считается новой базовой линией. На момент написания статьи C++20 находится в разработке, обещая добавить еще больше новых возможностей. Будущие обновления языка ожидаются каждые три года или около того.
Каждый новый официальный выпуск языка называется языковым стандартом (или спецификацией языка). Стандарты названы в честь года их выпуска. Например, C++15 не существует, потому что в 2015 году не было нового стандарта.
Философия C и C ++
Основополагающую философию проектирования на C и C++ можно охарактеризовать как «доверять программисту», что одновременно замечательно и опасно. C++ разработан, чтобы дать программисту высокую степень свободы делать то, что он хочет. Однако это также означает, что язык часто не мешает вам делать то, что не имеет смысла, потому что он будет предполагать, что вы делаете это по какой-то причине, которую он не понимает. Существует немало ловушек, в которые могут попасть программисты-новички, если их поймают врасплох. Это одна из основных причин, почему знание того, что вам не следует делать в C/C++, почти так же важно, как знание того, что вам следует делать.
Вопрос: В чем C++ хорош?
C++ отлично подходит в ситуациях, когда требуется высокая производительность и точный контроль над памятью и другими ресурсами. Вот несколько распространенных типов приложений, которые, скорее всего, были бы написаны на C++:
- видеоигры;
- системы реального времени (например, для транспортировки, производства и т.д.);
- высокопроизводительные финансовые приложения (например, высокочастотная торговля);
- графические приложения и приложения моделирования;
- высокопроизводительные офисные приложения;
- встроенное программное обеспечение;
- обработка аудио и видео.
Вопрос: Нужно ли мне знать C, прежде чем я начну работать со статьями из этого учебника?
Нет! Начать с C++ – это нормально, и мы научим вас всему, что вам нужно знать (включая подводные камни, которых следует избегать).
Как только вы освоите C++, изучить стандартный C, если вам когда-нибудь это понадобится, будет довольно легко. В наши дни C в основном встречается в нишевых вариантах использования: код, который выполняется на встроенных устройствах; когда вам нужно взаимодействовать с другими языками, которые могут взаимодействовать только с C; и т.д. Для большинства других случаев рекомендуется C++.