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

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

Содержание:


ВВЕДЕНИЕ

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

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

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

За подобными особенностями C и Java стоит долгая и насыщенная история возникновения и развития этих языков, которая до сих пор приводит к постепенному их совершенствованию.

Таким образом определяется цель исследования – рассмотрение истории возникновения и развития языка программирования C и Java.

Для достижения поставленной цели необходимо выполнить следующие задачи:

  1. охарактеризовать понятие языка программирования;
  2. привести классификацию языков программирования;
  3. рассмотреть историю языка C;
  4. рассмотреть историю языка Java;
  5. подвести итоги по выполненной работе.

В качестве основной теоретической базы выступают работы современных исследователей проблемы, таких как Петерсен Р., Попов И. И. и Максимов Н. В. Структура работы включает две главы, в каждой из которых содержится по два пункта.

1. Язык программирования

1.1 Понятие языка программирования

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

Алфавит в контексте языков программирования представляет собой определенный набор символов, который разрешен к использованию в данном конкретном языке. При помощи данного алфавита образуются слова и величины, характерные именно для конкретного языка.

Синтаксис языка программирования является системой правил, которые определяют допустимые в данном языке конструкции из символов алфавита и их соединений.

Также для языка программирования особенной характеристикой является семантика. Это такая система правил, в которой однозначно толкуются все языковые конструкции, которые позволяют, в конце концов, осуществлять процесс обработки информации [4].

Взаимодействие синтаксических и семантических правил определяет основные понятия языка, такие как операторы, идентификаторы, константы, переменные, функции, процедуры и т.д. В отличие от естественных, язык программирования имеет ограниченный запас слов (операторов) и строгие правила их написания, а правила грамматики и семантики, как и для любого формального языка, явно однозначно и четко сформулированы.

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

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

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

Разрабатывать программы на языках высокого уровня с помощью понятных и мощных команд значительно проще, число ошибок, допускаемых в процессе программирования, намного меньше. В настоящее время насчитывается несколько сотен таких языков (без учета их диалектов) [15].

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

1.2 Классификация языков программирования

Существуют различные классификации языков программирования.

По наиболее распространенной классификации все языки программирования, в соответствии с тем, в каких терминах необходимо описать задачу, делят на языки низкого и высокого уровня.

Если язык близок к естественному языку программирования, то он называется языком высокого уровня, если ближе к машинным командам, – языком низкого уровня.

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

Машинно–ориентированные языки – это языки, наборы операторов и изобразительные средства которых существенно зависят от особенностей ЭВМ (внутреннего языка, структуры памяти и т.д.).

К языкам программирования высокого уровня относят Фортран (переводчик формул – был разработан в середине 50–х годов программистами фирмы IBM и в основном используется для программ, выполняющих естественно – научные и математические расчеты), Алгол, Кобол (коммерческий язык – используется, в первую очередь, для программирования экономических задач), Паскаль, Бейсик (был разработан профессорами Дармутского колледжа Джоном Кемени и Томасом Курцом.), Си (Деннис Ритч – 1972 году), Пролог (в основе языка лежит аппарат математической логики) и т.д. [4]

Эти языки мa­шиннo­–нe­зa­виc­имы, т.к. они ориентированы не на систему команд тo­й или инo­й ЭВМ, а на систему операндов, характерных для зa­пиc­и o­прe­дe­лe­ннo­гo­ клa­c­c­a­ алгоритмов. Однако программы, написанные на языках высокого урo­вня, зa­нимa­ют бo­льшe­ памяти и медленнее выполняются, чем программы на мa­шинных языкa­х. Прo­грa­мму, нa­пиc­a­нную на языке программирования высокого уровня, ЭВМ не пo­нимa­e­т, пo­c­кo­льку e­й доступен только машинный язык. Поэтому для перевода прo­грa­ммы c­ языкa­ программирования на язык машинных кодов используют специальные прo­грa­ммы – трa­нc­лятo­ры [4].

Сущe­c­твуe­т три вида транслятора: интерпретаторы (это транслятор, который прo­извo­дит пo­o­пe­рa­тo­рную o­брa­бo­тку и выполнение исходного кода программы), компиляторы (преобразует вc­ю прo­грa­мму в модуль на машинном языке, после чего программа зa­пиc­ывa­e­тc­я в пa­мять компьютера и лишь потом исполняется) и ассемблеры (пe­рe­вo­дят прo­грa­мму, зa­пиc­a­нную на языке ассемблера, в программу на машинном языкe­).

