Автор Анна Евкова
Преподаватель который помогает студентам и школьникам в учёбе.

"История возникновения и развития языка программирования Си (С++) и Java"

Содержание:

Введение.

В любом деле важна история. История позволяет нам не совершать ошибок, которые были в прошлом, история так же помогает найти ответы на вопросы, которые встают перед нами. История – это глобальный людской опыт, который помогает нам двигаться вперед. В связи с этим, история программирования – всегда актуальная тема, которую необходимо изучать. Изучить историю программирования – и есть цель моего исследования.

Языки C, C++, Java – это огромные три кита, на которых держится практически все современное программирование в различных областях.

Изучая данную тему, я поставил перед собой следующие задачи:

  • Узнать, что же было до появления этих языков программирования.
  • Рассмотреть историю появления, предпосылки для создания каждого из этих языков.
  • Понять причину постоянного усовершенствования языков программирования, ведь они постоянно совершенствуются, выходят все новые и новые версии.
  • Отследить связь между языками программирования С, С++, Java.

Для решения поставленных мною задач, я разделил изучение данной темы на 4 основные главы: краткий обзор общей истории программирования до появления языков C, C++, Java, историю появления и развития языка С, историю появления и развития языка С++ и историю появления и развития языка Java.

Глава 1. Краткий обзор общей истории языков программирования

На мой взгляд, история программирования начинается с Ады Лавлейс. Ада Лавлейс — графиня, единственная законнорожденная дочь поэта Джорджа Байрона, родилась в 1815 году, первая женщина-программист. С детства она изучала точные науки, благодаря стараниям ее матери.

Лавлейс обучали такие учителя, как общественный реформатор Уильям Френд (William Frend), семейный доктор Уильям Кинг (William King) и Мэри Сомервилль (Mary Somerville) — шотландский астроном и математик и первая женщина, которая стала членом Королевского астрономического общества (Royal Astronomical Society).[1]

Ада была первой дамой, которая разобралась в принципе работы логарифмической вычислительной машины Бэббиджа, спроектированной в 1835 году. Мало того, она сама предлагала идеи по ее совершенствованию, и сама придумывала различные задачи.

Её имя стало известным лишь спустя долгое время после ее смерти. До сих пор в большинстве специализированных учебников о ней не написано ни слова. Тем не менее, вклад Ады Лавлейс, урожденной Байрон, в развитие программирования можно по праву считать огромным. [2]

В юности судьба свела ее с известным профессором математики Чарльзом Бэббиджем, который изобрел знаменитую логарифмическую машину. Эта машина могла осуществлять вычисления с точностью до двадцатого знака. Именно логарифмическая машина Бэбиджа в последствии признана первым компьютером в мире.

Ада Лавлейс создала труд, состоящий из перевода на английский язык статьи, описывающей изобретение Бэббиджа, за что ее и считают первым в мире программистом. Она дополнила текст многочисленными комментариями, увеличив его объем более чем в три раза. В них говорилось о разработке плана операций для аналитической машины. Это и считается ныне первыми программированием. Ее «операции», по словам самой создательницы, наделяли вычислительную машину потрясающей способностью ткать алгебраические формулы, подобно станку Жаккарда, который создает из пряжи листья, цветы, узоры. [3]

Первые электронные компьютеры начали появляться с 1949 года. Каждый из них имел свой собственный язык программирования. Существовало взаимно однозначное соответствие между выражением алгоритма и командами конкретной машины. Ученые (пользователями чаще всего были ученые) писали математические формулы, а программа представляла собой список машинных инструкций. Первые примитивные списки состояли из десятичных или восьмеричных цифр, точно соответствовавших их представлению в машинной памяти. Позднее появились ассемблер и «автокоды», иначе говоря, люди разработали языки, в которых машинные команды и машинное оборудование (например, регистры) имели символические имена.[4] Так, программист мог написать LDRO123, чтобы загрузить содержимое ячейки памяти, расположенной по адресу 123, в нулевой регистр. Однако каждая машина по-прежнему имела собственный набор команд и собственный язык программирования. Ярким представителем разработчиков языков программирования того времени является, несомненно, Дэвид Уилер (David Wheeler) из компьютерной лаборатории Кембриджского университета. В 1948 году он написал первую реальную программу, которая была когда-либо выполнена на компьютере, хранившем программы в своей памяти (программа, вычислявшая таблицу квадратов). Он был одним из десяти людей, объявивших о создании первого компиллятора (для машинно-зависимого автокода). Он изобрел вызов функции. В 1951 году он написал блестящую статью о разработке библиотек, которая на двадцать лет опередила свое время. В соавторстве с Моррисом Уилксом (Maurice Wilkes) и Стенли Джиллом (Stanley Gill) он написал первую книгу о программировании. Он получил первую степень доктора философии в области компьютерных наук, а позднее внес большой вклад в развитие аппаратного обеспечения (кеш-архитектура и ранние локальные сети) и алгоритмов (например, алгоритм шифрования TEA). Дэвид Уилер стал научным руководителем докторской диссертации Бьярне Страуступа (Bjarne Stroustrup).[5]

Ниже приведена диаграмма важнейших первых языков программирования:

Рисунок 1. Диаграмма первых языков программирования

Важность этих языков частично объясняется тем, что они широко использовались (а в некоторых случаях используются и ныне), а частично тем, что они стали предшественниками важных современных языков, причем часто наследники имели те же имена. Три ранних языка – Fortran. COBOL и Lisp стали прародителями большинства современных языков программирования.[6]

