Файл: История возникновения и развития языка программирования Си (С++) и Java (Сравнительная характеристика).pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 27.06.2023

Просмотров: 69

Скачиваний: 3

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Введение.

В данной курсовой работе будет рассмотрена история появления языков программирования Си, С++ и Java.

 Язык Си приобрёл огромную популярность во всём мире и оказал значительное влияние на многие другие языки программирования. Именно он является предшественником таких языков, как C++, C#, Java; менее известных (например J#). Компания Microsoft для разработки родного языка к своей платформе .Net выбрала именно Си-подобный синтаксис. Язык Си серьезно изменил жизнь программистов прошлого века и стал де-факто в области низкоуровневого программирования, оставив ассемблеру только те места, где производительность имела критическое значение.

Глава 1 Cи (С++)

Си

Язык Си восходит обязан языку ALGOL (расшифровывается как ALGorithmic Language)[1], который был появился в 1958 году совместно с комитетом Европейских и Американских учёных в сфере компьютерных наук на встрече в 1958 в Швейцарской высшей технической школе Цюриха. Язык был попыткой исправить некоторые недостатки языка FORTRAN[2].
Вдохновлённые языком ALGOL-60, математическая лаборатория Кембриджского университета совместно с компьютерным отделом Лондонского университета создали в 1963 году язык CPL (Combined Programming Language)[3]. Язык CPL сочли сложным, и в ответ на это Мартином Ричардсоном был создан в 1966 году язык BCPL, основное предназначение которого заключалось в написании компиляторов. Сейчас он очень мало используется, но в своё время из-за хорошей портируемости он играл важную роль.
BCPL послужил предком для языка Би, созданного в 1969 в AT&T Bell Telephone Laboratories[4], Кеном Томпсоном и Денсом Ритчи (создатели языка Си).
Язык Би был использован для описания самых ранних версий UNIX[5], созданной как ответ на проект Multics, разрабатываемый в Bell Laboratories. Этот язык и послужил непосредственным предшественником языка Си.
По поводу возникновения языка Си Питер Мойлан в своей книге «The case against C» пишет: «Нужен был язык, способный обойти некоторые жесткие правила, встроенные в большинство языков высокого уровня и обеспечивающие их надежность. Нужен был такой язык, который позволил бы делать то, что до него можно было реализовать только на ассемблере или на уровне машинного кода.» Си стал именно таким языком. Это обусловило его дальнейшую популярность в таких отраслях программирования, как написание драйверов и прочих аспектах низкоуровневого программирования.
Язык программирования Си был разработан в стенах Bell Labs в период с 1969 по 1973 годы. Как признался сам Ритчи, самый активный период творчества приходился на 1972 год. За всё время своего существования, язык Си оброс легендами по поводу мотивов своего создания.
Согласно одной из легенд, Керниган и Ритчи обожали одну компьютерную игру, в которую они играли на главном сервере компании. Позже, они захотели перенести её на компьютер, находящийся в их офисе. Но он, к сожалению на нём отсутствовала операционная система, что с подвигло Кернигана и Ритчи её написать. Когда они понадобилось перенести систему на другой компьютер, это оказалось непростой задачей, так как система была написана полностью на ассемблере. Тогда у них возникла идея переписать её на язык более высокого уровня. Сначала для этих они планировали использовать язык Би, но в так как он не давал на полную использовать новые возможности компьютера, на который они хотели перенести систему, было принято решение создать свой язык.
По другой версии легенды, язык Си был создан как первоапрельская шутка, которая обрела нешуточную популярность.
Компилятор языка Си унаследовал традицию, заложенную ещё Николаусом Виртом и был написан на самом Си. По мнению большинства, название языка Си является третьей буквой алфавита. Оно появилось как указание на то, что язык Си является более продвинутым и усовершенствованным, чем язык Би. Сам же Ритчи по поводу названия языка говорил следующее слова: «Создав систему типов, соответствующий синтаксис и компилятор для нового языка, я почувствовал, что он заслуживает нового имени: NB показалось мне недостаточно четким. Я решил следовать однобуквенному стилю и назвал его C (Си), оставляя открытым вопрос, являлось ли после B это следующей буквой в алфавите или в названии BCPL».
Успех Си в основном обязан тем, что на нём была написана большая часть операционной системы UNIX, которая в итоге обрела большую популярность. По количеству используемых на данный момент операционных систем, разработанных на базе UNIX, она является самой распространённой системой в мире. В связи с её распространённостью и что на данный момент объём операционной системы измеряется в миллионах строк кода, задача переписывании UNIX на другой язык становиться практически невыполнимой. Так же при переписывании могут возникнут ошибки. Кроме того, язык Си, будучи близким к аппаратной реализации компьютера позволяет более унифицированный код, чем многие другие языки программирования. Этим обосновывается бессмысленность перевода UNIX на другой язык программирования. Если другие языки программирования могут исчезнуть с течением времени, то язык Си будет жить, пока живёт UNIX. То есть пока существуют компьютеры в том виде, в котором мы их себе представляем.
Первая книга, посвящённая языку программирования Си была написана Керниганом и Ритчи в 1978 году и вышла в свет под названием «Язык программирования Си». Данная книга, в среде программистов более известная как «K&R», стала неофициальным стандартом языка Си.
В конце 1970-х годов, язык Си начал вытеснять язык BASIC[6], который в то время был ведущим в области программирования микрокомпьютеров. В 1980-х годах он был адаптирован под архитектуру IBM-PC, что привело к большому скачку его популярности. В это же время Бьярн Страуструп начал разработку языка программирования, который бы сочетал в себе синтаксис популярного языка Си и концепцию объектно-ориентированного программирования, которая становилась всё более востребованной, так началась разработка языка С++.


