Файл: История возникновения и развития языка программирования Си (С++) и Java..pdf
Добавлен: 31.03.2023
Просмотров: 286
Скачиваний: 2
Возникновение и эволюция языка C++
Безусловно С++ многим обязан языку С, который сохраняется как его подмножество. Сохранены и все свойственные С средства низкого уровня, предназначенные для решения самых насущных задач системного программирования. Разработка С как языка, предназначенного для программистов, сделала его одним из наиболее востребованных в настоящее время. В течение последних четырех десятилетий С стал одним из основных и наиболее широко распространенных языков программирования.
Язык С возник в результате революции структурированного программирования 60-х годов. Появление структурированных языков позволило писать уже довольно большие программы. Несмотря на то, что в то время уже существовали другие структурированные языки (например, Pascal), С стал первым языком, в котором успешно сочетались мощь, изящество и выразительность. [13]
Деннис Ритчи из компании Bell Labs создал язык С в 1972 году, когда они вместе с Кеном Томпсоном работали над созданием операционной системы Unix. Наиболее важным является тот факт, что С задумывался как инструментальное средство для программистов-практиков, следовательно, его главной целью в этом случае было создание полезного языка программирования.[14]
К 1973 году язык С стал достаточно силён, и большая часть ядра UNIX, первоначально написанная на ассемблере PDP-11/20, была переписана на С. Это было одно из самых первых ядер операционных систем, написанное на языке, отличном от ассемблера; более ранними были лишь системы Multics (написана на ПЛ/1) и TRIPOS (написана на BCPL).
В 1978 году Брайан Керниган и Деннис Ритчи опубликовали первую редакцию книги «Язык программирования С». Среди программистов эта книга была известна как «K&R». K&R ввёл следующие особенности языка:
- структуры (тип данных struct);
- длинное целое (тип данных longint);
- целое без знака (тип данных unsignedint);
- оператор += и подобные ему (старые операторы =+) вводили анализатор лексики компилятора Си в заблуждение, например, при сравнении выражений i =+ 10 и i = +10).
После публикации K&R C в язык было добавлено несколько возможностей, поддерживаемый компиляторами AT&T и некоторых других производителей:
-
- функции, не возвращающие значение (с типом void) и указатели, не имеющие типа (с типом void *);
- функции, возвращающие объединения и структуры;
- имена полей данных структур в разных пространствах имён для каждой структуры;
- присваивания структур;
- спецификатор констант (const);
- стандартная библиотека, реализующая большую часть функций, введённых различными производителями;
- перечислимый тип (enum);
- дробное число одинарной точности (float).
В конце 1970-х годов С начал вытеснять Бейсик с позиции ведущего языка для программирования микрокомпьютеров. В результате С был общепризнан как самый популярный структурированный язык 1980-х годов.
В то же время Бьёрн Страуструп и другие в лабораториях BellLabs начали работу по добавлению в С возможностей объектно-ориентированного программирования.
Язык С++ был создан Бьерном Страуструпом (Bjame Stroustrup) в 1979 году в компании ВеН Laboratories (г. Муррей-Хилл, шт. Нью-Джерси). Сначала новый язык получил имя «С с классами» (С with Classes), но в 1983 году он стал называться С++. Название было придумано Риком Маскитти.[15]
Выбор С в качестве базового языка для С++ объясняется следующими его достоинствами:
- универсальность, краткость и относительно низкий уровень;
- адекватность большинству задач системного программирования;
- он идет в любой системе и на любой машине;
- полностью подходит для программной среды UNIX.[16]
Язык «С с классами» использовался для больших задач моделирования. Строгой проверке подверглись тогда возможности написания на нем программ, для которых критичны ресурсы времени и памяти. В этом языке недоставало перегрузки операций, ссылок, виртуальных функций и многих других возможностей.
Бьёрн Страуструп придумал ряд усовершенствований к языку C под собственные нужды. Когда в конце 1970-х годов Страуструп начал работать в BellLabs над задачами теории очередей (в приложении к моделированию телефонных вызовов), он обнаружил, что попытки применения существующих в то время языков моделирования оказываются неэффективными, а применение высокоэффективных машинных языков слишком сложно из-за их ограниченной выразительности. Так, язык Симула имеет такие возможности, которые были бы очень полезны для разработки большого программного обеспечения, но работает слишком медленно, а язык BCPL достаточно быстр, но слишком близок к языкам низкого уровня и не подходит для разработки большого программного обеспечения.
Страуструп построил С++ на фундаменте языка С, включающем все его средства, атрибуты и основные достоинства. Для него также остается в силе принцип С, согласно которому программист, а не язык, несет ответственность за результаты работы своей программы. Именно этот момент позволяет понять, что изобретение С++ не было попыткой создать новый язык программирования. Это было скорее усовершенствование уже существующего (и при этом весьма успешного) языка. Большинство новшеств, которыми Страуструп обогатил язык С, было предназначено для поддержки объектно-ориентированного программирования. По сути С++ стал объектно-ориентированной версией языка С. Взяв язык С за основу, Страуструп подготовил плавный переход к ООП. Теперь, вместо того, чтобы изучать совершенно новый язык, С-программисту достаточно было освоить только ряд новых средств.[17]
Итак, при создании C++ Бьёрн Страуструп хотел:
- Получить универсальный язык со статическими типами данных, эффективностью и переносимостью языка C.
- Непосредственно и всесторонне поддерживать множество стилей программирования, в том числе процедурное программирование, абстракцию данных, объектно-ориентированное программирование и обобщённое программирование.
- Дать программисту свободу выбора, даже если это даст ему возможность выбирать неправильно.
- Максимально сохранить совместимость с C, тем самым делая возможным лёгкий переход от программирования на C.
- Избежать разночтений между C и C++: любая конструкция, допустимая в обоих языках, должна в каждом из них обозначать одно и то же и приводить к одному и тому же поведению программы.
- Избегать особенностей, которые зависят от платформы или не являются универсальными.
- «Не платить за то, что не используется» – никакое языковое средство не должно приводить к снижению производительности программ, не использующих его.
- Не требовать слишком усложнённой среды программирования.[18]
В настоящее время язык программирования С имеет несколько разновидностей, а именно:
- [C] – Многоцелевой язык программирования высокого уровня, разработанный Денисом Ритчи в начале 1970-х гг. на базе языка BCPL. Используется на миниЭВМ и ПЭВМ. Является базовым языком операционной системы Unix, однако применяется и вне этой системы, для написания быстродействующих и эффективных программных продуктов, включая и операционные системы. Для IBM PC имеется ряд популярных версий языка Си, в том числе - Turbo C (фирмы Borland), Microsoft C и Quick C (фирмы Microsoft ), а также Zortech C (фирмы Symantec). Многие из указанных версий обеспечивают также работу с Си и Си++.
- [C++] – Язык программирования высокого уровня, созданный Бьярном Страустрапом на базе языка Си. Является его расширенной версией, реализующей принципы объектно-ориентированного программирования. Используется для создания сложных программ. Для IBM PC наиболее популярной является система Turbo C++ фирмы Borland (США).
- [C Sharp] – объектно-ориентированный язык программирования, о разработке которого в 2000 г. объявила фирма Microsoft . По своему характеру он напоминает языки C++ и Java и предназначен для разработчиков программ, использующих языки C и С++ для того, чтобы они могли более эффективно создавать Интернет-приложения. Указывается, что C # будет тесно интегрирован с языком XML[19]
Глава 2. Программирование Java
2.1 История и краткий обзор языка Java
В 1991 году в компании Sun Microsystems началась разработка языка Oak (дуб). В конце 1992 года появился первый вариант этого языка. С весны 1995 года данный язык стал называться Java. Вначале была создана версия языка Java 1.0, потом появилась версия 1.1, а затем появился Java 2, которым мы пользуемся и сейчас.[20]
Итак, с чего же всё началось? Куда нас уводят корни языка программирования Java? Поговорим о проекте «Green». Известно, что 5 декабря 1990 года компания Sun сделала предложение Патрику Нотону. Поставленная задача – «создать что-нибудь необычайное». 1 февраля 1991 года Патрик Нотон, Джеймс Гослинг и Майк Шеридан вплотную приступили к реализации проекта, который и получил название Green. С самого начала проект не рассматривался как чисто исследовательский, задача была создать реальный продукт, устройство.
Сначала предполагалась разработка небольшого языка, который можно было бы использовать для программирования бытовых устройств, например, контроллеров для переключения каналов кабельного телевидения (cable TV switchboxes). Поскольку такие устройства не потребляют много энергии и не имеют больших микросхем памяти, язык должен был быть маленьким и генерировать очень компактные программы. Кроме того, поскольку разные производители могут выбирать разные центральные процессоры (Central Processor Unit— CPU), было важно не завязнуть в какой-то одной архитектуре компьютеров.[21]
Так родилась идея разработать небольшое устройство с жидкокристаллическим сенсорным экраном, которое будет взаимодействовать с пользователем с помощью анимации, показывая, чем можно управлять и как. Чтобы создать такой прибор, Нотон начал работать над специализированной графической системой, Гослинг взялся за программное обеспечение, а Шеридан занялся бизнес-вопросами.
Стремясь изобрести небольшой, компактный и машинонезависящий код, разработчики возродили модель, использованную при реализации первых версий языка Pascal на заре эры персональных компьютеров. Ведь именно Никлаус Вирт, создатель языка Pascal, в свое время разработал машинонезависимый язык, генерирующий промежуточный код для некой гипотетической машины. Этот язык стал коммерческим продуктом под названием UCSD Pascal. Этот промежуточный код можно выполнять на любой машине, имеющей соответствующий интерпретатор.
Инженеры, работавшие над проектом "Green", также использовали виртуальную машину, что решило их основную проблему. Однако большинство сотрудников компании Sun имели опыт работы с операционной системой UNIX, поэтому в основу разрабатываемого ими языка был положен язык C++, а не Pascal. В частности, они сделали язык объектно-, а не процедурно- ориентированным.[22]
Существует история, что в июне 1991 года Гослинг начинает разработку замены C++. Создавая новый каталог и раздумывая, как его назвать, он выглянул в окно, и взгляд его остановился на растущем под ним дереве. Так язык получил свое первое название - OaK (дуб).
К сожалению, покупателей продукции, разработанной в рамках проекта «Green» не было. В промежуток с 1993 по 1994 год продолжались их безрезультатные поиски. Наконец, в начале 1994 года стало понятно, что идея интерактивного телевидения оказалась нежизнеспособной.
Анализ состояния FirstPerson показал, что компания не имеет ни одного клиента или партнера и ее дальнейшие перспективы довольно туманны. Руководство Sun требует немедленного составления нового бизнес-плана, позволяющего компании снова приносить прибыль.
Новый бизнес-план FirstPerson ставил цель, которая была неким промежуточным шагом от интерактивного телевидения к возможностям Internet. Идея заключалась в создании платформы для кабельных компаний, пользователями которой были бы обычные владельцы персональных компьютеров, объединенные сетями таких компаний. Используя технологию OaK, разработчики могли бы создавать приложения, по функциональности аналогичные программам, распространяемым на CD-ROM, однако обладающие интерактивностью, позволяющей людям обмениваться любой информацией через сеть. Ожидалось, что такие сети в итоге и разовьются в интерактивное телевидение, и тогда OaK станет полноценным решением для этой индустрии. Об Internet и Mosaic пока не говорилось ни слова.[23]
Опорной точкой стал тот момент, когда создатели FirstPerson, наконец, обратили внимание на Internet. Они поняли, что функциональность тех сетевых приложений, для которых создавался OaK, очень близка к WWW.
Гослинг пересматривает программный код платформы, а Нотон берется за написание приложения, которое сразу бы продемонстрировало всю мощь OaK для Internet.
Несмотря на то, что к середине 1994 года WWW достиг невиданных размеров (конечно, по меркам того времени), web-страницы по-прежнему были скорее похожи на обычные бумажные издания, чем на интерактивные приложения. По большей части вся работа в сети заключалась в отправке запроса на web-сервер и получении ответа, который содержал обычный статический HTML -файл, отображаемый браузером на стороне клиента. Уже тогда функциональность web-серверов расширялась с помощью CGI (Common Gateway Interface). Эта технология позволяла по запросу клиента запускать на сервере обычную программу и ее результат отсылать обратно в качестве ответа. Поскольку в то время скорость каналов связи была невысокой (хотя, похоже, пользователи никогда не будут удовлетворены возможностями аппаратуры), клиент мог ждать несколько минут, чтобы лишь увидеть сообщение о том, что он ошибся в одной букве запроса. Динамическое построение графиков при таком способе реализации означало бы генерацию GIF-файлов в реальном времени. А ведь зачастую клиентские машины являются полноценными персональными компьютерами, которые могли бы брать значительную часть работы взаимодействия с пользователем на себя, разгружая серверы. [24]