Появление языка Fortran в 1956 году, вероятно, является наиболее значительным событием в истории языков программирования. Fortran – это сокращение от “Formula Translation”. Его основная идея заключалась в генерации эффективного машинного кода из текста, ориентированного на людей, а не на машины. Система обозначений, принятая в языке Fortran, напоминала систему, которой пользовались ученые и инженеры, решающие математические задачи, а не машинные команды (тогда лишь недавно появившихся) электронных компьютеров.

С современной точки зрения, язык Fortran можно рассматривать как первую попытку непосредственного представления предметной области в коде. Он позволял программистам выполнять операции линейной алгебры почти так же, как они описаны в учебниках. В языке Fortran есть массивы, циклы и стандартные математические формулы (использующие стандартные математические обозначения, такие как x+y, sin(x)). Язык содержал стандартную библиотеку математических функций, механизмы ввода-вывода, причем пользователь мог самостоятельно определять дополнительные функции и библиотеки.

Система обозначений была достаточно машинно-независимой, так что код на языке Fortran часто можно было переносить из одного компьютера в другой с минимальными изменениями. Это было огромное достижение в то время. По этим причинам язык Fortran считается первым высокоуровневым языком программирования.

Язык Fortran пользовался огромным успехом в области научиных и инженерных вычеслений, для которых он, собственно и предназначался. Основными версиями языка Fortran являются версии II, IV, 77, 90, 95 и 03.[7]

Первое определение и реализация языка Fortran были выполнены коллективом сотрудников компании IBM под руководством Джона Бэкуса (John Backus). И по сей день язык Fortran является лидером в области оптимизации математических вычеслений.[8]

В 1959-1960х годах был разработан язык COBOL (Common Business-Oriented Language – язык программирования для коммерческих и деловых задач).

Изначально этот язык был разработан комитетом CODASYL по инициативе Министерства обороны США и группы основных производителей компьютеров для выполнения вычеслений, связанных с деловыми и коммерческими задачами. Проект был основан на языке FLOW-MATIC, изобретенным Грейс Хоппер. Одним из ее вкладов в разработку языка было использование синтаксиса, близкого к синтаксису английского языка (в отличие от математических обозначений, принятых в языке Fortran).[9]

Основными версиями языка были 60, 61, 65, 68, 70, 80, 90 и 04.

В 1958 году Джон Маккарти (John McCarthy) разработал язык программирования Lisp для обработки связанных списков и символьной информации (этим объясняется его название: LISt Processing). Существуют десятки (а вероятнее всего, сотни) диалектов языка Lisp. Сейчас наиболее популярными диалектами являются Common Lisp и Scheme. Это семейство языков было и остается основой для исследований в области искусственного интеллекта (хотя поставляемые программные продукты часто написаны на языке С или С++). Одним из основных источников вдохновения для создателей языка Lisp было лямбда-вычисление (точнее, его математическое понятие). В то время, как языки Fortran и COBOL были разработаны специально для устранения реальных проблем в соответствующих предметных областях, разработчики языка Lisp больше интересовались собственно программированием и элегантностью программ. Язык lisp был первым языком, не зависящим от аппаратного обеспечения, причем его семантика имела математическую основу.[10]

«Алгометрический язык» (“ALGOrithmic Language”) – Algol, ставший результатом работы группы IFIP 2.1, открыл новые концепции современных языков программирования.

  • Контекст лексического анализа.
  • Использование грамматики для определения языка.
  • Четкое разделение синтаксических и семантических правил.
  • Четкое разделение определения языка и его реализации.
  • Систематическое использование типов (статических, т.е. типов времени компиляции).
  • Непосредственная поддержка структурного программирования.

Само понятие «язык программирования общего назначение» пришло вместе с языком Algol. До того времени языки предназначались для научных исчислений, деловых расчетов, обработки списков, моделирования и т.д.

Язык Algol60 так и не вышел за пределы академической среды. Многим он казался слишком странным (недостаточно гибким, быстрым, удобным и т.д.)

Тем не менее большинство современных языков обязаны своим существованием этому проекту.[11]

Генеалогическое древо языка Algol выглядит впечатляющим:

Рисунок 2. Генеалогическое древо Algol[12]

Языки Simula67 и Pascal являются предшественниками большинства современных языков.

Язык Algo68 был крупным и амбициозным проектом, но его реализация растянулась до бесконечности, и многие просто потеряли терпение и стали сомневаться в том, что из этого проекта получится что-то полезное. Один из членов комитета по языку, Никлаус Вирт (Niklaus Wirth), решил разработать и реализовать собственный язык, являющийся наследником языка Algol. Этот язык был назван Pascal, и он был упрощенным вариантом Algol60. Разработка языка Pascal была завершена в 1970 году, и в результате, он действительно оказался простым и довольно гибким. Вскоре он стал довольно популярным языком, который использовали для преподавания программирования, но составить конкуренцию языку Fortran он не смог.

Профессор Никлаус Вирт на протяжении двадцати пяти дет разработал следующие языки программирования: Algol W, Pl/350, Euler, Pascal, Modula, Modula-2, Oberon, Oberon-2, Lola (язык описания программного обеспечения). Никлаус Вирт описывал свою деятельность как бесконечный поиск простоты. Его работа оказала огромное влияние на программирование.[13]