Языки прo­грa­ммирo­вa­ния тa­кжe­ можно разделять на поколения:

  • языки первого поколения: машинно–ориентированные c­ ручным упрa­влe­ниe­м памяти на компьютерах первого поколения.
  • языки второго поколения: c­ мнe­мo­ничe­c­ким прe­дc­тa­влe­ниe­м команд, так называемые автокоды.
  • языки третьего поколения: общего нa­знa­чe­ния, иc­пo­льзуe­мыe­ для создания прикладных программ любого типа. Например, Бейсик, Кo­бo­л, Си и Паскаль.
  • языки четвертого поколения: усовершенствованные, разработанные для создания c­пe­циa­льных приклa­дных прo­грa­мм, для управления базами данных.
  • языки программирования пятого поколения: языки дe­клa­рa­тивныe­, o­бъe­ктнo­–o­риe­нтирo­вa­нныe­ и визуальные. Например, Пролог, ЛИСП (используется для пo­c­трo­e­ния прo­грa­мм c­ использованием методов искусственного интеллекта), Си++, Visual Basic, Delphi. Языки прo­грa­ммирo­вa­ния тa­кжe­ можно классифицировать на процедурные и непроцедурные [21].

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

Среди процедурных языков выделяют в свою очередь структурные и операционные языки. В структурных языках одним оператором записываются целые алгоритмические структуры: ветвления, циклы и т.д. В операционных языках для этого используются несколько операций. Широко распространены следующие структурные языки: Паскаль, Си, Ада, ПЛ/1. Среди операционных известны Фортран, Бейсик, Фокал.

Непроцедурное (декларативное) программирование появилось в начале 70–х годов 20 века, К непроцедурному программированию относятся функциональные и логические языки.

В функциональных языках программа описывает вычисление некоторой функции. Обычно эта функция задается как композиция других, более простых, те в свою очередь делятся на еще более простые задачи и т.д. Один из основных элементов функциональных языков – рекурсия. Оператора присваивания и циклов в классических функциональных языках нет [19].

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

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

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

2. История языков программирования

2.1 История языка Си (C++)

Популярность языка программирования Си трудно переоценить, особенно вспоминая его былые заслуги. Наверное, каждый разработчик, как минимум, знает о его существовании, и, как максимум, пробовал на нем программировать. Си является предшественником таких языков, как C++, Objective–C, C#, Java.

Компания Microsoft для разработки родного языка к своей платформе .Net выбрала именно Си–подобный синтаксис. Более того, на Си написано множество операционных систем.

Си не идеален: создатели языка – Кен Томпсон и Деннис Ритчи – долгое время дорабатывали его. Стандартизация Си продолжается до сих пор. Он существует более 45 лет и активно используется. С ним часто ассоциируют не один, а два языка программирования – C/C++ [10].

Язык Си восходит корнями к языку ALGOL (расшифровывается как ALGorithmic Language), который был создан в 1958 году совместно с комитетом Европейских и Американских учёных в сфере компьютерных наук на встрече в Швейцарской высшей технической школе Цюриха. Язык был ответом на некоторые недостатки языка FORTRAN и попыткой их исправить. Кроме того, разработка Си тесно связана с созданием операционной системы UNIX, над которой также работали Кен Томпсон и Деннис Ритчи.

Вдохновлённые языком ALGOL–60, Математическая лаборатория Кембриджского Университета совместно с Компьютерным отделом Лондонского университета создали в 1963 году язык CPL (Combined Programming Language).

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

BCPL использовался в начале 1970–х в нескольких интересных проектах, в числе которых – операционная система OS6 и частично в зарождающихся разработках Xerox PARC. BCPL послужил предком для языка Би (B), разработанного в 1969 в уже знакомой всем AT&T Bell Telephone Laboratories, не менее знакомыми Кеном Томпсоном и Деннисом Ритчи [7].

Как и остальные операционные системы того времени, UNIX был написан на ассемблере. Отладка программ на ассемблере настоящая мука. Томпсон решил, что для дальнейшей разработки ОС необходим язык высокого уровня и придумал небольшой язык B. За основу Томпсон взял язык BCPL. Язык B можно рассматривать как C без типов.

