История развития языка с
История языка программирования С и C++
Язык программирования С (читается «Си») создан в начале 70-х годов, когда Кен Томпсон и Дэннис Ритчи из Bell Labs разрабатывали операционную систему UNDC. Сначала они создали часть компилятора С, затем использовали ее для компиляции остальной части компилятора С и, наконец, применили полученный в результате компилятор для компиляции UNIX. Операционная система UNIX первоначально распространялась в исходных кодах на С среди университетов и лабораторий, а получатель мог откомпилировать исходный код на языке С в машинный код с помощью подходящего компилятора С.
Распространение исходного кода сделало операционную систему UNIX уникальной; программист мог изменить операционную систему, а исходный код мог быть перенесен с одной аппаратной платформы на другую. Сегодня стандарт POSIX определяет стандартный набор системных вызовов UNIX, доступных в С, которые должны быть реализованы в версиях UNIX, являющихся POSIX-совместимыми. С был третьим языком, который разработали Томсон и Ритчи в процессе создания UNIX; первыми двумя были, разумеется, А и В.
C мобильный язык ассемблера
По сравнению с более ранним языком — BCPL, язык С был улучшен путем добавления типов данных определенной длины. Например, тип данных int мог применяться для создания переменной с определенным числом битов (обычно 16), в то время как тип данных long мог использоваться для создания целой переменной с большим числом битов (обычно 32). В отличие от других языков высокого уровня, С мог работать с адресами памяти напрямую с помощью указателей и ссылок. Поскольку С сохранил способность прямого доступа к аппаратному обеспечению, его часто относят к языкам среднего уровня или в шутку называют «мобильным языком ассемблера».
С — структурный язык программирования
Что касается грамматики и синтаксиса, то С является структурным языком программирования. В то время как многие современные программисты мыслят в категориях классов и объектов, программисты на С думают в категориях процедур и функций. В С можно определить собственные абстрактные типы данных, используя ключевое слово struct. Аналогично можно описывать собственные целые типы (перечисления) и давать другие названия существующим типам данных при помощи ключевого слова typedef. В этом смысле С является структурным языком с зародышами объектно-ориентированного программирования.
Стандартизация языка С
Широкое распространение языка C на различных типах компьютеров (иногда называемых аппаратными платформами) привело, к сожалению, ко многим вариациям языка. Они были похожи, но несовместимы друг с другом. Это было серьезной проблемой для разработчиков программ, нуждавшихся в написании совместимых программ, которые можно было бы выполнять на нескольких платформах. Стало ясно, что необходима стандартная версия C. В 1983г. ANSI (Американский Национальный Комитет Стандартов) сформировал технический комитет X3J11 для создания стандарта языка C (чтобы «обеспечить недвусмысленное и машинно-независимое определение языка»). В 1989 стандарт был утвержден. ANSI скооперировался с ISO (Международной Организацией Стандартов), чтобы стандартизовать C в международном масштабе; совместный стандарт был опубликован в 1990 году и назван ANSI/ISO 9899:1990. Этот стандарт совершенствуется до сих пор и поддерживается большинством фирм разработчиков компиляторов.
Рождение С++
Бьерн Страуструп высвободил объектно-ориентированный потенциал С путем перенесения возможностей классов Simula 67 в С. Первоначально новый язык носил имя «С с классами» и только потом стал называться C++. Язык C++ достиг популярности, будучи разработанным в Bell Labs, позже он был перенесен в другие индустрии и корпорации. Сегодня это один из наиболее популярных (и авторитетных) языков программирования в мире. C++ наследует как хорошие, так и плохие стороны С.
Откровения Бьерна Страуструп
Бьерн Страуструп: «Я придумал C++, записал его первоначальное определение и выполнил первую реализацию. Я выбрал и сформулировал критерии проектирования C++, разработал его основные возможности и отвечал за судьбу предложений по расширению языка в комитете по стандартизации C++», — пишет автор самого популярного языка программирования. — «Язык C++ многим обязан языку C, и язык C остается подмножеством языка C++ (но в C++ устранены несколько серьезных брешей системы типов C). Я также сохранил средства C, которые являются достаточно низкоуровневыми, чтобы справляться с самыми критическими системными задачами. Язык C, в свою очередь многим обязан своему предшественнику, BCPL; кстати, стиль комментариев // был взят в C++ из BCPL. Другим основным источником вдохновения был язык Simula67. Концепция классов (с производными классами и виртуальными функциями) была позаимствована из него. Средства перегрузки операторов и возможность помещения объявлений в любом месте, где может быть записана инструкция, напоминает Algol68. «
Почему С++
Название C++ выдумал Рик Масситти. Название указывает на эволюционную природу перехода к нему от C. «++» — это операция приращения в C. Чуть более короткое имя C+ является синтаксической ошибкой; кроме того, оно уже было использовано как имя совсем другого языка. Знатоки семантики C находят, что C++ хуже, чем ++C. Названия D язык не получил, поскольку он является расширением C и в нем не делается попыток исцеляться от проблем путем выбрасывания различных особенностей.
Зачем был нужен С++
Изначально язык программирования C++ был разработан, чтобы автору и его друзьям не приходилось программировать на ассемблере, C или других современных языках высокого уровня. Основным его предназначением было сделать написание хороших программ более простым и приятным для отдельного программиста. Плана разработки C++ на бумаге никогда не было; проект, документация и реализация двигались одновременно. Разумеется, внешний интерфейс C++ был написан на C++. Никогда не существовало «Проекта C++» и «Комитета по разработке C++». Поэтому C++ развивался и продолжает развиваться во всех направлениях, чтобы справляться со сложностями, с которыми сталкиваются пользователи, а также в процессе дискуссий автора с его друзьями и коллегами.
Настоящий объектно-ориентированный C++
В языке С++ полностью поддерживаются принципы объектно-ориентированного программирования, включая три кита, на которых оно стоит: инкапсуляцию, наследование и полиморфизм. Инкапсуляция в С++ поддерживается посредством создания нестандартных (пользовательских) типов данных, называемых классами. Язык С++ поддерживает наследование. Это значит, что можно объявить новый тип данных (класс), который является расширением существующего.
Хотя язык программирования С++ справедливо называют продолжением С и любая работоспособная программа на языке С будет поддерживаться компилятором С++, при переходе от С к С++ был сделан весьма существенный скачок. Язык С++ выигрывал от своего родства с языком С в течение многих лет, поскольку многие программисты обнаружили, что для того, чтобы в полной мере воспользоваться преимуществами языка С++, им нужно отказаться от некоторых своих прежних знаний и приобрести новые, а именно: изучить новый способ концептуальности и решения проблем программирования. Перед тем как начинать осваивать С++, Страуструп и большинство других программистов, использующих С++ считают изучение языка С необязательным.
Язык программирования C++ в настоящее время считается господствующим языком, используемым для разработки коммерческих продуктов, 90% игр пишутся на С++ с применением DirectX.
Язык программирования С (читается «Си») создан в начале 70-х годов, когда Кен Томпсон и Дэннис Ритчи из Bell Labs разрабатывали операционную систему UNDC. Сначала они создали часть компилятора С, затем использовали ее для компиляции остальной части компилятора С и, наконец, применили полученный в результате компилятор для компиляции UNIX. Операционная система UNIX первоначально распространялась в исходных кодах на С среди университетов и лабораторий, а получатель мог откомпилировать исходный код на языке С в машинный код с помощью подходящего компилятора С.
C мобильный язык ассемблера
По сравнению с более ранним языком — BCPL, язык С был улучшен путем добавления типов данных определенной длины. Например, тип данных int мог применяться для создания переменной с определенным числом битов (обычно 16), в то время как тип данных long мог использоваться для создания целой переменной с большим числом битов (обычно 32). В отличие от других языков высокого уровня, С мог работать с адресами памяти напрямую с помощью указателей и ссылок. Поскольку С сохранил способность прямого доступа к аппаратному обеспечению, его часто относят к языкам среднего уровня или в шутку называют «мобильным языком ассемблера».
Что касается грамматики и синтаксиса, то С является структурным языком программирования. В то время как многие современные программисты мыслят в категориях классов и объектов, программисты на С думают в категориях процедур и функций. В С можно определить собственные абстрактные типы данных, используя ключевое слово struct. Аналогично можно описывать собственные целые типы (перечисления) и давать другие названия существующим типам данных при помощи ключевого слова typedef. В этом смысле С является структурным языком с зародышами объектно-ориентированного программирования.
Это значит, что можно объявить новый тип данных класс, который является расширением существующего.
13.03.2020 18:19:00
2020-03-13 18:19:00
Источники:
Http://interestprograms. ru/article-history-cpp
История возникновения и развития языка программирования Си (С ) и Java (Создание языка С и история языка Java) Курсовая №46201 » /> » /> .keyword { color: red; }
История развития языка сИстория возникновения и развития языка программирования Си (С ) и Java (Создание языка С и история языка Java)
История возникновения и развития языка программирования Си (С++) и Java (Создание языка С++ и история языка Java)
С++ — один из наиболее популярных языков программирования, используемый для разработки программного обеспечения, поддерживающий процедурное (при котором последовательно выполняемые команды можно собрать в подпрограммы), объектно-ориентированное (стиль кодирования, который позволяет группировать задачи в классы), обобщенное программирование (написание кода, который может быть многократно использован с объектами различных типов), сочетающий свойства высокоуровневых и низкоуровневых языков. С++ используется для создания программ, рассчитанных на выполнение определенных задач в разных сферах жизни человека, игр, драйверов, операционных систем и прочего. Он образован на основе языка С. Многие программы на С исправно работают и с компилятором С++ из-за тесной связи.
Также часто сравниваются Java и C++ как языки, которые унаследовали синтаксис Си, несмотря на большие различия на всех уровнях. Java используется в конкретном секторе промышленности: безопасный язык с низким порогом вхождения для разработки прикладных приложений широкого рынка с высокими показателями адаптации к другой среде. С++ претендует на универсальное применение во всех задачах для всех категорий программистов, но не удовлетворяет в полной мере требованиям ни одной из заявленных сфер применимости. Базовая библиотека С++ в сравнении с Java имеет меньше ресурсов, но предоставляет свободу выбора сторонних библиотек.
Дальнейшее развитие языка будет идти путем дополнения в существующие стандартные библиотеки. Планом развития С++ на будущее является расширение обобщенного программирования.
Тема исследования: История возникновения и развития языка программирования Си (С++) и Java..
Цель исследования: Изучить историю возникновения и развития языка программирования Си (С++) и Java.
Объект исследования: Языки программирования Си (С++) и Java..
Задача исследования — рассмотреть
Предпосылки появления объектно-ориентированных языков Создание языка С++ Стандартизация языка С++ История языка Java Иерархия версий Java
Глава 1. Предпосылки появления объектно-ориентированных языков
1.1 Появление первых компьютеров
В 1945 году в Америке построили первый компьютер — ЭНИАК (Electronic Numerical Integrator And Computer). Он состоял из 17 тысяч ламп, весил 27 тонн и стоил 480 000 долларов. Сравните: новый iPhone X за 1000 долларов помещается в кармане и почти в 25 тысяч раз мощнее.
В те времена ещё не было языков программирования, и ЭНИАК управлялся через систему команд, записанных в машинном коде — то есть в виде последовательности единиц и нолей. Писать программы на машинном коде было долго и сложно. Представьте, что в супермаркете на полке с ценниками нет названий товаров — только номер штрихкода и цена. Чтобы узнать цену, например, на икру, нужно посмотреть номер на банке и сопоставить с ценниками. Из-за ошибки в одну цифру можно взять чёрную икру по цене белого хлеба (а на кассе обнаружить, что сумма в чеке в сто раз больше). Так и одна ошибка в цифре машинного кода приводила к неправильному результату вычисления всей программы.
Рис.1 Первый в мире компьютер ЭНИАК
Ошибки в работе компьютера программисты называют «багами». В переводе с английского bug означает «насекомое» или «жучок». Это слово употребляли и раньше — например, радиоинженеры называли так технические неполадки в оборудовании, которые было трудно обнаружить. Но первый в истории компьютерный баг, по легенде, действительно был насекомым! В 1947 в Гарварде программист Грейс Хоппер искала причину ошибки в работе суперкомпьютера Mark II и обнаружила моль, которая залетела внутрь компьютера и заклинила систему. С помощью скотча она вклеила моль в рабочий журнал и озаглавила запись как «Первый фактический случай обнаружения бага».
1.2 Ассемблер — переводчик с человеческого на машинный
Как упростить управление компьютером задумались в Кембриджском университете, когда профессор Морис Уилкс начал работу над созданием электронно-вычислительной машины ЭДСАК. Позже именно для неё была разработана первая компьютерная игра — «Крестики-нолики». Но главная заслуга Уилкса, конечно, не в этом. А в том, что в 1949 году он создал программу, которая позволяла писать команды в удобной для человека форме и сама переводила их в машинный код.
Программу Уилкс называл собирающей системой или «ассемблером», от английского глагола «assemble» — собирать. Вместо двоичного кода в языке ассемблера использовались буквы, цифры или сокращения, которые отражали суть команды. Например, команда «Mov Ax, 6» на языке ассемблера означала «передвинь в ячейку памяти „Ах“ число 6». Согласитесь, запоминать такие команды гораздо проще, чем длинные ряды нолей и единиц.
И всё же у языка ассемблера были серьёзные недостатки. Коды по-прежнему должны были точно соответствовать системе команд компьютера, и для каждой конкретной вычислительной машины был нужен свой язык ассемблера. Такие языки называют машинно-зависимыми или языками низкого уровня.
1.3 Первые машинно-независимые языки
Первый язык высокого уровня появился в 1957 году в Америке. Он назывался Фортран (FORmula TRANslator) и позволял писать программы, не думая об архитектуре конкретного компьютера. Код стал «переносимым» — одна и та же программа теперь запускалась на разных устройствах.
Это стало возможным благодаря специальным программам — компиляторам. Они превращали текст на Фортране в машинный код и сами устанавливали соответствия между ним и системой команд компьютера.
Обложка автоматической системы кодирования Fortran для IBM EOS-704 EDPM, которая считается первой книгой о Fortran
Переносимость кода объединила усилия программистов по всему миру и позволила продавать программы. Теперь, чтобы решить квадратное уравнение или посчитать косинус, можно было использовать уже написанный другими программистами код, а не писать программу с нуля.
Так появились «библиотеки» — сборники программ, решающих определенный класс задач. Программисты писали библиотеки и продавали компаниям, которые использовали их для сложных вычислений — например, расчета траектории полета ракеты.
Рис. 2 Работа на первых ЭВМ
Фортран был ориентирован на научно-технические математические расчеты
Сегодня на этом языке так много математических библиотек, что среди ученых даже ходит присказка: «у любой математической задачи уже есть решение на Фортране». Он был настолько успешен, что в Европе создали ALGOL (ALGOrythmic Language) — свой язык программирования высокого уровня, чтобы избежать монополии.
1.4 Структурное программирование и язык Си
Программы с каждым годом становились сложнее, а значит росло количество ошибок и время отладки — их обнаружения и исправления. Потребовалось организовывать код программ так, чтобы избежать лишних ошибок и упростить их поиск. Так в начале 70-х появилось структурное программирование.
Идея структурного программирования — в создании программы из последовательных блоков. Программист работает над блоками по очереди и не переходит дальше, пока не убедится, что всё работает, как задумано. Для создания блоков используют три базовых конструкции: последовательность, ветвление и цикл.
Последовательность выполняется автоматически из стоящих друг за другом инструкций: «сначала выполни умножение и деление, потом — сложение и вычитание». Ветвление помогает работать с условиями: «если дискриминант больше нуля, тогда ищи решения, а если меньше, тогда напиши, что решений нет». Цикл помогает многократно повторять действия, пока выполняется условие: «пока корзинка не полная, сорви ягоду с куста и положи в корзинку».
Во времена структурного программирования появился язык Си. Его придумал американец Деннис Ритчи и в 1999 году получил Национальную медаль США за достижения в области технологий и инноваций. Язык был основан на старом языке Би, поэтому его назвали Си — по следующей букве английского алфавита. Си был универсальным и очень быстрым, поэтому сразу широко распространился и стал прародителем для современных языков: C++, C#, Objective C, Java.
Глава 2. Развитие языка С++
2.1 Создание языка С++
Название C++ происходит от языка программирования C, в котором унарный оператор ++ обозначает увеличение значения переменной на 1. Сначала этот язык носил имя С с классами, затем стал называться C++. После буквы С добавлено именно два плюса, потому что один образует синтаксическую ошибку в языке С, а также это имя уже было занято.
Рис.3 Кен Томпсон (слева) и Деннис Ритчи (справа), создатели языка программирования Си
Си – это «сопутствующий продукт», полученный во время создания операционной системы UNIX, которая разрабатывалась в Bell Laboratories Кеном Томпсоном, Денисом Ритчи и ко. Томпсон в одиночку написал оригинальную версию UNIX, которая работала на DEC PDP-7, одном из первых миникомпьютеров всего с 8К слов в основной памяти (в конце концов, это был 1969).
Как и остальные операционные системы того времени, UNIX был написан на ассемблере. Отладка программ на ассемблере настоящая мука и их проблематично улучшать, и UNIX не был исключением. Томпсон решил, что для дальнейшей разработки ОС необходим язык высокого уровня и придумал небольшой язык B. За основу Томпсон взял язык BCPL, язык для системного программирования, разработанный в середине 60-х. BCPL, в свою очередь, берёт начало от Алгола 60, одного из самых первых (и оказавших наибольшее влияние) языков.
Ритчи вскоре присоединился к проекту 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 обеспечил важное преимущество: переносимость. Написав компилятор C для каждой из машин в Bell Labs, команда разработчиков могла портировать на них UNIX.
2.2 Стандартизация языка
C продолжил развиваться в 70-х, особенно в период с 1977 по 1979, когда вышла первая книга по C. Книга «Язык программирования Си», написанная Брайаном Керниганом и Денисом Ритчи и опубликованная в 1978 стала библией программистов на Си. При отсутсвии официального стандарта эта книга – известная также как K&R, или «Белая Книга», как любят называть поклонники си – фактически стала стандартом. В 70-х программистов на C было немного и большинство из низ были пользователями UNIX. Тем не менее, в 80-х C вышел за узкие рамки мира UNIX. Компиляторы C стали доступны на различных машинах, работающих под управлением разных операционных систем. В частности, Си стал распространяться на быстро развивающейся платформе IBM PC.
Рис. 4Брайан Керниган (Brian Kernighan), Деннис Ритчи (Dennis Ritchie) и Кен Томпсон (Ken Thompson) как бы говорят, что без бороды ты не программист.
Вместе с ростом популярности появились проблемы. Программисты, писавшие новые компиляторы брали за основу язык, описанный в K&R. К сожалению, в K&R некоторые особенности языка были описаны расплывчато, поэтому компиляторы часто трактовали их на своё усмотрение. Кроме того, в книге не было чёткого разделения между тем, что является особенностью языка, а что особенностью операционной системы UNIX. Ухудшало ситуацию и то, что после публикации K&R Си продолжал развиваться: в него добавлялись новые возможности и из него вырезались старые. Вскоре появилась очевидная необходимость в исчерпывающем, точном и соответствующем современным требованиям описании языка. Без такого стандарта стали появляться диалекты языка, которые мешали переносимости – сильнейшей стороне языка.
Программы становились всё сложнее, и над одним проектом могли работать десятки человек. Нужно было найти универсальный путь, который бы объединял код, написанный разными программистами. Эту проблему решило объектно-ориентированное программирование (ООП), построенное вокруг абстракции данных. Это значит, что базовым элементом программы становится абстрактный «объект». Объектом может быть что угодно — радуга, квадратное уравнение, «Чёрный квадрат» Малевича. У каждого объекта есть набор характеристик. Например, у радуги это длина дуги, насыщенность, количество видимых цветов. Объекты с одинаковым набором характеристик объединяются в классы. Если взять класс «дом» и задать параметры — длину, высоту, количество этажей, можно получить конкретный дом, в котором вы живёте, — объект. При этом принцип работы один, и не важно, с какими именно данными вы работаете. Работать с объектами класса можно, не вникая в структуру: чтобы снести дом, нам необязательно знать, сколько в нем этажей и комнат.
Первым распространённым объектно-ориентированным языком стал Smalltalk. Его в 1970-х годах разработала группа учёных корпорации Xerox под руководством Алана Кэя. Этого американского учёного называют одним из отцов-основателей ООП — за работу над ним он получил премиюТьюринга. Позже, взяв за основу язык Си, датчанин Бьёрн Страуструп придумал С++. Сейчас этот язык используют для создания высоконагруженных систем (в которых нагрузки начинаются от 10 тысяч пользователей в секунду).
При создании C++ Бьёрн Страуструп хотел [10]
Получить универсальный язык со статическими типами данных, эффективностью и переносимостью языка C.
Непосредственно и всесторонне поддерживать множество стилей программирования, в том числе процедурное программирование, абстракцию данных, объектно-ориентированное программирование и обобщённое программирование.
Дать программисту свободу выбора, даже если это даст ему возможность выбирать неправильно.
Максимально сохранить совместимость с C, тем самым делая возможным лёгкий переход от программирования на C.
Избежать разночтений между C и C++: любая конструкция, допустимая в обоих языках, должна в каждом из них обозначать одно и то же и приводить к одному и тому же поведению программы.
Избегать особенностей, которые зависят от платформы или не являются универсальными.
«Не платить за то, что не используется» — никакое языковое средство не должно приводить к снижению производительности программ, не использующих его.
Не требовать слишком усложнённой среды программирования.
Выбор именно C в качестве базы для создания нового языка программирования объясняется тем, что язык C:
1. является многоцелевым, лаконичным и относительно низкоуровневым языком;
2. подходит для решения большинства системных задач;
3. исполняется везде и на всём;
4. стыкуется со средой программирования UNIX.
Несмотря на ряд известных недостатков языка C, Страуструп пошёл на его использование в качестве основы, так как «в C есть свои проблемы, но их имел бы и разработанный с нуля язык, а проблемы C нам известны». Кроме того, это позволило быстро получить прототип компилятора (cfront), который лишь выполнял трансляцию добавленных синтаксических элементов в оригинальный язык C.
По мере разработки C++ в него были включены другие средства, которые перекрывали возможности конструкций C, в связи с чем неоднократно поднимался вопрос об отказе от совместимости языков путём удаления устаревших конструкций. Тем не менее, совместимость была сохранена из следующих соображений:
Сохранение действующего кода, написанного изначально на C и прямо перенесённого в C++;
Исключение необходимости переучивания программистов, ранее изучавших C (им требуется только изучить новые средства C++);
Исключение путаницы между языками при их совместном использовании («если два языка используются совместно, их различия должны быть или минимальными, или настолько большими, чтобы языки было невозможно перепутать»).
К 1983 году в язык были добавлены новые возможности, такие как виртуальные функции, перегрузка функций и операторов, ссылки, константы, пользовательский контроль над управлением свободной памятью, улучшенная проверка типов и новый стиль комментариев (//). Получившийся язык уже перестал быть просто дополненной версией классического C и был переименован из C с классами в «C++». Его первый коммерческий выпуск состоялся в октябре 1985 года.
До начала официальной стандартизации язык развивался в основном силами Страуструпа в ответ на запросы программистского сообщества. Функцию стандартных описаний языка выполняли написанные Страуструпом печатные работы по C++ (описание языка, справочное руководство и так далее).
Стандарт C++ состоит из двух основных частей: описание стандартного сборника подпрограмм или объектов, используемых для разработки программ, и описание ядра языка. Кроме того, существует огромное количество нестандартных библиотек C++ . В программах на C++ можно использовать многие библиотеки C.
Нововведениями C++ в сравнении с C являются:
— поддержка объектно-ориентированного программирования;
— поддержка обобщённого программирования;
— новые типы данных;
— исключения — реакции программы на ошибки;
— пространства имён (хранилища для группировки уникальных идентификаторов);
— перегрузка операторов (существования в одной области видимости нескольких различных вариантов применения оператора);
— перегрузка имён функций;
— ссылки и операторы управления свободно распределяемой памятью;
— дополнения к стандартной библиотеке.
В 1985 году вышло первое издание «Языка программирования C++», обеспечивающее первое описание этого языка, что было чрезвычайно важно из-за отсутствия официального стандарта [12].
В 1989 году состоялся выход C++ версии 2.0. Его новые возможности включали множественное наследование, абстрактные классы, статические функции-члены, функции-константы и защищённые члены. В 1990 году вышло «Комментированное справочное руководство по C++», положенное впоследствии в основу стандарта. Последние обновления включали шаблоны, исключения, пространства имён, новые способы приведения типов и булевский тип.
Стандартная библиотека C++ также развивалась вместе с ним. Первым добавлением к стандартной библиотеке C++ стали потоки ввода-вывода, обеспечивающие средства для замены традиционных функций C printf и scanf. Позднее самым значительным развитием стандартной библиотеки стало включение в неё Стандартной библиотеки шаблонов.
В 1998 году был опубликован стандарт языка ISO/IEC 14882:1998 (известный как C++98),[8] разработанный комитетом по стандартизации C++ (ISO/IEC JTC1/SC22/WG21 working group). Стандарт C++ не описывает способы именования объектов, некоторые детали обработки исключений и другие возможности, связанные с деталями реализации, что делает несовместимым объектный код, созданный различными компиляторами. Однако для этого третьими лицами создано множество стандартов для конкретных архитектур и операционных систем [9].
Язык подвергся небольшим изменениям в 1995 (изменения описаны в документе, который обычно называют Поправка 1). Более значительные изменения случились в 1999 году, когда был опубликован стандарт ISO/IEC 9899:1999. Язык, описанный в этом стандарте обычно называют C99. Термины «ANSI C», «ANSI/ISO C» и «ISO C», когда-то используемые для описания C99 из-за существования двух стандартов имеют двоякое толкование.
В 1998 году был опубликован стандарт языка ISO/IEC 14882:1998 (известный как C++98),[8] разработанный комитетом по стандартизации C++ (ISO/IEC JTC1/SC22/WG21 working group). Стандарт C++ не описывает способы именования объектов, некоторые детали обработки исключений и другие возможности, связанные с деталями реализации, что делает несовместимым объектный код, созданный различными компиляторами. Однако для этого третьими лицами создано множество стандартов для конкретных архитектур и операционных систем.
В 2003 году был опубликован стандарт языка ISO/IEC 14882:2003, где были исправлены выявленные ошибки и недочёты предыдущей версии стандарта.
В 2005 году был выпущен отчёт Library Technical Report 1 (кратко называемый TR1). Не являясь официально частью стандарта, отчёт описывает расширения стандартной библиотеки, которые, как ожидалось авторами, должны быть включены в следующую версию языка C++. Степень поддержки TR1 улучшается почти во всех поддерживаемых компиляторах языка C++ [8].
С 2009 года велась работа по обновлению предыдущего стандарта, предварительной версией нового стандарта сперва был C++09, а спустя год C++0x, сегодня — C++11, куда были включены дополнения в ядро языка и расширение стандартной библиотеки, в том числе большую часть TR1.
В 2011 году вместе с редакцией языка Си++ был выпущен стандарт C11. Несмотря на наличие стандарта 11 года, многие компиляторы до сих пор не поддерживают полностью даже версии C99, так что использование стандарта С11 будет указано явно.
2014-выход стандарта C++14 («International Standard ISO/IEC 14882:2014(E) Programming Language C++»); C++14 можно рассматривать как небольшое расширение над C++11, содержащее в основном исправления ошибок и небольшие улучшения
2017 время появления нового стандарта. Имя нового стандарта – C++1z. Стали известны основные нововведения в будущем стандарте, но этот список, вероятно, будет многократно увеличен ко времени выхода. C++17 – релиз, который расширил возможности C++: в языке появились структурированные привязки, контейнеры и новые типы данных. В версии 17 в стандартной библиотеке C++ появилось много полезных типов данных. Структурированные привязки – полезная новинка C++17. Они позволяют делать множественные привязки к структурированным типам, вроде массивов и кортежей. Это нужно, чтобы, например, присвоить все члены структуры независимым переменным единственным вызовом. Использование структурных привязок делает код в целом более чистым и понятным. Эта структура появилась в C++11. Они аналогичны массивам и представляют собой коллекции с фиксированной длиной. Кортежи можно использовать, чтобы вернуть несколько значений функции [11].
Никто не обладает правами на язык C++, он является свободным. Однако сам документ стандарта языка (за исключением черновиков) не доступен бесплатно.
Глава 3. История развития языка Java
3.1 История языка Java
В 1992 г. в рамках проекта «Green» была выпущена первая продукция под названием «*7». Это было устройство интеллектуального дистанционного управления. (Умещаясь в корпусе 6x4x4 дюйма, оно имело мощность рабочей станции SPARC.) К сожалению, ни одна из компаний-производителей электронной техники не заинтересовалась этой разработкой. Затем группа стала заниматься созданием устройства для кабельного телевидения, которое могло бы осуществлять новые виды услуг, например, включать видеосистему по требованию. И снова они не получили ни одного контракта. Примечательно, что одной из компаний, согласившихся все-таки с ними сотрудничать, руководил Джим Кларк (Jim Clark) — основатель компании Netscape, впоследствии сделавшей очень много для развития языка Java.
Весь 1993 год и половину 1994 года продолжались безрезультатные поиски покупателей продукции, разработанной в рамках проекта «Green», получившего новое название — «First Person, Inc.». Патрик Нотой, один из основателей группы, в основном занимавшийся маркетингом, налетал в общей сложности более 300 тысяч миль, пытаясь продать разработанную технологию. Работа над проектом «First Person, Inc.» была прекращена в 1994 г.
Тем временем в рамках Интернета начала развиваться система под названием World Wide Web (Всемирная паутина). Ключевым элементом этой системы является браузер, превращающий гипертекстовые данные в изображение на экране. В 1994 году большинство пользователей применяли некоммерческий веб-браузер Mosaic, разработанный в суперкомпьютерном центре университета штата Иллинойс в 1993 г. Частично этот браузер был написан Марком Андреессеном (Mark Andreessen), подрядившимся работать за 6,85 доллара в час. В то время Марк заканчивал университет, и браузер был его дипломной работой. (Затем он достиг известности и успеха как один из основателей и ведущих специалистов компании Netscape.)
В своем интервью журналу Sun World Гослинг сказал, что в середине 1994 г. разработчики нового языка поняли: «Нам нужно создать высококачественный браузер. Такой браузер должен представлять собой приложение, соответствующее технологии «клиент-сервер», в которой жизненно важным является именно то, что мы сделали: архитектурная независимость, выполнение в реальном времени, надежность, безопасность — вопросы, которые были не так уж важны для рабочих станций. И мы создали такой браузер» [6].
Сам браузер был разработан Патриком Йотоном и Джонатаном Пэйном (Johnatan Payne). Позднее он был доработан и получил имя Hotjava. Чтобы продемонстрировать все возможности Java, браузер был написан на этом языке. Но разработчики не забывали о таких средствах, которые теперь называются аплетами, наделив свой продукт способностью выполнять код на веб-страницах. Программный продукт, подтверждавший действенность новой технологии, был представлен 23 мая 1995 года на выставке SunWorld ’95 и вызвал всеобщий интерес к Java, сохраняющийся и по сей день.
Компания Sun Microsystems выпустила первую версию Java в начале 1996 г. Пользователи быстро поняли, что версия Java 1.0 не подходит для разработки серьезных приложений. Конечно, эту версию можно применять для реализации визуальных эффектов на веб-страницах, например, написать аплет, выводящий на страницу случайно «прыгающий» текст, но версия Java 1.0 была еще сырой. В ней даже отсутствовали средства вывода на печать. Грубо говоря, версия Java 1.0 еще не была готова. В следующей версии, Java 1.1, были устранены наиболее очевидные недостатки, улучшены средства рефлексии и реализована новая модель событий для программирования ГПИ. Но несмотря на это, ее возможности были все еще ограничены [2].
Выпуск версии Java 1.2 стал основной новостью на конференции JavaOne в 1998 г. В новой версии слабые средства для создания графического пользовательского интерфейса и графических приложений были заменены мощным инструментарием. Это был шаг вперед, к реализации лозунга «Write Once, Run Anywhere» («Однажды написано — везде выполняется»), выдвинутого при разработке предыдущих версий. В декабре 1998 года через три дня (!) после выхода в свет название новой версии было изменено на громоздкое Java 2 Standard Edition Software Development Kit Version 1.2(Стандартная редакция набора инструментальных средств для разработки программного обеспечения на Java 2, версия 1.2).
Кроме Standard Edition, были предложены еще два варианта: Micro Edition («микроредакция») для портативных устройств, например для мобильных телефонов, и Enterprise Edition (редакция для корпоративных приложений) [1].
Версии 1.3 и 1.4 набора инструментальных средств Standard Edition являются результатами поэтапного усовершенствования первоначально выпущенной версии Java 2. Они обладают новыми возможностями, повышенной производительностью и, разумеется, содержат много меньше ошибок. В процессе развития Java многие взгляды на аплеты и клиентские приложения были пересмотрены. В частности, оказалось, что на Java удобно разрабатывать высококачественные серверные приложения.
В версии 5.0 язык Java подвергся наиболее существенной модификации с момента выпуска версии 1.1. (Первоначально версия 5.0 имела номер 1.5, но на конференции JavaOne в 2004 г. была принята новая нумерация версий.) После многолетних исследований были добавлены обобщенные типы (которые приблизительно соответствуют шаблонам C++), хотя при этом не были выдвинуты требования модификации виртуальной машины. Ряд других языковых элементов, например, циклы в стиле for each, автоупаковка и метаданные, были явно «навеяны» языком С# [3].
Версия 6 (без суффикса.0) была выпущена в конце 2006 г. Опять же сам язык не претерпел существенных изменений, но были внесены усовершенствования, связанные с производительностью, а также произведены расширения библиотек.
По мере того как в центрах обработки данных все чаще стали применяться аппаратные средства широкого потребления вместо специализированных серверов, для компании Sun Microsystems наступили тяжелые времена, и в конечном итоге она была приобретена компанией Oracle в 2009 г. Разработка последующих версий Java приостановилась на долгое время. И только в 2011 году компания Oracle выпустила новую версию Java 7 с простыми усовершенствованиями. А более серьезные изменения было решено отложить до версии Java 8, выпуск которой ожидается в 2013 г.
Программы на Java превращаются программой-компилятором в специальный байт-код. Его можно запускать на любом устройстве, на котором установлена JVM (Java Virtual Machine) — виртуальная машина Java. Раньше один и тот же текст программы нужно было пропускать через компилятор несколько раз для каждой системы. В Java код компилируется только один раз и работает везде — за его связь с компьютерами отвечает JVM [5].
Такой подход был революционным с точки зрения переносимости кода. Программы стали кроссплатформенными — это значит, что можно написать один код для компьютера, холодильника, кофемашины и робота из лего, и все они поймут его, если у них есть JVM.
3.2 Иерархия версий Java
Рассмотрим иерархию версий Java подробнее:
JDK 1.0 – Самая первая версия Java. Была выпущена в 1996 году под кодовым названием Oak.
JDK 1.1 – Данная версия вышла в 1997 году и внесла множество дополнений в существующий язык. Появление библиотеки для работы с 2D графикой, полная поддержка Unicode. Также в данной версии появился JIT – компилятор, позволяющий существенно повысить производительность приложений написанных на Java.
J2SE 1.2 – с выхода данной версии (1998 г.) название продукта немного меняется. Начиная с данной версии компания Sun перекомпоновала программный продукт Java в J2SE (Java 2 Platform Standard Edition – стандартная версия). Номера версий решили продолжить.
J2SE 1.3 – дата выпуска 2000 год. Незначительное обновление уже существующего функционала. Кодовое имя Kestrel.
J2SE 1.4 – дата выхода 2002 год. Кодовой имя Merlin. В новой версии появились такие возможности как цепочки исключений и канальный ввод-вывод.
J2SE 5.0 – дата выхода – 2004 г. Данная версия продукта считается революционной. В отличии от предшествующих ей версий, в J2SE 5.0 были существенно расширены функциональные возможности языка и улучшена его производительность в целом. В связи с этим, для отражения большей масштабности внесенных изменений, разработчики компании Sun решили не выпускать версию 1.5, а сразу перейти к версии 5. В итоге новая версия получила имя J2SE 5, а комплект инструментальных средств разработки – JDK 5 (Java Development Kit). Основными изменениями данной версии считаю появление таких средств как: Обобщение, автоупаковка и автораспаковка, модернизированный вариант цикла for (for-each), Статический импорт.
Java SE 6 – дата выхода 2006 г. С выходом данной версии компания Sun, снова решила изменить название. Из названия исчезла цифра 2. Из основных нововведений версии считается усовершенствование библиотеки прикладного пользовательского интерфейса (API).
Java SE 7 – дата выхода 2011 год. Данная версия является первой версией java, вышедшая после приобретения компании Sun Microsystems компанией Oracle.
Java SE 8 – дата выхода 2014 год. Из основных нововведений стоит отметить: поддержка лямбда-выражений, потоки для работы с коллекциями.
Java SE 9 – дата выхода 2017 год.
Итак все, что было рассмотрено выше относится к версиям java. Теперь рассмотрим вопрос какие бывают классификации платформ java в зависимости от области применения.
Java SE – Java Standard Edition, данная платформа – это основной издание java, применяется для написания пользовательских приложений. Включает в себя компиляторы и API.
Java EE – Java Enterprise Edition, это так называемая, корпоративная версия, используемая для серверного программирования. Например создание Web серверов.
Java ME — Java Micro Edition, платформа для использования в мобильных телефонах.
Заключение
В процессе выполнения курсовой работы били изучены:
Предпосылки появления объектно-ориентированных языков Создание языка С++ Стандартизация языка С++ История языка Java Иерархия версий Java
C++ продолжает развиваться, чтобы отвечать современным требованиям. Одна из групп, разрабатывающих язык C++ и направляющих комитету по стандартизации C++ предложения по его улучшению — это Boost, которая занимается, в том числе, совершенствованием возможностей языка путём добавления в него особенностей метапрограммирования.
Сейчас Java — это главный язык Android-приложений и для работы с большими объемами данных (big data). Конечно, на Java история программирования не заканчивается. Но большинство новых языков проектируется под узкий класс задач, поэтому их сложно сравнивать между собой. Например, язык Swift был разработан компанией Apple специально для создания приложений под iOS и Mac, а язык Julia — для сохранения высокой производительности при работе с большим объемом вычислений.
Список литературы
Альфред, В. Ахо Компиляторы. Принципы, технологии и инструментарий / Альфред В. Ахо и др. — М.: Вильямс, 2015. — 689 c. Берд, Барри Java для чайников / Барри Берд. — М.: Диалектика / Вильямс, 2013. — 521 c. Гарнаев, Андрей WEB-программирование на Java и JavaScript / Андрей Гарнаев, Сергей Гарнаев. — Москва: СПб. [и др.] : Питер, 2017. — 718 c. Гонсалвес, Энтони Изучаем Java EE 7 / Энтони Гонсалвес. — М.: Питер, 2016. — 640 c. Гупта, Арун Java EE 7. Основы / Арун Гупта. — М.: Вильямс, 2014. — 336 c. Довбуш, Галина Visual C++ на примерах / Галина Довбуш, Анатолий Хомоненко. — М.: БХВ-Петербург, 2012. — 528 c. Зиборов, В. MS Visual C++ 2010 в среде. NET / В. Зиборов. — М.: Питер, 2012. — 320 c. Кетков, Юлий Практика программирования: Visual Basic, C++ Builder, Delphi. Самоучитель (+ дискета) / Юлий Кетков, Александр Кетков. — М.: БХВ-Петербург, 2012. — 464 c. Мешков, А. Visual C++ и MFC / А. Мешков, Ю. Тихомиров. — М.: БХВ-Петербург, 2013. — 546 c. Неформальное введение в C++ и Turbo Vision. — Москва: ИЛ, 2010. — 384 c. . Пахомов, Борис C/C++ и MS Visual C++ 2012 для начинающих / Борис Пахомов. — Москва: СИНТЕГ, 2015. — 518 c. Полубенцева, М. C/C++. Процедурное программирование / М. Полубенцева. — М.: БХВ-Петербург, 2014. — 448 c.
При копировании любых материалов с сайта evkova. org обязательна активная ссылка на сайт www. evkova. org
Сайт создан коллективом преподавателей на некоммерческой основе для дополнительного образования молодежи
Сайт пишется, поддерживается и управляется коллективом преподавателей
Telegram и логотип telegram являются товарными знаками корпорации Telegram FZ-LLC.
Cайт носит информационный характер и ни при каких условиях не является публичной офертой, которая определяется положениями статьи 437 Гражданского кодекса РФ. Анна Евкова не оказывает никаких услуг.
Рис. 4Брайан Керниган (Brian Kernighan), Деннис Ритчи (Dennis Ritchie) и Кен Томпсон (Ken Thompson) как бы говорят, что без бороды ты не программист.
Глава 1. Предпосылки появления объектно-ориентированных языков
В 1945 году в Америке построили первый компьютер — ЭНИАК (Electronic Numerical Integrator And Computer). Он состоял из 17 тысяч ламп, весил 27 тонн и стоил 480 000 долларов. Сравните: новый iPhone X за 1000 долларов помещается в кармане и почти в 25 тысяч раз мощнее.
В те времена ещё не было языков программирования, и ЭНИАК управлялся через систему команд, записанных в машинном коде — то есть в виде последовательности единиц и нолей. Писать программы на машинном коде было долго и сложно. Представьте, что в супермаркете на полке с ценниками нет названий товаров — только номер штрихкода и цена. Чтобы узнать цену, например, на икру, нужно посмотреть номер на банке и сопоставить с ценниками. Из-за ошибки в одну цифру можно взять чёрную икру по цене белого хлеба (а на кассе обнаружить, что сумма в чеке в сто раз больше). Так и одна ошибка в цифре машинного кода приводила к неправильному результату вычисления всей программы.
Рис.1 Первый в мире компьютер ЭНИАК
Ошибки в работе компьютера программисты называют «багами». В переводе с английского bug означает «насекомое» или «жучок». Это слово употребляли и раньше — например, радиоинженеры называли так технические неполадки в оборудовании, которые было трудно обнаружить. Но первый в истории компьютерный баг, по легенде, действительно был насекомым! В 1947 в Гарварде программист Грейс Хоппер искала причину ошибки в работе суперкомпьютера Mark II и обнаружила моль, которая залетела внутрь компьютера и заклинила систему. С помощью скотча она вклеила моль в рабочий журнал и озаглавила запись как «Первый фактический случай обнаружения бага».
Рис.1 Первый в мире компьютер ЭНИАК
3 Первые машинно-независимые языки.
30.09.2020 23:39:17
2018-03-21 09:10:45
Источники:
История возникновения и развития языка программирования Си (С ) и Java Курсовая №90599 » /> » /> .keyword { color: red; }
История развития языка сИстория возникновения и развития языка программирования Си (С ) и Java
История возникновения и развития языка программирования Си (С++) и Java
Высокоуровневые языки программирования характеризуются наличием смысловых конструкций для описания операций. Их изучение занимает немало времени, а применение на практике требует внимательности и понимания основных структур и правил синтаксиса и лексики. Но при этом владение языками высокого уровня позволяет создавать большие, красочные, многофункциональные проекты в рекордные сроки.
К высокому уровню относятся Pascal, Java, C, C++, C#, Delphi и многие другие. Используются они для написания программного обеспечения и прикладных программ.
Наиболее востребованные языки программирования Какие же самые востребованные языки программирования на сегодняшний день? В последние годы наиболее популярными и востребованными считаются Java, C, C++, Python, C#, которые входят в топы языков программирования. Именно они составляют основу современных программ и используются при написании любого крупного проекта. Более 70% программистов работают с этими языками. Прогнозируется, что в ближайшие 10 лет они будут все так же востребованы, как и сегодня.
Цель исследования: История возникновения и развития языка программирования Си (С++) и Java.
Объект исследования: языки программирования Си (С++) и Java.
- Изучить историю возникновения и развития языка Си Изучить историю возникновения и развития языка Си++ Изучить историю стандартов Си++ Изучить начало разработки языка Java Изучить связь языков Java и C++ Изучить обзор версий Java
Глава 1. История развития языка Си и Си++
1.1 Язык Си
Язык С буквально потряс компьютерный мир. Его влияние нельзя недооценивать, поскольку он полностью изменил подход к программированию. Создание языка С было прямым следствием потребности в структурированном, эффективном и высокоуровневом языке, который мог бы заменить код ассемблера в процессе создания системных программ.
А началось всё с появлением языка B, созданного в 1969 году коллективом исследователей из Технологического института Массачусетса (MIT). Кен Томпсон является главным автором B. В то время команда разрабатывала операционную систему UNIX. Язык PL/I, уже существовавший и применявшийся тогда для мэйнфреймов, изготовленных компанией IBM, меньше подходил для решения поставленной задачи, кроме того был достаточно громоздким. Исходя из этого, ученые решили поработать над созданием нового языка, получившего название B. Это типичный представитель ранних императивных языков программирования.
Как это ни странно, последователем B стал изобретенный в 1972 году язык программирования C. В его основу положен сам B [2].
Язык C создали Денис Ритчи и Кен Томпсон, работники исследовательской лаборатории компании под названием AT&T (AT&T Bell Telephone Laboratories). Над созданием расширенной версии B Ритчи начал свою работу в 1971 году. Сначала разработчик назвал её NB (New B), но после того как язык получил большие отличия от B, название заменили на C. B получил расширение за счет явного применения структур, типов и ряда новых операций.
Питер Мойлан писал в своей книге «The case against C» по поводу создания языка Си о том, что люди нуждались в языке, способном обойти некоторые строгие правила, встроенные в большую часть языков высокого уровня и поддерживающих их надежность. Требовался язык, позволяющий делать то, что реализовать до него можно было лишь на уровне машинного кода или на ассемблере.
До появления языка С программистам, как правило, приходилось выбирать между языками, которые позволяли оптимизировать тот или иной набор характеристик. Например, хотя FORTRAN можно было использовать при написании достаточно эффективных программ для научных приложений, он не очень подходил для создания системного кода. Аналогично, в то время как язык BASIC был очень прост в изучении, он предоставлял не очень много функциональных возможностей, а его недостаточная структурированность ставила под сомнение его полезность при создании крупных программ. Язык ассемблера можно использовать для создания очень эффективных программ, но его трудно изучать и эффективно использовать. Более того, отладка ассемблерного кода может оказаться весьма сложной задачей [1].
Еще одной сыгравшей свою роль проблемой было то, что ранние языки программирования, такие как BASIC, COBOL и FORTRAN, были спроектированы без учета принципов структурирования. Вместо этого в них основными средствами управления программой были операторы безусловного перехода GOTO. В результате программы, созданные с применением этих языков, тяготели к созданию так называемого “макаронного кода” — множества запутанных переходов и условных ветвей, которые делали программу буквально недоступной для понимания. Хотя такие языки как Pascal и структурированы, они не были предназначены для создания максимально эффективных программ и были лишены рада важных функций, необходимых для применения этих языков к написанию широкого круга программ. (В частности, учитывая существование нескольких стандартных диалектов Pascal, было нецелесообразно применять этот язык для создания кода системного уровня.)
Таким образом, непосредственно накануне изобретения языка С, несмотря на затраченные усилия, ни одному языку не удалось решить существующие конфликты. Вместе с тем потребность в таком языке становилась все более насущной. В начале 70-х гг. началась компьютерная революция, и потребность в программном обеспечении быстро превысила возможности программистов по его созданию. В академических кругах большие усилия были приложены к созданию более совершенного языка программирования. Однако, и это наиболее важно, все больше стало ощущаться влияние еще одного фактора. Компьютеры, наконец, получили достаточно широкое распространение, чтобы была достигнута “критическая масса”. Компьютеры больше не находились за запертыми дверями. Впервые программисты получили буквально неограниченный доступ к своим компьютерам. Это дало свободу экспериментам. Программисты смогли также приступить к созданию своих собственных программных средств. Накануне создания языка С произошел качественный скачок в области компьютерных языков [4].
Изобретенный и впервые реализованный Деннисом Ритчи на компьютере DEC PDP-11, работающем под управлением операционной системы UNIX, язык С явился результатом процесса разработки, начавшегося с предшествующего языка
Язык С был формально стандартизован в декабре 1989 г., когда Национальный институт стандартизации США (American National Standards Institute — ANSI) принял стандарт С.
Многие считают создание языка С началом современного этапа развития компьютерных языков. Он успешно объединил конфликтующие компоненты, которые доставляли столько неприятностей в предшествующих языках. Результатом явился мощный, эффективный, структурированный язык, изучение которого было сравнительно простым. Кроме того, ему была присуща еще одна, почти непостижимая особенность: он был языком программиста. До появления С языки программирования проектировались, в основном, либо в качестве академических упражнений, либо бюрократическими организациями. Язык С — иное дело. Он был спроектирован, реализован и разработан действительно работающими программистами и отражал их подход к программированию. Его функции были отлажены, проверены и многократно переработаны людьми, которые действительно использовали этот язык. В результате появился язык, который нравилось использовать программистам. Действительно С быстро приобрел много приверженцев, которые почти молились на него. Поэтому язык С получил быстрое и широкое признание в программистском сообществе. Короче говоря, С — это язык, разработанный программистами и для программистов. Как вы вскоре убедитесь, язык Java унаследовал эту особенность.
1.2 Язык Си++
В конце 70-х-начале 80-х гг. язык С стал превалирующим компьютерным языком программирования, и он продолжает широко применяться и в настоящее время. Поскольку С — удачный и удобный язык, может возникнуть вопрос, чем обусловлена потребность в чем-либо еще. Ответ: растущей сложностью. На протяжении всей истории развития программирования всевозрастающая сложность программ порождала потребность в более совершенных способах преодоления этой сложности. Язык C++ явился ответом на эту потребность. Чтобы лучше понять, почему потребность преодоления сложности программ является главной побудительной причиной создания языка C++, рассмотрим следующие факторы [3].
С момента изобретения компьютеров подходы к программированию коренным образом изменились. Например, когда компьютеры только появились, программирование осуществлялось изменением двоичных машинных инструкций вручную с панели управления компьютера. До тех пор, пока длина программ не превышала нескольких сотен инструкций, этот подход был вполне приемлем. С увеличением программ был изобретен язык ассемблера, который позволил программисту работать с большими, все более сложными программами, используя при этом символьные представления машинных инструкций. По мере того, как программы продолжали увеличиваться в объеме, появились языки высокого уровня, которые предоставили программисту дополнительные средства преодоления сложности программ.
Использование структурированных языков впервые предоставило программистам возможность достаточно легко создавать программы средней сложности. Однако даже при использовании методов структурного программирования по достижении проектом определенного размера его сложность начинала превышать ту, с которой программист мог справиться. К началу 80-х гг. сложность многих проектов начала превышать ту, с которой можно было справиться с использованием структурного подхода. Для решения этой проблемы был изобретен новый способ программирования, получивший название объектно-ориентированного программирования (ООП).
Объектно-ориентированное программирование подробно рассматривается в последующих главах этой книги, но мы все же приведем краткое определение: ООП — это методология программирования, которая помогает организовывать сложные программы за счет использования наследования, инкапсуляции и полиморфизма [6].
Хотя С — один из основных мировых языков программирования, существует предел его способности справляться со сложностью программ. Как только размеры программы превышают определенное значение, она становится слишком сложной, чтобы ее можно было охватить как единое целое. Хотя точное значение этого предела зависит как от структуры самой программы, так и от подходов, используемых программистом, начиная с определенного момента любая программа становится слишком сложной для понимания и внесения изменений. Язык C++ предоставил возможности, которые позволили программисту преодолевать этот барьер, чтобы контролировать большие по размеру программы и управлять ими.
Язык C++ был изобретен Бьярне Страуструпом в 1979 г. во время его работы в компании Bell Laboratories в городе Мюррей-Хилл, шт. Нью-Джерси. Вначале Страуструп назвал новый язык “С with Classes” (“С с классами”). Однако в 1983 г. это название было изменено на C++. Язык C++ расширяет функциональные возможности языка С, добавляя в него объектно-ориентированные свойства. Поскольку язык C++ построен на основе С, он поддерживает все его возможности, атрибуты и преимущества. Это обстоятельство явилось главной причиной успешного распространения C++ в качестве языка программирования. Изобретение языка C++ не было попыткой создания совершенно нового языка программирования. Напротив, все усилия были направлены на усовершенствование уже существующего очень удачного языка.
Бьярне Страуструп (Bell Labs) в 1984 году выступил с демонстрацией проекта языка С++. В период занятий исследованиями в фирме, Страуструп написал несколько имитационных программ, которые требовались для моделирования распределенных вычислений. Для решения подобных задач идеальным инструментом мог бы стать объектно-ориентированный язык программирования SIMULA-67, если бы он не характеризовался сравнительно низкой скоростью выполнения программ [5].
Если вы вынуждены делать выбор между написанием «быстрого» и «хорошего» кода, — это означает, что что-то идёт не так. Поскольку, согласно позиции Страуструпа, «хороший» код обязательно является «быстрым».
Так был создан С++, — язык программирования, которому первоначально дали название С with classes («Си с классами»). А придумал название «С++» Рик Мэсчитти. «++» является оператором инкремента в С, словно намекающий на то обстоятельство, что язык С++, что-то большее, чем просто С.
К концу 80-х-началу 90-х гг. объектно-ориентированное программирование с применением языка C++ стало основным методом программирования. Действительно, в течение некоторого непродолжительного времени казалось, что программисты, наконец, изобрели идеальный язык. Поскольку язык C++ сочетал в себе высокую эффективность и стилистические элементы языка С с объектно — ориентированным подходом, этот язык можно было использовать для создания самого широкого круга программ. Однако, как и в прошлом, уже вызревали факторы, которые должны были, в который раз, стимулировать развитие компьютерных языков [3]. Пройдет еще несколько лет, и World Wide Web и Интернет достигнут критической массы. Это приведет к еще одной революции в программировании.
Глава 1. История развития языка Си и Си++
Язык С буквально потряс компьютерный мир. Его влияние нельзя недооценивать, поскольку он полностью изменил подход к программированию. Создание языка С было прямым следствием потребности в структурированном, эффективном и высокоуровневом языке, который мог бы заменить код ассемблера в процессе создания системных программ.
А началось всё с появлением языка B, созданного в 1969 году коллективом исследователей из Технологического института Массачусетса (MIT). Кен Томпсон является главным автором B. В то время команда разрабатывала операционную систему UNIX. Язык PL/I, уже существовавший и применявшийся тогда для мэйнфреймов, изготовленных компанией IBM, меньше подходил для решения поставленной задачи, кроме того был достаточно громоздким. Исходя из этого, ученые решили поработать над созданием нового языка, получившего название B. Это типичный представитель ранних императивных языков программирования.
Как это ни странно, последователем B стал изобретенный в 1972 году язык программирования C. В его основу положен сам B [2].
Язык C создали Денис Ритчи и Кен Томпсон, работники исследовательской лаборатории компании под названием AT&T (AT&T Bell Telephone Laboratories). Над созданием расширенной версии B Ритчи начал свою работу в 1971 году. Сначала разработчик назвал её NB (New B), но после того как язык получил большие отличия от B, название заменили на C. B получил расширение за счет явного применения структур, типов и ряда новых операций.
Питер Мойлан писал в своей книге «The case against C» по поводу создания языка Си о том, что люди нуждались в языке, способном обойти некоторые строгие правила, встроенные в большую часть языков высокого уровня и поддерживающих их надежность. Требовался язык, позволяющий делать то, что реализовать до него можно было лишь на уровне машинного кода или на ассемблере.
До появления языка С программистам, как правило, приходилось выбирать между языками, которые позволяли оптимизировать тот или иной набор характеристик. Например, хотя FORTRAN можно было использовать при написании достаточно эффективных программ для научных приложений, он не очень подходил для создания системного кода. Аналогично, в то время как язык BASIC был очень прост в изучении, он предоставлял не очень много функциональных возможностей, а его недостаточная структурированность ставила под сомнение его полезность при создании крупных программ. Язык ассемблера можно использовать для создания очень эффективных программ, но его трудно изучать и эффективно использовать. Более того, отладка ассемблерного кода может оказаться весьма сложной задачей [1].
Еще одной сыгравшей свою роль проблемой было то, что ранние языки программирования, такие как BASIC, COBOL и FORTRAN, были спроектированы без учета принципов структурирования. Вместо этого в них основными средствами управления программой были операторы безусловного перехода GOTO. В результате программы, созданные с применением этих языков, тяготели к созданию так называемого “макаронного кода” — множества запутанных переходов и условных ветвей, которые делали программу буквально недоступной для понимания. Хотя такие языки как Pascal и структурированы, они не были предназначены для создания максимально эффективных программ и были лишены рада важных функций, необходимых для применения этих языков к написанию широкого круга программ. (В частности, учитывая существование нескольких стандартных диалектов Pascal, было нецелесообразно применять этот язык для создания кода системного уровня.)
Таким образом, непосредственно накануне изобретения языка С, несмотря на затраченные усилия, ни одному языку не удалось решить существующие конфликты. Вместе с тем потребность в таком языке становилась все более насущной. В начале 70-х гг. началась компьютерная революция, и потребность в программном обеспечении быстро превысила возможности программистов по его созданию. В академических кругах большие усилия были приложены к созданию более совершенного языка программирования. Однако, и это наиболее важно, все больше стало ощущаться влияние еще одного фактора. Компьютеры, наконец, получили достаточно широкое распространение, чтобы была достигнута “критическая масса”. Компьютеры больше не находились за запертыми дверями. Впервые программисты получили буквально неограниченный доступ к своим компьютерам. Это дало свободу экспериментам. Программисты смогли также приступить к созданию своих собственных программных средств. Накануне создания языка С произошел качественный скачок в области компьютерных языков [4].
Изобретенный и впервые реализованный Деннисом Ритчи на компьютере DEC PDP-11, работающем под управлением операционной системы UNIX, язык С явился результатом процесса разработки, начавшегося с предшествующего языка
Язык С был формально стандартизован в декабре 1989 г., когда Национальный институт стандартизации США (American National Standards Institute — ANSI) принял стандарт С.
Многие считают создание языка С началом современного этапа развития компьютерных языков. Он успешно объединил конфликтующие компоненты, которые доставляли столько неприятностей в предшествующих языках. Результатом явился мощный, эффективный, структурированный язык, изучение которого было сравнительно простым. Кроме того, ему была присуща еще одна, почти непостижимая особенность: он был языком программиста. До появления С языки программирования проектировались, в основном, либо в качестве академических упражнений, либо бюрократическими организациями. Язык С — иное дело. Он был спроектирован, реализован и разработан действительно работающими программистами и отражал их подход к программированию. Его функции были отлажены, проверены и многократно переработаны людьми, которые действительно использовали этот язык. В результате появился язык, который нравилось использовать программистам. Действительно С быстро приобрел много приверженцев, которые почти молились на него. Поэтому язык С получил быстрое и широкое признание в программистском сообществе. Короче говоря, С — это язык, разработанный программистами и для программистов. Как вы вскоре убедитесь, язык Java унаследовал эту особенность.
По мере того, как программы продолжали увеличиваться в объеме, появились языки высокого уровня, которые предоставили программисту дополнительные средства преодоления сложности программ.
04.06.2018 20:31:11
2018-06-04 20:31:11