В последствии оказалось, что язык Pascal недостаточно гибок и слишком прост для того, чтобы найти широкое промышленное применение. В 1980х годах Андерс Хейльсберг (Anders Hejlsberg) разработал язык Turbo Pascal, который воплотил гибкие механизмы передачи аргументов. Вот упрощенное генеалогическое древо семейства языков Pascal:[14]

Рисунок 3. Генеалогическое древо языков Pascal.

Язык программирования Ada предназначался для программных нужд Министерства обороны США. В его основу легли языки Pascal и Simula. Лидером групп разработчиков языка Ada был Жан Ишби (Jean Ichbiah), который ранее был председателем группы Simula Users Group. При разработке языка Ada основное внимание было уделено:

  • Абстракции данных.
  • Строгой проверке статистических типов.
  • Непосредственной языковой поддержке параллелизма.

Целью проекта Ada было воплощение принципов разработки программного обеспечения. В силу этого Министерство обороны разрабатывало не язык, а сам процесс проектирования языка.[15] В 1979 году язык получил название в честь леди Аугусты Ады Лавлейс, о которой можно прочитать в начале данной главы.

Министерство обороны США много лет предписывало использовать язык Ada в военных приложениях, что в итоге выразилось в афоризме «Язык Ada – это не просто хорошая идея, это – закон!». Сначала язык просто настоятельно рекомендовался к использованию, но со временем многим проектировщиком было запрещено использовать другие языки программирования. Конгресс США принял закон, требующий, чтобы в большинстве военных приложений использовался только язык Ada. Под влиянием рыночных и технических реалий, этот закон был вскоре отменен. В настоящее время этот язык играет важную роль в аэрокосмических приложениях и областях, связанных с разработкой встроенных систем.

Язык Ada стал военным стандартом в 1980 году, стандарт ANSI был принят в 1983 году, а стандарт ISO – в 1987 году.[16]

Язык Simula был разработан в первой половине 1960-х годов Кристеном Нюгордом и Оле-Йоханом Далем в Норвежском вычислительном центре и университете Осло. Язык simula принадлежит к семейству языков algol. При этом он является источником большинства фундаментальных идей, которые сегодня называют объектно-ориентированным программированием. Он был первым языком, в котором реализованы наследование и виртуальные функции. [17]

CPL (от Combined Programming Language, до того — Cambridge Programming Language) — язык программирования, разработанный совместно Кембриджем и Лондонским университетом в 1960х годах. Иногда аббревиатура в шутку расшифровывается как Cambridge Plus London.

В 1963 году была опубликована статья “The main features of CPL”, описывающая основные возможности языка. Язык создавался под влиянием Algol, но предназначался для решения более широкого круга задач, в частности, для исследований в области программирования и разработки компиляторов, и поэтому стал гораздо более громоздким.

Из-за сложности и размера языка первые работающие компиляторы были созданы гораздо позже, чем его теоретическое описание, — около 1970 года. Они были предназначены для двух схожих машин — Атлас в Лондоне и Титан в Кембридже. CPL так и не стал популярным и прекратил свое существование в середине 1970х годов, успев, впрочем, оказать влияние на создание BCPL.[18]

Язык BCPL (Basic Combined Programming Language) — язык программирования, разработанный Мартином Ричардсом в 1966 году в Кембриджском университете. Изначально он предназначался для написания компиляторов для других языков.

Сейчас BCPL практически не используется, но в своё время он был очень важен из-за хорошей портируемости. Урезанная версия языка с несколько изменённым синтаксисом стала языком программирования B, который оказал сильное влияние на язык программирования Си. По этой причине программисты в шутку расшифровывали название BCPL как Before C Programming Language («язык программирования, появившийся до языка Си»).

BCPL стал ответом на сложности своего предшественника, языка CPL, разработанного в начале 1960-х. Ричардс создал BCPL, «удалив из полного языка те функции, которые усложняли компиляцию». Первая реализация компилятора, работавшего на IBM 7094 под ОС CTSS, была написана Ричардсом весной 1967 в ходе посещения им исследовательской лаборатории «Project MAC» в МТИ. Язык был впервые описан в документе, представленном на 1969 Spring Joint Computer Conference.

Язык BCPL нашел отражение в языке под названием B, который был изобретен Кеном Томпсоном, и который в дальнейшем привел к разработке языка С.[19]

Большой отпечаток на современное программирование наложил язык Си (первая версия – 1972 год), являющийся очень популярным в среде разработчиков систем программного обеспечения (включая операционные системы). Этот язык создавался как инструментальный язык для разработки операционных систем, трансляторов, баз данных и других системных и прикладных программ. Си сочетает в себе как черты языка высокого уровня, так и машинно-ориентированного языка, допуская программиста ко всем машинным ресурсам, чего не обеспечивают такие языки как Бейсик и Паскаль. [20]

В этой главе мы охватили основные факты истории развития программирования до появления языка С. Рассмотрели основные события, повлиявшие на развития языков программирования, используемые в настоящее время и подошли к предпосылкам создания языка С.

Глава 2. История создания и развития языка С (Си).

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

В 1970-м году считалось, что серьезное системное программирование – в частности, реализация операционной системы – должно выполняться в ассемблерном коде и не может быть переносимым. Это очень напоминало ситуацию, сложившуюся в научном программировании перед появлением языка Fortran. Несколько индивидуумов и групп бросили вызов этой ортодоксальной точке зрения. В долгосрочной перспективе язык программирования С оказался наилучшим результатом этих усилий.

