Файл: История возникновения и развития языка программирования Си (С++) и Java (ИСТОРИЯ РАЗВИТИЯ ЯЗЫКА C).pdf
Добавлен: 13.03.2024
Просмотров: 11
Скачиваний: 0
Содержание:
ВВЕДЕНИЕ
В современном мире невозможно представить какого-либо высококвалифицированного специалиста, который не владел бы информационными технологиями. Также нельзя представить предприятие, на котором не работали опытные программисты. Для свободной ориентации в информационных технологиях любой специалист должен уметь получать, обрабатывать и использовать информацию, прежде всего, с помощью компьютеров, а также телекоммуникаций и других новейших средств связи, в том числе и уметь, обращаться с языками программирования.
Язык программирования - это система обозначений, служащая для точного описания программ или алгоритмов для электронно-вычислительных и вычислительных машин. Условно языки программирования разделяют на уровни: языки низкого уровня (машинные языки) и языки высокого уровня (языки, ориентированные на особенности мышления человека). К низкоуровневым языкам можно отнести язык программирования Ассемблер. К высокоуровневым языкам можно отнести язык программирования C#. Помимо этого, существует язык, который считают языком среднего уровня – язык программирования C (Си).
ИСТОРИЯ РАЗВИТИЯ ЯЗЫКА C
-
- История создания и развития языка программирования СИ
Язык программирования Си – это процедурный язык общего назначения, полученный во время создания операционной системы UNIX. Разработан язык в 1963-1973 годах сотрудником Bell Labs Деннисом Ритчи как развитие интерпретируемого языка программирования Би.
Как и остальные операционные системы того времени, UNIX был написан на ассемблере. Отладка программ на ассемблере являлась крайней тяжелой задачей, и UNIX не был исключением. Кен Томпсон, который совместно с Д. Ритчи разрабатывал UNIX систему решил, что для дальнейшей разработки ОС необходим язык высокого уровня и придумал небольшой язык B (Би). За основу Томпсон взял язык BCPL, язык для системного программирования.
Ритчи вскоре присоединился к проекту UNIX и начал писать на B. В 1970 Bell Labs приобрела для проекта PDP-11. Так как B был готов к работе на PDP-11, Томпсон переписал часть UNIX на B. В 1971 стало ясно, что B не совсем подходит для PDP-11, поэтому Ритчи начал создавать расширенную версию B. Сначала он назвал её NB (New B), но, когда язык стал сильно отличаться от B, название сменили на C. Язык к 1973 стал достаточно стабилен для того, чтобы на нём можно было переписать UNIX. Переход на C обеспечил важное преимущество - переносимость.
Развитие языка Си продолжилось в 70-х годах. В 1978 году Брайан Керниган и Деннис Ритчи опубликовали первую редакцию книги «Язык программирования Си». Эта книга, известная среди программистов как «K&R», служила многие годы неформальной спецификацией языка. При отсутствии официального стандарта эта книга – известная также как K&R, или "Белая Книга"– фактически стала стандартом. K&R ввел такие особенности языка, как структуры (struct), оператор «+=», а также такие типы данных, как длинное целое (long int) и целое без знака (unsigned int).
Чуть позднее в язык были добавлены следующие возможности:
- Функции, не возвращающие значений, и указатели, не имеющие типа;
- Функции, возвращающие объединения и структуры;
- Присваивания структур;
- Имена полей данных структур в разных пространствах имён для каждой структуры;
- Спецификатор констант;
- Перечислимый тип;
- Дробное число одинарной точности.
В конце 70-х Си вытесняет Бейсик и становится ведущим языком программирования микрокомпьютеров. В 1980-х годах Си был адаптирован для использования в IBM PC, что послужило толчком к резкому росту популярности языка. Также в 80-х годах началась работа по добавлению в Си возможностей объектно-ориентированного программирования. Конечным продуктом данной работой является язык С++.
В 1983 году ANSI (Американский национальный институт стандартов) сформировал комитет X3J11 для создания спецификаций стандарта языка Си. В 1989 году стандарт был завершен и утвержден как ANSI X3.159-1989 «Язык программирования C». Эту версию принято называть «ANSI C», или «C89».
В 1990 году версия С90 была принята организацией ISO (Международная организация по стандартизации). Новейшим стандартом языка Си является С11, принятый в 2011 году. Основными изменениями С11 являются:
- Поддержка многопоточности;
- Улучшенная поддержка Юникода;
- Статичные утверждения;
- Обобщенные макросы;
- Анонимные структуры и объединения;
- Управление выравниваем объектов;
- Удаления опасной функции gets;
- Новый режим эксклюзивного открытия файла.
- Преимущества и недостатки языка программирования СИ
Цель создания языка Си - сделать более простым написание больших программ с минимумом ошибок по правилам процедурного программирования. Си предлагает следующие важные особенности:
- Простую языковую базу, из которой вынесены в библиотеки многие существенные возможности;
- Ориентацию на процедурное программирование;
- Систему типов;
- Использование препроцессора;
- Доступ к памяти компьютера через использование указателей;
- Передачу параметров в функцию по значению;
- Указатели на функции и статистические переменные;
- Области действия имен.
Помимо большого количества преимуществ язык Си имеет ряд недостатков. Так в языке отсутствуют вложенные функции и сопрограммы. Также неправильное использование опасных элементов может привести к непредсказуемому поведению программы. Одним из последствий такого поведения являются уязвимости в системе безопасности.
Си не имеет средств для проверки индексов массива. То есть при наличии массива из трех элементов возможно запись в четвертый элемент данного массива. Результатом данного действия является переполнение буфера, а следствием – ряд проблем с безопасностью.
Также источником опасных ситуаций может служит механизм указателей. Указатель может ссылаться на любой объект в памяти, включая исполняемый код. Еще одна распространенная проблема – память не может быть использована, если программист не освободил ее при помощи функции free().
-
- Синтаксис языка программирования СИ
В состав алфавита языка программирования Си входят все символы латинского алфавита, цифры и специальные символы. Помимо к лексемам языка относятся идентификаторы, предопределенные константы и ключевые слова.
Как известно, операция – это некоторая функция, которая выполняется над операндами. В языке Си каждой операции соответствует свой знак. Операции различают по количеству задействованных операнд:
- Унарные операции – функции, которые содержат один операнд. К унарным операциям относят: унарный плюс, унарный минус, логическое отрицание, взятие адреса, операция разыменовывания указателя, взятие обратного кода и операция определения занимаемого объектом объёма памяти.
- Бинарные операции – функции, которые содержат два операнда, между которыми находится знак операции. К бинарным операциям относят: сложение, вычитание, умножение, деление, взятие остатка от деления, поразрядное И, поразрядное ИЛИ, поразрядное исключающее ИЛИ, логическое И, логическое ИЛИ, а также операции, представляющие собой присваивание (+=, -=, *=, /=).
- Тернарные операции – условная операция, которая имеет три операнда (условие; выражение, значение которого возвращается, если условие истинно; выражение, значение которого возвращается, если условие ложно).
Также в синтаксис языка программирования Си входят операторы. Операторы предназначены для осуществления действий и для управления ходом выполнения программы. В языке Си существуют такие операторы, как пустой оператор, инструкции, блок вычислений, условные операторы, операторы выполнения цикла, операторы безусловного перехода, оператор возврата функции.
-
- Хранение данных в памяти
В языке программирования Си есть три способа выделения памяти для объектов:
- Статическое выделение памяти – память выделяется в сегменте данных программы в момент компиляции;
- Автоматическое выделение памяти – объекты хранятся в стеке;
- Динамическое выделение памяти – блоки памяти определяются во время выполнения программы.
Ниже приведена сравнительная таблица всех трех способов выделения памяти (Таблица 1).
Таблица 1 – Способы выделения памяти в языке Си
Критерий |
Статическое выделение |
Автоматическое выделение |
Динамическое выделение |
Объявление |
Имеет внутреннее или внешнее связывание или объявлен с квалификатором static |
Объект без связывания и без static |
Выделен с помощью функции malloc |
Время существования |
Всё время выполнения программы |
Блок, в котором объявлен объект |
От вызова функции malloc до вызова функции освобождения памяти free |
Инициализация |
Происходит один раз до запуска программы |
Отсутствует в случае отсутствия явной инициализации |
Частично в случае использования функции calloc. В этом случае все объекты имеют имеют нулевое значение кроме чисел с плавающей запятой и указателей |
Размер |
Фиксированный, неизменяемый |
Фиксированный, неизменяемый |
Изменяемый |
Предпочтительными способами являются автоматический и статический, поскольку хранение объектов управляется компилятором.
-
- Преимущества и недостатки языка программирования СИ
Язык Си – первый высокоуровневый язык программирования, который остается языком, реализованным на максимальном количестве аппаратных платформ, и одним из самых популярных языков программирования. Но этот язык достаточно сложен в обучении, а стиль кода зачастую бывает небезопасным и запутанным. Однако, язык успел несколько устареть, из-за чего достаточно проблематично использовать многие современные приемы и парадигмы программирования.
ИСТОРИЯ РАЗВИТИЯ ЯЗЫКА C++
-
- История появления и развития языка С++
Как известно из истории возникновения и развития языка Си, язык программирования С++ возник во время работы Бьёрн Страуструп по внедрению в Си возможностей объектно-ориентированного программирования.
В первую очередь были добавлены классы с инкапсуляцией, наследование классов, строгая проверка типов, inline-функции и аргументы по умолчанию. В 1980 году ранняя версия языка именовалась как «Си с классами». Также Б. Страуструп написал cfront — транслятор, переводящий исходный код Си с классами в исходный код простого Cи. Это позволило работать с новым языком, при этом работая с уже имеющейся UNIX систему.
В 1983 году добавлены следующие возможности:
- Виртуальные функции;
- Перегрузка функций и операторов;
- Ссылки;
- Константы;
- Пользовательский контроль над управлением свободной памятью;
- Улучшенная проверка типов;
- Новый стиль комментариев.
Получившийся язык уже было сложно считать простым дополнением к классическому языку Си, поэтому вскоре он был переименован в С++.
В 1985 году вышла первая книга «Язык программирования С++», автором которой стал сам Бьёрн Страуструп. И поскольку официального стандарта еще не было, выпуск этой книги с первыми описаниями языка было чрезвычайно важно.
В 1989 году вышла версия С++ 2.0, которая включала в себя множественное наследование, абстрактные классы, статические функции-члены, функции-константы и защищённые члены.
-
- Отличия языка программирования С++ от Си
Основным отличием языка С++ от Си это объектно-ориентированный подход. В отличие от процедурного программирования, где внимание уделяется алгоритмам, в объектно-ориентированном подходе основной акцент делается на данные. Спецификацией, описывающей уникальную форму, которая соответствует специфике поставленной задачи, в языке С++, является класс, а конкретной структурой данных является объект. Класс определяет, какие данные будут представляться в объекте. Объекты предназначены для разработки самой программы.
Язык программирования С++ поддерживает все операторы своего прародителя – языка Си, а типы данных практически полностью повторятся. Обобщенная структура языка программирования С++ представлена в Рисунке 1.
Рисунок 1 – Обобщенная структура языка С++
С++ добавляет к языку Си возможности объектно-ориентированного программирования. Три основных свойства объектно-ориентированного программирования – это наследование, инкапсуляция и полиморфизм.
Наследование позволяет создавать новые классы из старых и наследовать данные и методы от классов – родителей. В языке программирования С++ предусмотрено множественное наследование классов, которое может быть публичным, защищенным или закрытым. В Таблице 2 представлен доступ члена базового класса.