Во многих деталях BCPL, B и C различаются синтаксически, но в основном они похожи. Программы состоят из последовательности глобальных деклараций и объявлений функций (процедур). В BCPL процедуры могут быть вложенными, но не могут ссылаться на нестатические объекты определённые в содержащих их процедурах. B и C избегают такого ограничения, вводя более строгое: вложенных процедур нет вообще. Каждый из языков (за исключением самых древних версий B) поддерживает раздельную компиляцию и предоставляет средства для включения текста из именованных файлов.

В противоположность повсеместному изменению синтаксиса, которое происходило во время создания B, основная семантика BCPL – его структура типов и правила вычисления выражений – осталась нетронутой. Оба языка – безтиповые, вернее имеют единственный тип данных – «слово» или «ячейка», набор битов фиксированной длины. Память в этих языках – массив таких ячеек, а смысл содержимого ячейки зависит от операции, которая к ней применяется. Например, оператор «+» просто складывает свои операнды при помощи машинной инструкции add, и другие арифметические операции также безразличны к смыслу своих операндов [15].

Ни BCPL, ни B, ни C не выделяют в языке символьные данные; они считают строки векторами целых чисел и дополняют общие правила несколькими соглашениями. И в BCPL, и в B строковый литерал означает адрес статической области инициализированный символами строки упакованными в ячейки.

В 1970 Bell Labs приобрела для проекта компьютер PDP–11. Так как B был готов к работе на PDP–11, Томпсон переписал часть UNIX на B.

Но модель B и BCPL подразумевала издержки при работе с указателями: правила языка, определяя указатель как индекс в массиве слов, делали указатели индексами слов. Каждое обращение к указателю при исполнении генерировало масштабирование указателя в адрес байта, который ожидал процессор.

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

В 1971 году Ритчи начал создавать расширенную версию B. Сначала он назвал её NB (New B), но когда язык стал сильно отличаться от B, название сменили на C. Решение состояло в решительном скачке в эволюционной цепочке между безтиповым BCPL и типизированным C. Он исключал материализацию указателя в хранилище, а вместо этого порождал его создание, когда имя массива упоминалось в выражении. Правило, которое сохранилось и в сегодняшнем C, состоит в том, что значения–массивы, когда они упоминаются в выражении, конвертируются в указатели на первый из объектов, составляющих этот массив [18].

Второе нововведение, которое наиболее ясно отличает C от его предшественников, – вот эта более полная структура типов и особенно её выразительность в синтаксисе деклараций. NB предлагал основные типы int и char совместно с массивами из них и указателями на них, но никаких других способов скомпоновать их.

Требовалось обобщение: для объекта любого типа должно быть возможным описать новый объект, который объединяет несколько таких объектов в массив, получает его из функции или является указателем на него.

Для любого объекта такого составного типа, уже был способ указать на объект, который является его частью: индексировать массив, вызвать функцию, использовать с указателем оператор косвенного обращения. Аналогичное рассуждение приводило к синтаксису объявления имён, который отражает синтаксис выражения, где эти имена используются.

Так int i, *pi, **ppi объявляет целое, указатель на целое и указатель на указатель на целое. Синтаксис этих объявлений отражает тот факт, что i, *pi, и **ppi все в результате дают тип int, когда используются в выражении.

Похожим образом int f(), *f(), (*f)() объявляют функцию, возвращающую целое, функцию возвращающую указатель на целое, указатель на функцию возвращающую целое.

int *api[10], (*pai)[10] объявляют массив указателей на целое, указатель на массив целых.

Во всех этих случаях объявление переменной напоминает её использование в выражении, чей тип – это то, что находится в начале объявления.

Язык к 1973 стал достаточно стабилен для того, чтобы на нём можно было переписать UNIX. Переход на C обеспечил важное преимущество: переносимость. Написав компилятор C для каждой из машин в Bell Labs, команда разработчиков могла портировать на них UNIX.

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

C продолжил развиваться в 70–х. В 1973–1980–х годах язык немного подрос: структура типов получила беззнаковые, длинные типы, объединение и перечисление, структуры стали близкими к объектам–классам (не хватало только нотации для литералов).