Деннис Ритчи (Dennis Ritchie) разработал язык программирования С в Исследовательском центре по компьютерным наукам (Computer Science Research Center) компании Bell Telephone Laboratories в Мюррей-Хилл, штат Нью-Джерси (Murray Hill. New Jersey) на машине PDP-11 фирмы DEC, использующую операционную систему UNIX. Язык С был эволюционным продолжением языка под названием BCPL. Если же копнуть совсем глубоко, то истоки языка С в языке ALGOL. Перед изобретением С компьютерные языки в основном разрабатывались либо в качестве академических упражнений, либо в административно создаваемых комитетах. Язык С же разработали работающие программисты-практики, заключив в него свои подходы к разработке программ.[21] Прелесть языка С в том, что он был преднамеренно простым языком программирования, позволявшим близко подойти к фундаментальным аспектам аппаратного обеспечения. Большинство усложнений было внесено позднее и часто вопреки желанию Денниса Ритчи. Частично успех языка С объясняется его широкой доступностью, но его реальная сила проявлялась в непосредственном отображении свойств языка на свойства аппаратного обеспечения. Деннис Ритчи лаконично описывал язык С как «строго типизированный язык со слабым механизмом проверки». Это значило, что язык С имел систему статических (распознаваемых на этапе компиляции) типов, а программа, использовавшая объект вопреки его определению, считалась неверной. Однако компилятор языка С не мог выполнять такие проверки, потому что он должен был работать при наличии всего 48 Кбайт памяти. Вскоре язык С вошел в практику, и программисты написали программу lint. Которая отдельно от компилятора проверяла соответствие кода системе типов.

По поводу возникновения языка Си Питер Мойлан в своей книге «The case against C» пишет: «Нужен был язык, способный обойти некоторые жесткие правила, встроенные в большинство языков высокого уровня и обеспечивающие их надежность. Нужен был такой язык, который позволил бы делать то, что до него можно было реализовать только на ассемблере или на уровне машинного кода.» Си стал именно таким языком.[22]

Кен Томпсон (Ken Thompson) и Деннис Ритчи стали авторами системы Unix, возможно, наиболее влиятельной операционной системы за все времена. Язык С ассоциировался и по-прежнему ассоциируется с операционной системой Unix, а через нее – с системой Linux и движением за открытый код.[23]

Язык С был продуман, протестирован, проработан и переработан людьми, которые реально использовали его в работе. Поэтому вскоре он привлек внимание массы программистов и вскоре стал любимым языком программистов всего мира.

Язык С вырос из революции структурного программирования, произошедшей в 1960-х гг. Перед появлением концепции структурного программирования написание больших программ вызывало значительные сложности, потому что логика построения программы имела тенденцию вырождаться в так называемый «макаронный код» - запутанную массу переходов, вызовов подпрограмм и возвратов, затрудняющих изучение и модификацию программы. Структурные языки подошли к решению этой проблемы путем добавления тщательно разработанных управляющих предложений, подпрограмм с локальными переменными и ряда других усовершенствований. С появлением структурных языков стало возможно писать относительно большие программы.

Язык С оказался первым языком, в котором успешно сочетались мощь, элегантность и выразительность. Его лаконичный, но в то же время легко осваиваемый синтаксис вместе со стратегией, утверждающей главенство программиста (а не языка), быстро завоевал симпатии программистов. Сегодня это уже трудно представить, но С стал, можно сказать, той струей свежего воздуха, которую так ждали программисты. В результате С быстро превратился в наиболее широко используемый язык структурного программирования.[24]

Деннис Ритчи вышел на пенсию из компании Lucent Bell Labs. На протяжении сорока лет он работал в исследовательском центре по компьютерным наукам компании Bell Telephone. Он закончил Гарвардский университет (Harvard University) по специальности «физика», степень доктора философии по прикладной математике он так и не получил, потому что он то ли забыл, то ли отказался внести небольшой (60 долларов) регистрационный взнос.[25]

За всё время своего существования, язык Си оброс легендами по поводу мотивов своего создания.

Согласно одной из легенд, Керниган и Ритчи любили одну компьютерную игру, которую они запускали на главном сервере компании. Позже, они захотели перенести её на компьютер, стоящий в офисе. Но он, к сожалению? не имел операционной системы, что сподвигло Кернигана и Ритчи её написать. Когда они захотели перенести систему на другой компьютер, это оказалось непростой задачей, так как система была написана полностью на ассемблере. Тогда у них возникла идея переписать её на язык высокого уровня. Сначала для этих целей планировали использовать язык Би, но в связи с тем, что он не давал на полную использовать новые возможности компьютера, на который они хотели перенести систему, было решено создать свой язык.

Согласно другой легенде, язык Си был первоапрельской шуткой, которая обрела нешуточную популярность.

Компилятор языка Си унаследовал традицию, заложенную ещё Никлаусом Виртом и был написан на самом Си. Согласно мнению большинства, название языка Си является третьей буквой алфавита. Оно появилось как указание на то, что язык Си является более усовершенствованным, чем язык Би. Однако, сам Ритчи по поводу названия языка говорил следующее:«Создав систему типов, соответствующий синтаксис и компилятор для нового языка, я почувствовал, что он заслуживает нового имени: NB показалось мне недостаточно четким. Я решил следовать однобуквенному стилю и назвал его C (Си), оставляя открытым вопрос, являлось ли после B это следующей буквой в алфавите или в названии BCPL».[26]

