Следующая статья поможет вам: Использование C и C++ в современных системах
До эры С
Ранние версии компьютеров середины 1940-х годов имели так мало памяти и вычислительных ресурсов, что их программирование было возможно в основном на машинном коде.
В 1954 году группа под руководством Джона Бэкуса из IBM изобрела язык FORTRAN, который стал первым широко используемым высокоуровневым языком программирования общего назначения.
LISP (1958 г.), изобретенный Джоном Маккарти, и COBOL (1959 г.), созданный Комитетом ближнего действия, до сих пор используются в некоторых областях.
В конце 1950-х комитет американских и европейских ученых-компьютерщиков опубликовал «новый язык для алгоритмов» — отчет ALGOL 60 («АЛГОрифмический язык»), сыгравший важную роль в дальнейшем развитии многих языков программирования.
В 1964 году Джон Джордж Кемени и Томас Юджин Курц из Дартмутского колледжа изобрели язык программирования BASIC. Этот язык программирования стал рабочим инструментом для миллионов пользователей на всех типах компьютеров.
В 1970 году Никлаус Вирт изобрел PASCAL; на этом языке программирования были написаны миллиарды строк полезного кода.
Как говорится, нет плохих языков программирования, есть только определенные задачи, для которых эти языки созданы.
С
Язык программирования C был разработан Деннисом Ритчи между 1969 и 1973 годами в лабораториях Bell Labs, и к 1973 году большая часть ядра UNIX, первоначально написанного на ассемблере PDP-11/20, была скопирована на него. Язык C был разработан для решения проблем предыдущих языков, таких как B, BCPL и т. д.
«Язык программирования C» (иногда называемый K&R по инициалам его авторов) — книга, написанная Брайаном Керниганом и Деннисом Ричи, последний из которых изначально разработал и реализовал язык C, а также совместно участвовал в разработке языка C. Операционная система Юникс. Первое издание книги вышло в начале 1978 года.
Сначала язык был стандартизирован как ANSI C, а затем этот стандарт был принят Комитетом ISO по международной стандартизации как ISO C, также известный как C90. C90 был обновлен до C99 по мере добавления новых функций. Язык C разрабатывался как язык системного программирования, для которого можно создать однопроходный компилятор.
С++
Язык C++ возник в начале 1980-х годов, когда Бьерн Страуструп, сотрудник Bell Labs, внес ряд улучшений в язык C для собственных нужд. Когда в конце 1970-х годов Страуструп начал работать в Bell Labs над задачей теории массового обслуживания, он обнаружил, что попытки использовать существующие на тот момент языки моделирования неэффективны, а высокоэффективные машинные языки слишком сложны.
Вспоминая опыт своей диссертации, Страуструп решил дополнить язык C возможностями, имеющимися в языке Simula. Страуструп добавил в язык C возможность работы с классами и объектами. Первый коммерческий выпуск C++ состоялся в октябре 1985 года. А в 1998 году был ратифицирован международный стандарт языка C++: ISO/IEC 14882:1998 «Стандарт для языка программирования C++».
Где использовать C для разработки современных информационных систем
C — эффективный и компактный язык программирования, отлично подходящий для написания и т. д. Это легкий, гибкий язык, который довольно легко освоить. Таким образом, можно предположить, что для определенного типа программирования он лучше C++.
Основные особенности C следующие:
- простая языковая база, из которой многие важные функции были перенесены в стандартную библиотеку, например математические или файловые функции;
- сосредоточиться на процедурном программировании;
- Система типов, предотвращающая бессмысленные операции;
- использование препроцессора для абстракции однотипных операций;
- доступ к памяти с помощью указателей;
- небольшое количество ключевых слов;
- передача параметров в функцию по значению, а не по ссылке (передача по ссылке эмулируется с помощью указателей);
- наличие указателей на функции и статические переменные;
- области имен;
- структуры и объединения — это определяемые пользователем коллективные типы данных, которыми можно манипулировать как одним целым.
Однако в языке программирования C нет:
- вложенные функции;
- прямой возврат нескольких значений из функций;
- средства автоматического управления памятью;
- встроенное объектно-ориентированное программирование;
- инструменты функционального программирования.
Где лучше использовать C++
C++ имеет много других функций по сравнению с C, включая объектно-ориентированное программирование (ООП). ООП предоставляет лучший инструмент для управления сложными и крупными программными решениями. C++ — самый мощный и один из самых сложных языков в мире.
C++ может обеспечить лучшую эффективность и производительность; однако с более сложными функциями возникает больше ответственности. Многие современные языки программирования высокого уровня, такие как C++, C# и Java, обычно считаются преемниками C. В C++ ключевую роль играет объектно-ориентированный уровень, который увеличивает скорость и производительность разработчика.
Все, что есть в C, есть и в C++. C++ не нов и сам по себе был основой для многих языков, таких как Python, Perl и PHP. Тем не менее, он добавляет несколько современных элементов, в частности ООП, которые делают его на голову выше C.
C++ является объектно-ориентированным. Это приводит к повышению производительности и организации кода, что успешно используется для создания сложных приложений. Он был успешно применен к быстрым серверным приложениям и программному обеспечению. Он имеет преимущества как высокоуровневых, так и низкоуровневых языков программирования.
C++ хорошо интегрируется и эффективно работает с другими языками. Практически любая система может компилировать и даже более того, может эффективно выполнять код C++.
В C++ выделение и освобождение динамической памяти упрощается с помощью ключевых слов «новый» и «удалить». В C вы должны использовать функции alloc, calloc и malloc для динамического выделения памяти, что требует дополнительных усилий и осторожности при работе с памятью.
C++ — это объектно-ориентированный язык, который позволяет повторно использовать код и модули с помощью стандартной библиотеки и множества доступных решений в виде открытых и коммерческих библиотек. C++ имеет стандартную библиотеку шаблонов, которая включает в себя различные алгоритмы, структуры данных и итератор, пользовательские интерфейсы рабочего стола, трехмерную графику и т. д.
С против С++
Мы не можем напрямую сравнивать C и C++, потому что это разные языки, основанные на разных концепциях. Однако в следующей таблице показаны некоторые различия между этими языками программирования.
С |
С++ |
|
---|---|---|
Тип языка |
Процедурно-ориентированный |
Объектно-ориентированный |
Уровень абстракции |
Самый низкий уровень |
Низкий уровень |
Управление памятью |
Руководство |
Вручную (новый, удалить) |
Масса |
Очень легкий, скомпилированный |
Легкий, скомпилированный |
Производительность |
Очень быстро |
Примерно на 1-5% меньше, чем C |
Портативность |
Очень высоко |
Почти очень высокий |
Области применения |
Подходит для встроенного программирования, системного уровня, высокоскоростных систем, драйверов устройств. |
Подходит для серверных приложений, 3D-графики, игр, сетей |
Ввод |
Слабый и статичный |
Статический, именительный |
Парадигма |
Императив |
Мультипарадигма |
Опубликованы наиболее ценные бенчмарки здесь. Производительность C очень высока, а производительность C++ почти на том же уровне (конечно, если вы правильно используете ООП).
Производительность C и C++
Любые другие языки программирования высокого уровня будут работать медленнее по сравнению с C или C++. Некоторые языки, использующие интерпретаторы, очень медленные.
C++ ООП: объектный подход
Когда Бьерн Страуструп создал первую версию C++, она называлась «C с классами». Таким образом, классы и объектно-ориентированная парадигма являются базовой концепцией C++. Опишем основные понятия ООП.
Сорт
Классы являются основой C++. Это определяемый пользователем тип данных. Класс определяет новый тип данных, который сочетает в себе код и данные. Синтаксис класса аналогичен структуре. Однако класс может также включать функции, а не только данные.
Объект
Объект является экземпляром класса. Объект в объектно-ориентированном программировании (ООП) — ключевое понятие объектно-ориентированного проектирования и технологии программирования; воплощение абстрактной модели отдельного объекта (предмета или понятия), имеющего четко выраженное функциональное назначение в определенной области, относящегося к определенному классу и характеризующегося своими свойствами и поведением. Объекты являются базовыми элементами построения программы и в ООП рассматриваются как набор объектов, находящихся в определенных отношениях и обменивающихся сообщениями.
Инкапсуляция
Инкапсуляция — один из трех основных механизмов объектно-ориентированного программирования. Дело в том, что объект содержит не только данные, но и правила их обработки, исполняемые в виде исполняемых фрагментов (методов). Доступ к состоянию объекта строго запрещен, и с ним можно взаимодействовать извне только через заданный интерфейс (открытые поля и методы), что снижает связность.
Абстракция
Абстракция в объектно-ориентированном программировании — это использование только тех характеристик объекта, которые представляют его с достаточной точностью в данной системе. Основная идея состоит в том, чтобы представить объект с минимальным набором полей и методов и с достаточной точностью для решаемой задачи. Абстракция лежит в основе объектно-ориентированного программирования и позволяет работать с объектами, не вдаваясь в конкретную их реализацию. Основная идея состоит в том, чтобы отделить несущественные детали реализации подпрограммы от характеристик, необходимых для ее правильного использования.
Полиморфизм
Полиморфизм — это концепция программирования, которая использует общий интерфейс для обработки различных специализированных типов. В отличие от полиморфизма понятие мономорфизма требует однозначного сравнения.
Наследование
В объектно-ориентированном программировании наследование — это механизм образования новых классов на основе использования существующих. Свойства и функциональность родительского класса переходят к классу-потомку (дочернему). Определение нового класса (производного класса, подкласса) может быть основано на определении существующего (базового класса, суперкласса).
Стандарт C++11 и стандарт C++17
Новый стандарт C++11 включает в себя дополнения к основному языку и расширение стандартной библиотеки, включая большую часть TR1 — за исключением, вероятно, библиотеки специальных математических функций.
Возникла необходимость в разработке ядра языка C++ и были внесены значительные улучшения: добавлена поддержка многопоточности, улучшена поддержка обобщенного программирования, унифицирована инициализация, проведены работы по повышению его общей производительности.
Текущий стандарт ISO C++ официально известен как международный стандарт ISO ISO/IEC 14882:2017(E) — язык программирования C++.
Улучшение юзабилити для нового стандарта C++ коснулось следующих тем: списки инициализации, обработка исключений, универсальная инициализация, вывод типов, коллекция for-цикла, лямбда-функции и выражения, функции с альтернативным синтаксисом, улучшенные конструкторы объектов, квалификаторы по умолчанию и удаление, явная подстановка виртуальных функций и окончательность, константа нулевого указателя, перечисления со строгой типизацией, угловые скобки, явные операторы преобразования, определение типа шаблона, удаление ограничений из объединения и идентификаторы со специальным значением.
Для расширенной функциональности также были добавлены: шаблоны с переменным количеством аргументов, новые строковые литералы, пользовательские литералы, многопоточная модель памяти, внутрипоточное хранилище, явное задание по умолчанию и удаление специальных методов, тип long long int, static диагностика, рабочий размер с элементами данных в классах без создания объекта, контроль выравнивания объектов и запросов на выравнивание, разрешение реализаций со сборщиком мусора и атрибуты.
Но это еще не все. В стандарте C++17 были внесены глобальные изменения: спецификация исключений теперь является частью системы типов, новое с избыточным выравниванием, обязательным копированием, более строгим порядком вычислений, постоянной оценкой всех нетиповых аргументов шаблона, в «для » может быть и разного типа.
Заключение
Linux, Php и Git — популярные проекты, разработанные на C. С другой стороны, OpenOffice, Firefox, Clang и Photoshop были разработаны на C++. Оба языка отлично подходят для создания сложных и эффективных систем.
Как говорит Линус Торвальдс: «C++ — ужасный язык. Это становится еще более ужасным из-за того, что многие нестандартные программисты используют его до такой степени, что с его помощью гораздо проще генерировать полную и полную чушь. Откровенно говоря, даже если бы выбор C состоял в том, чтобы *ничего* не делать, но отпугивать программистов C++, это само по себе было бы серьезной причиной для использования C».
C и C++ — это всего лишь два подхода к решению задач по программированию. Эти два инструмента предназначены для решения разных задач, и выбрать между ними довольно просто. Если вы хотите программировать ядро Unix, драйверы для операционной системы или программировать встроенные системы, то ваш выбор — C. Если вы хотите создать настольное приложение, решение на стороне сервера, библиотеку для компьютерного зрения или нейронную сеть или AI, затем выберите C++.