Tehnografi.com - Технологические новости, обзоры и советы

Использование C и C++ в современных системах

Следующая статья поможет вам: Использование 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++.