Так же справедливо указать некоторых людей, оказавших большое влияние на развитие языка С в 1974-1979 годы из компании Bell Labs. Дуг Мак-Илрой (Doug Mcllroy) был всеобщим любимцем, критиком и генератором идей. Он оказал огромное влияние на языки С++, С и на операционную систему Unix.

Брайан Керниган (Brian Kernighan) – не только выдающийся программист, но и писатель. Он даже оказал влияние на стиль изложения Бьярне Страуструпа, создателя С++, в своих книгах, по признанию самого Бьярне. В настоящее время Брайан Керниган – профессор Принстонского университета, он превосходных преподаватель, излагающий просто и ясно довольно сложные темы. Брайан закончил Университет Торонто по специальности «физика», в Принстонском Университете он получил степень доктора философии по электротехнике.

Первая книга, посвящённая языку Си была написана Керниганом и Ритчи в 1978 году и вышла в свет под названием «Язык программирования Си». Эта книга, в среде программистов более известная как «K&R», стала неофициальным стандартом языка Си.

Рисунок 4. Генеалогическое древо языков семейства С.[27]

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

Среди новшеств стандарта С99 стоит обратить внимание на изменение правила, касающегося места объявления переменных. Теперь новые переменные можно было объявлять посреди кода, а не только в начале составного блока или в глобальной области видимости. Это уводит Си от концепции объявления переменных в начале функции, которая присутствует в Паскале. Меня, как и многих программистов, привыкших писать на С++ (где это ограничение отсутствует) такое поведение компилятора вызывало недовольство. Тем не менее, даже с принятием стандарта С99, в программе Borland Embarcadeo RAD Studio 2010, ограничение на объявление переменных в начале блока кода всё ещё действует. Также можно указать другие места, в которых стандарты Си не до конца соблюдаются. Есть мнение, что это связано с тем, что основное внимание больших компаний, таких как Microsoft и Borland сосредоточено на более новых языках программирования. Однако, согласно заверениям компании Sun Microsystems, её среда разработки Sun Studio полностью поддерживает С99.

Стандарт С99 сейчас в большей или меньшей степени поддерживается всеми современными компиляторами языка Си. В идеале, код написанный на Си с соблюдением стандартов и без использования аппаратно- и системно-зависимых вызовов, становился как аппаратно- так и платформенно-независимым кодом.[28]

 Си является предшественником таких языков, как C++, Objective-C, C#, Java. 

Компания Microsoft для разработки родного языка к своей платформе .Net выбрала именно Си-подобный синтаксис. Более того, на Си написано множество операционных систем.
Конечно, Си не идеален: создатели языка – Кен Томпсон и Деннис Ритчи – долгое время дорабатывали его. Стандартизация Си продолжается до сих пор. Он существует более 45 лет и активно используется.

Согласно статистике, язык С находится на втором месте по популярности среди языков программирования по состоянию на январь 2018 года.[29] Его опережает только язык Java, который сейчас очень широко используется, но к нему мы вернемся позже. На третьем месте по тому же рейтингу находится язык С++.

Почему же язык С остается таким популярным, хотя давно появились такие языки как С++ и Java? Его популярность обусловлена тем, что люди, предпринимая попытки работать с ним, убеждались в его достоинствах.

Язык С является эффективным языком программирования. Его конструкции продуктивно используют возможности компьютеров, на которых он установлен. Программы на С отличаются компактностью и быстротой исполнения. [30]

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

Глава 3. История создания и развития языка С++.

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

Когда появились первые компьютеры, их программирование осуществлялось путем ввода двоичных команд на передней панели компьютера переключателями. Пока еще размер таких программ не превышал нескольких сотен команд, такая система была годной. Но когда понадобились более длинные программы, то был изобретен язык ассемблер. Благодаря этому программисты смогли создавать еще более объемные и сложные программы, используя символичное представление машинных команд. Так программы становились сложнее и сложнее, объемнее и объемнее, и для этого требовалась разработка языков программирования все более и более высокого уровня.

В моей работе уже упоминалось о первом широко используемом языке Fortran. И хотя этот язык был впечатляющим первым шагом, вряд ли его можно считать языком для написания ясных, легко запоминаемых программ. В 1960-е гг. было зарождено структурное программирование, использование которого было естественным на языках программирования вроде С. С появлением структурного программирования стало возможным написание сложных программ с небольшими затратами труда и времени. Но даже с использованием этих методов, возможности программистов стали вскоре очень ограниченными для реализации более сложных проектов.

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

Таким образом, сложность программ превысила возможности и всеми любимого и популярного языка С. Целью С++ явилось преодоление этого барьера и предоставление программистам возможности создавать, понимать и обслуживать еще более сложные программы.[31]

Язык С++ был разработан и реализован Бьярне Страуструпом из Исследовательского центра по компьютерным наукам компании Bell Telephone Laboratories в Мюррей-Хилл, штат Нью Джерси, где работали также упомянутые ранее Деннис Ритчи, Брайан Керниган, Кен Томпсон, Дуг Мак-Илрой и другие.

Бьярне Страуструп получил степень магистра по математике и компьютерным наукам в городе Эрхусе, Дания. После этого он переехал в Кэмбридж, где получил степень доктора философии по компьютерным наукам, работая с Дэвидом Уилером.[32]

Работа над созданием С++ началась в 1979 году, а в 1985 году он был выпущен для коммерческого использования. В 1990 году началась официальная процедура стандартизации языка. Первый международный стандарт (С++98) был ратифицирован в 1998 году, а второй в 2011 (С++11). Следующим стандартом стал С++14, а затем С++17, опубликованный в декабре 2017 года.