В то время как Си набирал популярность, компиляторы для него выпускались различными фирмами, и зачастую программа, которая компилировалась на компиляторе одной фирме, не компилировалась на компиляторе другой. Всё это было связано с отсутствием чётко оговоренного стандарта языка Си. Все разработчики ориентировались на книгу Кернигана и Ритчи, но интерпретировали её по-разному.
Разработкой стандарта языка Си занялся Американский национальный институт стандартов (ANSI)[7]. При нём в 1983 году был сформирован комитет X3J11, который занялся разработкой стандарта. Первая версия стандарта была выпущена в 1989 году и получила название С89. В 1990, внеся небольшие изменения в стандарт, его приняла ISO[8]. Тогда он стал известен под кодом ISO/IEC 9899:1990, но в среде программистов закрепилось название, связанное с годом принятия стандарта: С90. Последней на данный момент версией стандарта является стандарт ISO/IEC 9899:1999, также известный как С99, который был принят в 2000 году.

С++

Язык программирования С++ был создан в начале 1980-х годов, его создатель сотрудник фирмы Bell Laboratories – Бьёрн Страструп.

Бьерн Страуструп высвободил объектно-ориентированный потенциал С путем перенесения возможностей классов Simula 67[9]в С. Первоначально новый язык носил имя "С с классами" и только потом стал называться C++. Язык C++ достиг популярности, будучи разработанным в Bell Labs, позже он был перенесен в другие корпорации и индустрии. Сегодня это один из наиболее популярных языков программирования в мире. C++ наследует как положительные, так и отрицательные стороны С.

Бьерн Страуструп в своей книге "Язык программирования C++" говорил: "Я придумал C++, записал его первоначальное определение и выполнил первую реализацию. Я выбрал и сформулировал критерии проектирования C++, разработал его основные возможности и отвечал за судьбу предложений по расширению языка в комитете по стандартизации C++. Язык C++ многим обязан языку C, и язык C остается подмножеством языка C++ (но в C++ устранены несколько серьезных брешей системы типов C). Я также сохранил средства C, которые являются достаточно низкоуровневыми, чтобы справляться с самыми критическими системными задачами. Язык C, в свою очередь многим обязан своему предшественнику, BCPL; кстати, стиль комментариев // был взят в C++ из BCPL. Другим основным источником вдохновения был язык Simula67. Концепция классов (с производными классами и виртуальными функциями) была позаимствована из него. Средства перегрузки операторов и возможность помещения объявлений в любом месте, где может быть записана инструкция, напоминает Algol68[10].


Название C++ придумал Рик Масситти. Название указывает на эволюционную природу перехода к нему от C. "++" - это операция приращения в C. Чуть более короткое имя C+ является синтаксической ошибкой; кроме того, оно уже было использовано как имя совсем другого языка. Знатоки семантики C находят, что C++ хуже, чем ++C. Названия D язык не получил, поскольку он является расширением C и в нем не делается попыток исцеляться от проблем путем выбрасывания различных особенностей...

Изначально язык программирования C++ был разработан, чтобы автору и его друзьям не приходилось программировать на ассемблере, C или других современных языках высокого уровня. Основным его предназначением было сделать написание хороших программ более простым и приятным для отдельного программиста. Плана разработки C++ на бумаге никогда не было; проект, документация и реализация двигались одновременно. Разумеется, внешний интерфейс C++ был написан на C++. Никогда не существовало "Проекта C++" и "Комитета по разработке C++". Поэтому C++ развивался и продолжает развиваться во всех направлениях, чтобы справляться со сложностями, с которыми сталкиваются пользователи, а также в процессе дискуссий автора с его друзьями и коллегами.

В языке С++ полностью поддерживаются принципы объектно-ориентированного программирования, включая три кита, на которых оно стоит: инкапсуляцию[11], наследование и полиморфизм. Инкапсуляция в С++ поддерживается посредством создания нестандартных (пользовательских) типов данных, называемых классами. Язык С++ поддерживает наследование. Это значит, что можно объявить новый тип данных (класс), который является расширением существующего.