Первая книга по Cи. Книга «Язык программирования Си», написанная Брайаном Керниганом и Деннисом Ритчи и опубликованная в 1978 году, стала библией программистов на Си. При отсутствии официального стандарта эта книга – известная также как K&R, или «Белая Книга», как любят называть поклонники си – фактически стала стандартом [18].

В 70–х программистов на Cи было немного и большинство из них были пользователями UNIX. Тем не менее, в 80–х Cи вышел за узкие рамки мира UNIX. Компиляторы Cи стали доступны на различных машинах, работающих под управлением разных операционных систем. В частности, Си стал распространяться на быстро развивающейся платформе IBM PC.

K&R ввёл следующие особенности языка:

  • структуры;
  • длинное целое;
  • целое без знака;
  • оператор += и подобные ему (старые операторы =+ вводили анализатор лексики компилятора Си в заблуждение, например, при сравнении выражений i =+ 10 и i = +10).

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

Вместе с ростом популярности появились проблемы. Программисты, писавшие новые компиляторы брали за основу язык, описанный в K&R. К сожалению, в K&R некоторые особенности языка были описаны расплывчато, поэтому компиляторы часто трактовали их на своё усмотрение. Кроме того, в книге не было чёткого разделения между тем, что является особенностью языка, а что особенностью операционной системы UNIX [20].

После публикации K&R C в язык было добавлено несколько возможностей, поддерживаемых компиляторами AT&T, и некоторых других производителей:

  • функции, не возвращающие значение (с типом void), и указатели, не имеющие типа (с типом void *);
  • функции, возвращающие объединения и структуры;
  • имена полей данных структур в разных пространствах имён для каждой структуры;
  • присваивания структур;
  • спецификатор констант (const);
  • стандартная библиотека, реализующая большую часть функций, введённых различными производителями;
  • перечислимый тип (enum);
  • дробное число одинарной точности (float).

Ухудшало ситуацию и то, что после публикации K&R Си продолжал развиваться: в него добавлялись новые возможности и из него вырезались старые. Вскоре появилась очевидная необходимость в исчерпывающем, точном и соответствующем современным требованиям описании языка. Без такого стандарта стали появляться диалекты языка, которые мешали переносимости – сильнейшей стороне языка.

В конце 1970–х годов, язык Си начал вытеснять BASIC, который в то время был ведущим в области программирования микрокомпьютеров. В 1980–х годах он был адаптирован под архитектуру IBM–PC, что привело к значительному скачку его популярности.

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

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

Некоторые особенности C99:

  • подставляемые функции (inline);
  • объявление локальных переменных в любом операторе программного текста (как в C++);
  • новые типы данных, такие, как long long int (для облегчения перехода от 32– к 64–битным числам), явный булевый тип данных _Bool и тип complex для представления комплексных чисел;
  • массивы переменной длины;
  • поддержка ограниченных указателей (restrict);
  • именованная инициализация структур: struct { int x, y, z; } point = { .y=10, .z=20, .x=30 };
  • поддержка однострочных комментариев, начинающихся на //, заимствованных из C++ (многие компиляторы Си поддерживали их и ранее в качестве дополнения);
  • несколько новых библиотечных функций, таких, как snprintf;
  • несколько новых заголовочных файлов, таких, как stdint.h [1].

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

В 2007 году начались работы над следующим стандартом языка Си. 8 декабря 2011 опубликован новый стандарт для языка Си (ISO/IEC 9899:2011). Некоторые возможности нового стандарта уже поддерживаются компиляторами GCC и Clang.

Основные особенности С11:

  • поддержка многопоточности;
  • улучшенная поддержка Юникода;
  • обобщенные макросы (type–generic expressions, позволяют статичную перегрузку);
  • анонимные структуры и объединения (упрощают обращение ко вложенным конструкциям);
  • управление выравниванием объектов;
  • статичные утверждения (static assertions);
  • удаление опасной функции gets (в пользу безопасной gets_s);
  • функция quick_exit;
  • спецификатор функции _Noreturn;
  • новый режим эксклюзивного открытия файла.

Несмотря на наличие стандарта 11 года, многие компиляторы до сих пор не поддерживают полностью даже версии C99 [1].

2.2 История языка Java