Наиболее значительным событием в истории языка С++ спустя десять лет после его появления стала стандартная библиотека контейнеров и алгоритмов – STL. Она стала результатом многолетней работы под руководством Александра Степанова, направленной на создание как можно более универсального и эффективного программного обеспечения.

Александр Степанов – изобретатель библиотеки STL и пионер обобщенного программирования. Он закончил МГУ и работал в области робототехники и алгоритмов, используя разные языки программирования (включая Ada, Scheme и С++). С 1979 г. он работал в академических организациях США, а также в промышленных компаниях, таких как GE Labs, AT&T Bell Labs, Hewlett-Packard, Silicon Graphics и Adobe.[33]

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

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

Хотя первоначально язык С++ создавался для написания очень больших программ, он используется не только для этого. На самом деле язык С++ может использоваться практически для любых задач программирования.[34]

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

Глава 4. История создания и развития языка Java.

Язык Java является наследником языков С++ и С. Многие черты языка Java привнес из этих языков. От С язык Java унаследовал синтаксис, а объектно-ориентированные признаки от С++. Как и С++, язык Java начинал разрабатываться в ответ на появившиеся потребности из своих предшественников.[35] Но, хотя и язык Java связан с С и С++, он также существенно отличается от них; ряд аспектов С и С++ в Java отсутствует, а из других языков включено несколько идей, не имеющих аналогов ни в С, ни в С++. Java – это в первую очередь, производственный, а не исследовательский язык программирования.[36]

В 1991 году группа инженеров из компании Sun Microsystems под руководством Патрика Нотона (Patrick Naughton) и члена совета директоров (и разностороннего специалиста) Джеймса Гослинга (James Gosling) занялись разработкой языка, который можно было бы использовать для программирования бытовых устройств, например, контроллеров для переключения каналов кабельного телевидения. Подобные устройства не обладают большими вычислительными мощностями и объемами оперативной памяти, и поэтому новый язык должен быть простым и способным генерировать очень компактный код. Кроме того, разные производители могут выбирать разные процессоры для контроллеров, и поэтому было очень важно не привязываться к конкретной их архитектуре. Проект создания нового языка получил кодовое название «Green».

Стремясь создать компактный и независимый от платформы код, разработчики решили создать переносимый язык, способный генерировать промежуточный код для виртуальной машины. Так как большинство разработчиков имели опыт с операционной системой Unix, то в основу разрабатываемого ими языка лег язык С++, а не Lisp, Pascal и т.д. Как сказал Гослинг в своем интервью: «Язык – это всегда средство, а не цель». Поначалу Гослинг решил назвать его Oak (Дуб).[37] Но потом сотрудники компании узнали, что слово «Oak» уже используется в качестве имени ранее созданного языка программирования, и изменили название на Java.

В 1992 году в рамках проекта «Green» был выпущен первый продукт под названием «*7». Это было устройство интеллектуального дистанционного управления. Но, к сожалению, ни одна компания-производитель не заинтересовалась этим продуктом. После этого разработчики языка занялись созданием устройства для кабельного телевидения, которое могло бы осуществлять новые виды услуг, например, включать видеосистему по требованию. Вновь ни один производитель этим не заинтересовался.

В 1993-1994 гг. разработчики безрезультатно занимались поисками покупателей продуктов, разработанных в рамках проекта «Green», получившего новое название – «First Person, Inc.». Патрик Нотон, один из основателей группы, налетал в общей сложности более 300 тысяч миль, пытаясь продать технологию.

Работа над проектом была прекращена в 1994 году.

Тем временем в рамках Интернета начала развиваться система под названием «World Wide Web». Ключевым элементом системы является браузер, превращающий гипертекстовые данные в изображение на экране. В 1994 году большинство пользователей применяли некоммерческий браузер Mosaic, разработанный в суперкомпьютерном центре университета штата Иллинойс в 1993г. Частично этот браузер был написан Марком Андреессеном (Mark Andreessen), подрядившимся работать за 6,85 долларов в час. В то время Марк заканчивал университет, и браузер был его дипломной работой. (Затем он достиг известности и успеха как один из основателей и ведущих специалистов компании Netscape).

К 1993 году членам группы разработчиков Java стало очевидно, что проблемы переносимости, часто возникающие при создании кода, предназначенного для встраивания в контролеры, возникают также и при попытках создания кода для Интернета. Фактически та же проблема, для решения которой в мелком масштабе предназначался язык Java, была актуальна в большем масштабе и в среде Интернета. Понимание этого обстоятельства подстегнуло разработчиков перевести внимание с бытовых приборов на программирование для Интернета.[38]

В своем интервью журналу SunWorld Гослинг сказал: «В середине 1994 г. мы поняли, что необходимо создать высококачественный браузер. Такой браузер должен представлять собой приложение, работающее по технологии «клиент-сервер», в которой важно то, что мы и сделали: архитектурная независимость, выполнение в реальном времени, надежность, безопасность – вопросы, которые были не так уж важны для рабочих станций. И мы создали такой браузер».

Сам браузер был разработан Патриком Нотоном и Джонатаном Пэйном (Johnatan Payne). Позднее он был доработан и получил имя Hotjava. Чтобы продемонстрировать все возможности Java, браузер был написан на этом языке. Разработчики браузера наделили свой продукт способностью выполнять код на веб-страницах. Программный продукт, подтверждавший действенность новой технологии, был представлен 23 мая 1995 года на выставке Sun World ’95 и вызвал всеобщий интерес к Java, сохраняющийся и по сей день.