Хотя язык программирования С++ справедливо называют продолжением С и любая работоспособная программа на языке С будет поддерживаться компилятором С++, при переходе от С к С++ был сделан весьма существенный скачок. Язык С++ выигрывал от своего родства с языком С в течение многих лет, поскольку многие программисты обнаружили, что для того, чтобы в полной мере воспользоваться преимуществами языка С++, им нужно отказаться от некоторых своих прежних знаний и приобрести новые, а именно: изучить новый способ концептуальности и решения проблем программирования. Перед тем как начинать осваивать С++, Страуструп и большинство других программистов, использующих С++ считают изучение языка С необязательным.

Язык программирования C++ в настоящее время считается господствующим языком, используемым для разработки коммерческих продуктов, 90% игр пишутся на С++ с применением DirectX.


Сравнение языков С++ и С

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

Выбор С в качестве базового языка для С++ объясняется следующими его достоинствами:

а) универсальность, краткость и относительно низкий уровень;

б) адекватность большинству задач системного программирования;

в) он идет в любой системе и на любой машине;

г) полностью подходит для программной среды UNIX.

В языке С существуют свои проблемы, но в языке, разрабатываемом "с нуля" они появились бы тоже, а проблемы языка С, по крайней мере, хорошо известны. Более важно то, что ориентация на С позволила использовать язык "С с классами" как полезный (хотя и не совсем удобный) инструмент в течение первых месяцев раздумий о введении в С классов в стиле Симулы.

Язык С++ стал использоваться шире, но по мере роста его возможностей, выходящих за пределы С, вновь и вновь возникала проблема совместимости. Отказавшись от части наследства С, можно избежать некоторых проблем. Это не было сделано по следующим причинам:

1. существуют миллионы строк программ на С, которые можно улучшить с помощью С++, но при условии, что полной переписи их на язык С++ не потребуется;

2. существуют миллионы строк библиотечных функций и служебных программ на языке С, которые можно было бы использовать в язык С++ при условиях совместимости обоих языков на стадии связывания и их большого синтаксического сходства;

3. существуют сотни тысяч программистов, владеющих языком С; им достаточно овладеть только новыми средствами С++ и не надо изучать основ языка;

4. поскольку язык С и язык С++ использоваться одними и теми же людьми на одних и тех же системах многие годы, различия между языками должны быть либо минимальными, либо максимальными, чтобы свести к минимуму количество ошибок и недоразумений. Описание С++ было переработано так, чтобы гарантировать, что любая допустимая в обоих языках конструкция означала в них одно и то же.


Язык С сам развивался в последние годы это отчасти было связано с разработкой языка С++. Стандарт ANSI для языка С содержит, например, синтаксис описания функций, позаимствованный из языка "С с классами". Происходит взаимное заимствование, например, тип указателя void* был придуман для ANSI С, а впервые реализован в языке С++. Как было обещано в первом издании этой (Язык программирования С++ – Бьерн Страуструп) книги, описание С++ было доработано, чтобы исключить расхождения. Язык С++ стал более совместим с языком С, чем это было вначале. В самом лучшем случае С++ должен максимально приближаться к ANSI C, но не более. Полной совместимости не должно быть, это сильно уменьшит надежность типов и согласованность использования встроенных и пользовательских типов, а эти свойства всегда были одними из главных для С++.

Структура и эффективность

Эволюция языка С++ протекала на основе языка С и за небольшим исключением, С был сохранен в качестве части C++. Базовый язык С был создан таким образом, что имеется очень тесная связь между операторами, объектами, операциями, типами с которыми непосредственно работает машина, т.е. символами, адресами и числами. За исключением операций delete, throw, new и также проверяемого блока. Для выполнения выражений и операторов С++ не требуется скрытой динамической аппаратной или программной поддержки.

Языке С++ очень похож (видимо даже более эффективная) последовательностью команд для вызова функций и возврата из них, на язык С. Иногда эти очень эффективные операции становятся слишком дорогими, то вызов функции может быть произведён и подстановкой ее тела, при этом сохраняется удобная функциональная запись не требующих расходов на вызов функции.

Изначально язык С был задуман как конкурент ассемблера, призванный вытеснить его из основных и наиболее требовательных к ресурсам задач системного программирования. Для того чтобы успехи, достигнутые в языке С не оказались под угрозой, в языке С++ были приняты меры. Главное различие языка С и С++ проявляется в уделяемой степени внимания структурам и типам. В языке С реализовано снисходительное отношение к типам. Более выразительным является язык С++, но это только благодаря большому вниманию типам. При известных типах объектов, транслятор правильно распознает выражения, в которых программисту пришлось бы записывать операции с нудными подробностями. Более того, знание типов позволяет транслятору обнаруживать такие ошибки, которые могли бы быть выявлены уже на этапе тестировании. При использовании строгой типизации для защиты данных от незаконного доступа, определения новых типов, операций и функций контроля параметров функций не влечёт увеличения времени выполнения программ и дополнительного расхода памяти.