История Java восходит к 1991 году, когда группа инженеров из компании Sun под руководством Патрика Нотона и члена Совета директоров Джеймса Гослинга занялась разработкой небольшого языка, который можно было бы использовать для программирования бытовых устройств, например, контроллеров для переключения каналов кабельного телевидения.

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

Стремясь изобрести небольшой, компактный и машинонезависимый код, разработчики возродили модель, использованную при реализации первых версий языка Pascal заре эры персональных компьютеров. Никлаус Вирт, создатель языка Pascal, в свое время разработал машинонезависимый язык, генерирующий промежуточный код для некоей гипотетической машины. Этот язык стал коммерческим продуктом под названием UCSD Pascal. (Такие гипотетические машины часто называются виртуальными – например, виртуальная машина языка Java, или JVM.) Этот промежуточный код можно выполнять на любой машине, имеющей соответствующий интерпретатор. Инженеры, работавшие над проектом «Green», также использовали виртуальную машину, что решило их основную проблему [2].

Однако большинство сотрудников компании Sun имели опыт работы с операционной системой UNIX, поэтому в основу разрабатываемого ими языка бь л положен язык C++, а не Pascal. В частности, они сделали язык объектно–, а не процедурно–ориентированным.

Сначала Гослинг решил назвать его «Oak» («Дуб»). Потом сотрудники компании Sun узнали, что слово Oak уже используется в качестве имени ранее созданного языка программирования, и изменили название Java.

В 1992 году в рамках проекта Green была выпущена первая продукция. Это было средство для чрезвычайно интеллектуального дистанционного управления. (Оно имело мощность рабочей станции SPARK, помещаясь в коробочке размером 6x4x4 дюйма.) К сожалению, ни одна из компаний– производителей электронной техники не заинтересовалась этим изобретением.

Затем группа стала заниматься разработкой устройства для кабельного телевидения, которое могло бы осуществлять новые виды услуг, например, включать видеосистему по требованию. И снова они не получили ни одного контракта. (Забавно, что одной из компаний, отказавшихся подписать с ними контракт, руководил Джим Кларк (Jim Clark) – основатель компании Netscape, впоследствии сделавшей очень много для успеха языка Java.)

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

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

В своем интервью журналу Sun World Гослинг сказал, что в середине 1994 года разработчики языка поняли: «Нам нужно создать действительно крутой броузер. Такой броузер должен представлять собой одно из немногих приложений модной клиент–серверной технологии, в которой жизненно важным было бы именно то, что мы сделали: архитектурная независимость, выполнение в реальном времени, надежность, безопасность – вопросы, не являвшиеся чрезвычайно важными для рабочих станций. И мы создали такой броузер» [8].

На самом деле броузер был разработан Патриком Нотоном и Джонатаном Пэйном (Johnatan Payne). Позднее он превратился в современный броузер HotJava. Этот броузер был написан на языке Java, чтобы продемонстрировать всю его мощь. Однако разработчики не забывали о мощных средствах, которые теперь называются апплетами, наделив свой броузер способностью выполнять код внутри Web–страниц. «Демонстрация технологии» была представлена на выставке Sun World '95 23 мая 1995 года и вызвала всеобщее помешательство на почве язака Java, продолжающееся и поныне.

Компания Sun выпустила первую версию языка Java в начале 1996 года. Через несколько месяцев после нее появилась версия Java 1.02. Люди быстро поняли, что версия Java 1.02 не подходит для разработки серьезных приложений. Конечно, эту версию можно применять для разработки Web–страниц с пляшущими человечками, однако в версии Java 1.02 ничего нельзя даже напечатать.

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

Выпуск версии Java 1.2 стал основной новостью конференции JavaOne в 1998 году. В новой версии слабые средства для создания графического пользовательского интерфейса и графических приложений были заменены сложным и масштабным инструментарием. Это был шаг вперед, к реализации лозунга «Write Once, Run Anywhere» ™ («Один раз напиши– и везде выполняй»), выдвинутого при разработке предыдущих версий.

В декабре 1998 года через три дня (!) после выхода в свет название новой версии было изменено на громоздкое словосочетание Java 2 Standart Edition Software Development Kit Version 1.2 (Стандартное издание пакета инструментальных средств для разработки программного обеспечения на языке Java 2, версия 1.2).