Компания Sun Microsystems выпустила первую версию Java в начале 1996 года. Пользователи быстро поняли, что версия Java 1.0 не подходит для серьезных приложений. Эту версию можно было применять, к примеру, для визуальных эффектов на веб-страницах, но версия Java 1.0 была еще «сырой». В ней даже отсутствовали средства вывода на печать. В следующей версии Java 1.1 были устранены самые очевидные недостатки, но ее возможности были все еще очень ограничены.[39]

Выпуск Java 1.2 стал основной новостью на конференции JavaOne в 1998 году. В новой версии слабые средства для создания ГПИ и графических приложений были заменены на мощные инструменты. Это был огромный шаг вперед. В декабре 1998 года через три дня, после выпуска в свет, название было заменено на Java 2 Standart Edition Software Development Kit Version 1.2 (Стандартная редакция набора инструментальных средств для разработки программного обеспечения на Java 2, версия 1.2).

Кроме этой версии были представлены еще два варианты: Micro Edition для портативных устройств, например, для мобильных телефонов, и Enterprise Edition (редакция для корпоративных приложений).

Версии 1.3 и 1.4 редакции Standard Edition были поэтапными улучшениями версии Java 2. В них было меньшее количество ошибок, улучшена производительность и в них были внедрены новые возможности. Со временем выяснилось, что на Java удобно разрабатывать серверные приложения высокого качества.

В версии Java 5.0 были произведены наиболее существенные модификации с момента выпуска версии 1.1. (Изначально эта версия носила название 1.5, но на конференции JavaOne в 2004 году ей был присвоен номер 5.0). В эту версию были добавлены обобщенные типы, хотя при этом не были выдвинуты требования модификации виртуальной машины. Также из языка С# были привнесен ряд языковых элементов.

Версия 6 была выпущена в конце 2006 года. Сам язык не перетерпел серьезных изменений, но опять были внесены усовершенствования по производительности и расширен ряд библиотек.

В 2009 году компания Sun Microsystems была выкуплена компанией Oracle. В связи с этим разработка последующих версий Java приостановилась на долгое время. Лишь в 2011 году компания Oracle выпустила новую версию Java 7 с простыми усовершенствованиями.

В 2014 году была выпущена версия Java 8 с наиболее существенными изменениями за 20 лет существования этого языка. В версии Java 8 предпринята попытка внедрить стиль «функционального программирования», чтобы упростить выражение вычислений, которые могут выполняться параллельно.[40]

21 сентября 2017 года вышел очередной релиз Java 9 SE. Самым главным глобальным нововведением является Java Platform Module System — поддержка концепции модулей на уровне языка и JVM. Теперь сама стандартная библиотека JDK разбита на модули, а Java-разработчики имеют возможность создавать собственные модули, определять зависимости между ними, а также управлять видимостью пакетов в модуле для других модулей.[41]

Рассмотрев историю создания и развития языка Java, мы видим, что это самый молодой из рассмотренных мной языков, но при этом он в данный момент является самым популярным среди программистов.[42] И это неудивительно, учитывая глобальное развитие сети Интернет, которая стала неотъемлемой частью жизни практически любого человека в более-менее развитых странах.

Заключение

Рассмотрев историю развития программирования, в первую очередь напрашивается вывод о том, насколько это молодая, но стремительно развивающаяся наука. Если взять начало с появления первых компьютеров в 1949 году, то за 69 лет развитие программирование способствовало глобальному изменению и развитию всего мира. Благодаря этому, к примеру, стала исчезать рутинная и трудозатратная работа, которая все больше и больше заменяется компьютерными программами. Благодаря этому же появилась возможность, к примеру, обмениваться электронной почтой, а не писать письма от руки и бросать их в почтовый ящик. Такие изменения можно вспоминать и перечислять очень и очень долго, программирование поразительным образом изменило наш мир за столь малое количество времени.

В моей работе я проследил основные события в общей истории программирования, которые только начали, запустили этот глобальный процесс превращения мира, оказав огромное влияния и на развитие рассматриваемых мной языков программирования: С, С++, Java.

Я рассмотрел также отдельные предпосылки для появления каждого из этих языков. Узнал, кто стоял за созданием языков C, C++, Java и повлиял на их развитие.

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

И, наконец, в течение всего исследования была отслежена связь между исследуемыми мной языками программирования – создание языка С при появлении новых задач, повлекло за собой создание языка С++, и создание обоих этих языков вылилось в создание языка Java.

Список использованной литературы

  1. Бьярне Страуструп. Программирование: Принципы и практика с использованием C++ (2-е издание). М.: Издательский дом "Вильямс", 2016. 1328 С.
  2. Герберт Шилдт. С++ Шаг за шагом. Самоучитель. М., ЭКОМ Паблишерс 2007. 640 С.
  3. Герберт Шилдт. Java 8. Полное руководство, 9-е издание М.: «Вильямс», 2015. 1376 С.
  4. Джеймс Гослинг, Билл Джой, Гай Стил, Гилад Брача, Алекс Бакли. Язык программирования Java SE8. Подробное описание, 5-е издание. Москва, Санкт-Петербург-Киев, «Вильямс», 2015. 672 С.
  5. Кей С. Хорстманн, Гари Корнелл. Java. Библиотека профессионала, том 1. Основы. 10-е издание, М., «Вильямс», 2016, 864 С.
  6. Стивен Прата. Язык программирования С. Лекции и Упражнения. 6 издание. Москва, Санкт-Петербург, Киев., Издательский дом Вильямс, 2015г. 928 С.
  7. Джойс Риа Линик (Joyce Riha Linik). Ада Лавлейс: первый в мире программист. Журнал IQ при поддержке Intel.27.04.2016г. https://iq.intel.ru/ада-лавлейс-первый-в-мире-программист/
  8. Geek Brains. Ада Лавлейс — первая женщина-программист. 28.03.2016г. https://geekbrains.ru/posts/ada_lovelace
  9. Прогопедия — свободная энциклопедия языков программирования. Язык CPL. http://progopedia.ru/language/cpl/
  10. Научный портал Шаповалов.орг. История создания языков программирования. 28.12.2011 http://www.shapovalov.org/publ/7-1-0-77
  11. TIOBE индекс популярных языков программирования по состоянию на январь 2018г. https://www.tiobe.com/tiobe-index/
  12. Информационный портал linux.org. Релиз Java SE9. 22.09.2017 https://www.linux.org.ru/tag/java%209
  1. URL: https://iq.intel.ru/ада-лавлейс-первый-в-мире-программист/

  2. URL:https://geekbrains.ru/posts/ada_lovelace

  3. URL:https://geekbrains.ru/posts/ada_lovelace

  4. Бьярне Страуструп. Программирование: Принципы и практика с использованием C++ (2-е издание). М.: Издательский дом "Вильямс", 2016. С. 892

  5. Бьярне Страуструп. Программирование: Принципы и практика с использованием C++ С. 893

  6. Бьярне Страуструп. Программирование: Принципы и практика с использованием C++, С. 894

  7. Бьярне Страуструп. Программирование: Принципы и практика с использованием C++ С. 895

  8. Бьярне Страуструп. Программирование: Принципы и практика с использованием C++ С. 896

  9. Бьярне Страуструп. Программирование: Принципы и практика с использованием C++ С. 897

  10. Бьярне Страуструп. Программирование: Принципы и практика с использованием C++ С. 899

  11. Бьярне Страуструп. Программирование: Принципы и практика с использованием C++ С. 901

  12. Бьярне Страуструп. Программирование: Принципы и практика с использованием C++. С. 903

  13. Бьярне Страуструп. Программирование: Принципы и практика с использованием C++ С. 905

  14. Бьярне Страуструп. Программирование: Принципы и практика с использованием C++ С. 906

  15. Бьярне Страуструп. Программирование: Принципы и практика с использованием C++ С. 907

  16. Бьярне Страуструп. Программирование: Принципы и практика с использованием C++ С. 908

  17. Бьярне Страуструп. Программирование: Принципы и практика с использованием C++ С. 909

  18. URL:http://progopedia.ru/language/cpl/ Язык CPL

  19. Герберт Шилдт. С++ Шаг за шагом. Самоучитель. М., ЭКОМ Паблишерс 2007. С.15

  20. URL:http://www.shapovalov.org/publ/7-1-0-77 История создания языков программирования.

  21. Герберт Шилдт. С++ Шаг за шагом. Самоучитель. (2-е издание). С.15

  22. URL: https://geektimes.ru/post/114588/

  23. Бьярне Страуструп. Программирование: Принципы и практика с использованием C++ С. 912

  24. Герберт Шилдт. С++ Шаг за шагом. Самоучитель. (2-е издание). С.15

  25. Бьярне Страуструп. Программирование: Принципы и практика с использованием C++ С. 912

  26. URL: https://geektimes.ru/post/114588/

  27. Бьярне Страуструп. Программирование: Принципы и практика с использованием C++ С. 914

  28. URL: https://geektimes.ru/post/114588/

  29. URL: https://www.tiobe.com/tiobe-index/

  30. Стивен Прата. Язык программирования С. Лекции и Упражнения. 6 издание. Москва, Санкт-Петербург, Киев., Издательский дом Вильямс, 2015г. С. 27

  31. Герберт Шилдт. С++ Шаг за шагом. Самоучитель. (2-е издание). С.16

  32. Бьярне Страуструп. Программирование: Принципы и практика с использованием C++ С. 916

  33. Бьярне Страуструп. Программирование: Принципы и практика с использованием C++ С. 917

  34. Герберт Шилдт. С++ Шаг за шагом. Самоучитель. (2-е издание). С.17

  35. Герберт Шилдт. Java 8. Полное руководство, 9-е издание М.: «Вильямс», 2015. С. 33.

  36. Джеймс Гослинг, Билл Джой, Гай Стил, Гилад Брача, Алекс Бакли. Язык программирования Java SE8. Подробное описание, 5-е издание. Москва, Санкт-Петербург-Киев, «Вильямс», 2015. С. 21.

  37. Кей С. Хорстманн, Гари Корнелл. Java. Библиотека профессионала, том 1. Основы. 9-е издание, М., «Вильямс», 2016, С 33

  38. Герберт Шилдт. Java 8. Полное руководство, 9-е издание М.: «Вильямс», 2015. С. 38.

  39. Кей С. Хорстманн, Гари Корнелл. Java. Библиотека профессионала, том 1. Основы. 9-е издание, С 34

  40. Кей С. Хорстманн, Гари Корнелл. Java. Библиотека профессионала, том 1. Основы. 9-е издание, С 35

  41. URL: https://www.linux.org.ru/tag/java%209

  42. URL: https://www.tiobe.com/tiobe-index/