Кроме стандартного издания пакета были предложены еще два варианта: «микроиздание» для портативных устройств, например, для мобильных телефонов, и. «промышленное издание» для создания сер верных приложений. В нашей книге в центре внимания находится стандартное издание.

Версии 1.3 и 1.4 стандартного издания пакета инструментальных средств намного совершеннее первоначального выпуска языка Java 2. Они обладают новыми возможностями и, разумеется, содержат намного меньше ошибок [12].

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

ЗАКЛЮЧЕНИЕ

В ходе выполнения работы была достигнута цель исследования – рассмотрена история возникновения и развития языков программирования C и Java.

Для достижения денной цели были выполнены поставленные задачи, а именно:

  1. охарактеризовано понятие языка программирования;
  2. приведена классификация языков программирования;
  3. рассмотрена история языка C;
  4. рассмотрена история языка Java.

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

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

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

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

  1. Берд, Б. Java для чайников / Б. Берд. – М.: Диалектика / Вильямс, 2013. – 521 c.
  2. Боровский, А. C++ и Pascal в Kylix 3. Разработка интернет–приложений и СУБД / А. Боровский. – М.: БХВ–Петербург, 2014. – 544 c.
  3. Вальпа, О. Borland C++ Builder. Экспресс–курс (+ CD) / О. Вальпа. – М.: БХВ–Петербург, 2012. – 224 c.
  4. Гарнаев, А. WEB–программирование на Java и JavaScript / А. Гарнаев, С. Гарнаев. – Москва: СПб. [и др.] : Питер, 2017. – 718 c.
  5. Гонсалвес, Э. Изучаем Java EE 7 / Э. Гонсалвес. – М.: Питер, 2016. – 640 c.
  6. Гупта, А. Java EE 7. Основы / А. Гупта. – М.: Вильямс, 2014. – 336 c.
  7. Дьюхарст, С. Программирование на C++ / С. Дьюхарст Стефан; , Кэти. – М.: ДиаСофт, 2015. – 272 c.
  8. Кетков, Ю. Практика программирования: Visual Basic, C++ Builder, Delphi. Самоучитель (+ дискета) / Ю. Кетков, А. Кетков. – М.: БХВ–Петербург, 2016. – 464 c.
  9. Монахов, В. Язык программирования Java и среда NetBeans (+ CD–ROM) / В. Монахов. – М.: БХВ–Петербург, 2012. – 720 c.
  10. Пахомов, Б. Самоучитель C/С++ и С++ Builder 2007 (+ DVD–ROM) / Б. Пахомов. – М.: БХВ–Петербург, 2013. – 672 c.
  11. Перри, Г. Программирование на C для начинающих / Г. Перри, Д. Миллер. – М.: Эксмо, 2015. – 368 c.
  12. Прата, С. Язык программирования C++. Лекции и упражнения / С. Прата. – М.: Вильямс, 2015. – 445 c.
  13. Савитч, У. Язык Java. Курс программирования / У. Савитч. – М.: Вильямс, 2015. – 928 c.
  14. Страуструп, Б. Язык программирования C++ / Б. Страуструп. – М.: Радио и связь, 2011. – 350 c.
  15. Страуструп, Б. Дизайн и эволюция С++ / Б. Страуструп. – М.: ДМК Пресс, 2016. – 446 c.
  16. Фридман, А. C/C++. Архив программ / А. Фридман, Л. Кландер, М. Михаэлис, и др.. – М.: ЗАО Издательство БИНОМ, 2016. – 640 c.
  17. Хабибуллин, И. Самоучитель Java / И. Хабибуллин. – М.: БХВ–Петербург, 2014. – 768 c.
  18. Халперн, П. Стандартная библиотека С++ / П. Халперн. – М.: Вильямс, 2014. – 336 c.
  19. Хьюз, К. Параллельное и распределенное программирование с использованием C++: моногр. / К. Хьюз, Т.Хьюз. – М.: Вильямс, 2016. – 672 c.
  20. Шилдт, Г. Java 8. Руководство для начинающих / Г. Шилдт. – М.: Вильямс, 2015. – 720 c.
  21. Эккель, Б. Философия Java / Б. Эккель. – М.: Питер, 2016. – 809 c.