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

История возникновения и развития языка программирования Си (С++) и Java (наблюдение за эволюцией языка программирования Си (С++) и Java)

Содержание:

Введение

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

Язык программирования C был разработан в начале 1970-х годов в качестве системного языка для создававшейся тогда операционной системы Unix. Созданный на слабом аппаратном обеспечении в качестве инструмента для улучшения программного окружения, он остаётся одним из доминирующих даже в 2016 году. Эта работа — наблюдение за его эволюцией и эволюцией его последователей.

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

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

Предшественники языка Си

Ранним предшественником языка Си можно назвать язык ALGOL (ALGOrithmic Language), который был разработан в 1958-1960 годах (Алгол 58, Алгол 60) как универсальный язык программирования для широкого круга применений и усовершенствован в 1964-1968 годах (Алгол 68). Язык Алгол был последователем языка Фортран и был призван исправить недостатки Фортрана.

60-е годы были эпохой становления операционных систем и языков программирования высокого уровня. В 1963 году в результате совместной разработки кембриджского и лондонского университетов был создан язык CPL. Название языка расшифровывается как Combined Programming Language. Язык CPL был во многом вдохновлён языком Algol 60. Но в отличие от элегантного и простого Algol 60, который был предназначен преимущественно для научных вычислений, язык CPL предназначался для широкого применения и поэтому был значительно сложнее, чем Algol 60. В настоящее время язык CPL не используется, а наследником CPL стал язык BCPL.

Язык BCPL был разработан Мартином Ричардсом в 1966 году, в Кембриджском университете. Ричардс создал BCPL на основе CPL «удалив из полного языка те функции, которые усложняли компиляцию». Изначально BCPL предназначался для написания компиляторов для других языков. В качестве шутки программисты расшифровывали название языка BCPL как Before C Programming Language («Язык программирования, появившийся до Си).

В 1969 был опубликован, основанный на «BCPL» язык программирования «B». Язык был разработан в стенах AT&T Bell Telephone Laboratories Кеном Томпсоном (Kenneth Lane "Ken" Thompson) и Деннисом Ритчи (Dennis Ritchie). Этот язык стал непосредственным предшественником появления языка C.

Язык программирования Си был разработан Деннисом Ритчи и Кеном Томпсоном в лабораториях компании Bell Labs в период с 1969 по 1973 годы в то время, когда они работали над операционной системой UNDC. Помимо языка Си, в разные годы в стенах этой лаборатории были разработаны такие технологии как радиоастрономия, транзистор, лазер, кварцевые часы, теория информации, операционная система Unix.

Согласно словам одного из авторов языка, самый активный период в создании пришёлся на 1972 год. Язык был назван «Си» («C» – третья буква латинского алфавита) потому что многие особенности были заимствованы у более раннего языка программирования «Би» («B» – вторая буква латинского алфавита).

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

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

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

image

Изображение с сайта с сайта slideshare.net

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

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

Итак, С возник как универсальный язык системного программирования. Но он не остался в этих рамках. К концу 80-х годов язык С, оттеснив Fortran с позиции лидера, завоевал массовую популярность среди программистов во всем мире и стал использоваться в самых различных прикладных задачах. Немалую роль здесь сыграло распространение Unix (а значит и С) в университетской среде, где проходило подготовку новое поколение программистов. Питер Мойлан в своей книге «The case against C» пишет следующее: «Нужен был язык, способный обойти некоторые жесткие правила, встроенные в большинство языков высокого уровня и обеспечивающие их надежность. Нужен был такой язык, который позволил бы делать то, что до него можно было реализовать только на ассемблере или на уровне машинного кода.»

Развитие и стандартизация языка Си

В то время как язык Си набирал всё большую популярность, компиляторы для него выпускались различными фирмами, и случалось что программа, которая собиралась на компиляторе одной фирмы, не уже не собиралась на компиляторе другой. Эти сложности были связаны с отсутствием чётко оговоренного стандарта языка Си. Все разработчики ориентировались на книгу Кернигана и Ритчи «Язык программирования Си», но интерпретировали её по-своему.

Высокая популярность языка C на различных типах компьютеров привела ко многим вариациям языка. Они были похожи, но несовместимы друг с другом. Это стало серьезной проблемой для разработчиков программ, нуждавшихся в написании совместимых программ, которые можно было бы выполнять на нескольких разных платформах. Тогда стало ясно, что необходима стандартная версия языка C. В 1983г. ANSI (Американский Национальный Комитет Стандартов) сформировал технический комитет X3J11 для создания стандарта языка C (чтобы "обеспечить недвусмысленное и машинно-независимое определение языка"). В 1989 этот стандарт был утвержден. ANSI скооперировался с ISO (Международной Организацией Стандартов), чтобы стандартизовать C в международном масштабе; совместный стандарт был опубликован в 1990 году и назван ANSI/ISO 9899:1990. Этот стандарт совершенствуется до сих пор и поддерживается большинством фирм разработчиков компиляторов.

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

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

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

Перспективы языка Си

На языке Си написана значительная часть операционной системы Unix. В настоящее время (2016 год) Unix является самой распространённой операционной системой в мире, если считать по общему числу других операционных систем, разработанных на базе Unix. Например, операционные системы Android и iOS, используемые в современных смартфонах тоже разработаны на базе Unix. В последних версиях Unix содержится уже более 10 миллионов строк кода.

https://upload.wikimedia.org/wikipedia/commons/thumb/7/77/Unix_history-simple.svg/1280px-Unix_history-simple.svg.png

Изображение с сайта Wikipedia.org

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

Книга «Язык программирования Си»

Первое издание книги «Язык программирования Си» увидело свет в 1978 году. Книга известна также под названием «K&R» — по первым буквам фамилий авторов, Брайана Кернигана и Денниса Ритчи. Эта книга до сих пор не утратила своей актуальности и в интернет-магазинах возможно купить букинистическое издание. Благодаря именно этой книге появилась традиция писать первым делом на любом языке программирования программу, выводящую на экран сообщение «Hello world». Долгое время книга «Язык программирования Си» была единственным справочным руководством по разработке на Си.

Спустя 10 лет после первого издания, в 1988 году вышло второе издание книги. Во втором издании была представлена версия Си, принятая в качестве стандарта ANSI (American national standarts institute — Американский национальный институт стандартов). Были добавлены новые разделы, описание стандартной библиотеки Си и краткий перечень отличий ANSI C от прежней версии. Второе издание книги было переведено более чем на 25 языков.

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

Пример программы на языке Си

Ниже приведён листинг программы, которая печатает на стандартное устройство вывода сообщение «Hello world». Эта программа была приведена ещё в первом издании книги «Язык программирования Си» Кернигана и Ричи.

#include <stdio.h>

int main()

{

printf("Hello, world!");

return 0;

}

Возникновение языка C++

Язык C++ (Си плюс плюс) возник в начале 1980-х годов. Он был создан всё в той же лаборатории Bell Labs уроженцем Дании, Бьёрном Страуструпом. Бьёрн придумал ряд усовершенствований к языку C для решения задач, с которыми ему приходилось сталкиваться, работая в Bell Labs над моделированием очередей телефонных звонков. Страуструп добавил к языку C возможность работы с классами и объектами, наследование классов, строгую проверку типов, inline-функции и аргументы по умолчанию. Ранние версии языка назывались «С with classes» («Си с классами») и стали доступны с 1980 года.

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

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

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

Язык программирования C++ был разработан Бьёрном Страуструпом, чтобы автору и его друзьям не приходилось программировать на Ассемблере, C или других современных языках высокого уровня. Основным предназначением нового языка было сделать написание хороших программ более простым и приятным для отдельного программиста. Плана разработки C++ на бумаге никогда не было; проект, документация и реализация двигались одновременно. Внешний интерфейс C++ был написан на C++. Главное нововведение C++ — механизм классов, дающий возможность определять и использовать новые типы данных. Программист описывает внутреннее представление объекта класса и набор функций-методов для доступа к этому представлению. Одной из заветных целей при создании C++ было стремление увеличить процент повторного использования уже написанного кода. Концепция классов предлагала для этого механизм наследования. Наследование позволяет создавать новые (производные) классы с расширенным представлением и модифицированными методами, не затрагивая при этом скомпилированный код исходных (базовых) классов. Вместе с тем наследование обеспечивает один из механизмов реализации полиморфизма — базовой концепции объектно-ориентированного программирования, согласно которой, для выполнения однотипной обработки разных типов данных может использоваться один и тот же код. Полиморфизм — тоже один из методов обеспечения повторного использования кода.

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

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

Многие разработчики вынуждены были сами исследовать семантические лабиринты и самостоятельно отыскивать успешно работающие идиомы. Так, например, на первом этапе развития языка многие создатели библиотек классов стремились построить единую иерархию классов с общим базовым классом Object. Эта идея была заимствована из Smalltalk — одного из наиболее известных объектно-ориентированных языков. Однако она оказалась совершенно нежизнеспособной в C++ — тщательно продуманные иерархии библиотек классов оказывались негибкими, а работа классов — неочевидной. Для того чтобы библиотеками классов можно было пользоваться, их приходилось поставлять в исходных текстах.

К 1983 году в язык были добавлены виртуальные функции, перегрузка функций и операторов, ссылки, константы, пользовательский контроль над управлением свободной памятью, улучшенная проверка типов и новый стиль комментариев. Получившийся язык перестал быть дополненной версией классического C и язык получил название «С++». В октябре 1985 года состоялся первый коммерческий выпуск языка.

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

Будущее языка Си

В 90-х годах внимание сообщества программистов было приковано в основном к развитию языка C++. Тем временем разработка языка С также продолжалась, которая привела в 1999 году к появлению нового стандарта С, который теперь принято называть С99. Стандарт С99 сохранил все основные черты стандарта С89, и можно сказать, что язык С не претерпел существенных изменений.

В дальнейшем, на основе языка Си возникли такие популярные языки как C++ (Си плюс плюс), C# (Си Шарп), Java (Джава). Также некоторые менее известные языки, например, J# (Джей Шарп).

В 2007 году начались работы над новым стандартом Си – C11 (неофициальное название C1X). Официально о выпуске стандарта было объявлено 19 декабря 2011 года. В основном эта версия стандартизирует возможности, существующие в распространённых разных современных компиляторах.

Согласно опубликованным данным на август 2016 года, индекс TIOBE, который измеряет рост популярности языков программирования, показал, что C занимает 2 место по популярности:

Таблица с сайта http://www.tiobe.com/tiobe-index/

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

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

Java — строго типизированный объектно-ориентированный язык программирования, разработанный компанией Sun Microsystems (в последующем приобретённой компанией Oracle). Приложения Java обычно транслируются в специальный байт-код, поэтому они могут работать на любой компьютерной архитектуре, с помощью виртуальной Java-машины. Дата официального выпуска языка — 23 мая 1996 года.

Программы на Java транслируются в байт-код, выполняемый виртуальной машиной Java (JVM) — программой, обрабатывающей байтовый код и передающей инструкции оборудованию как интерпретатор.

Достоинством подобного способа выполнения программ является полная независимость байт-кода от операционной системы и оборудования, что позволяет выполнять Java-приложения на любом устройстве, для которого существует соответствующая виртуальная машина. Другой важной особенностью технологии Java является гибкая система безопасности, в рамках которой исполнение программы полностью контролируется виртуальной машиной. Любые операции, которые превышают установленные полномочия программы (например, попытка несанкционированного доступа к данным или соединения с другим компьютером), вызывают немедленное прерывание.

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

5 декабря 1990 г. — Нотон отказывается от предложения перейти в компанию NeXT и начинает работу в компании Sun над проектом, получившим впоследствии название Green.

15 января 1991 г. — Совещание типа мозгового штурма по проекту Stealth (названном так Скоттом Макнили) в Аспене, в котором участвовали Билл Джой, Энди Бехтолсхейм, Уэйн Розинг, Майк Шеридан, Джейм Гослинг и Патрик Нотон.

1 февраля 1991 г. — Гослинг, Шеридан и Нотон всерьез берутся за работу. Нотон занимается графической системой Aspen, Гослинг — идеями языка программирования, Шеридан — бизнес-разработкой.

8 апреля 1991 г. — Переезд по новому адресу и разрыв прямого соединения с локальной сетью (и большинством других средств связи) компании Sun; проект продолжается под названием Green.

15 апреля 1991 г. — К проекту Green присоединяются Эд Фрэнк (архитектор системы SPARCstation 10), Крейг Форрест (дизайнер чипа SS10) и Крис Уорт (разработчик системы NeWS).

Май 1991 г. — Эд Фрэнк присваивает прототипу аппаратуры название *7 (или Star7; *7 — код, который было необходимо набрать в офисе Sand Hill, чтобы ответить на любой звонок с любого телефона).

Июнь 1991 г. — Гослинг начинает работу над интерпретатором Oak, который через несколько лет (при поисках торговой марки) переименован в Java.

1 августа 1991 г. — Осуществлено объединение Oak и Aspen; заработала их первая реальная программа.

19 августа 1991 г. — Коллектив разработчиков Green демонстрирует идеи базового пользовательского интерфейса и графическую систему сооснователям компании Sun Скотту Макнили и Биллу Джою.

17 октября 1991 г. — Шеридан и Нотон присваивают конструкторской философии своего коллектива девиз "1st Person", который со временем становится названием компании.

17 ноября 1991 г. — Офис проекта Green снова подключается к главной сети компании Sun линией на 56 Кбит/с

1 марта 1992 г. — К проекту Green присоединяется Джонатан Пейн, который позднее участвует в написании HotJava.

Лето 1992 г. — Интенсивная деятельность по доработке Oak, Green OS, пользовательского интерфейса, аппаратуры Star7 и соответствующих компонентов.

4 сентября 1992 г. — Завершена разработка устройства Star7; оно продемонстрировано Джою и Макнили.

1 октября 1992 г. — Из компании SunLabs переходит Уэйн Розинг, принимающий на себя руководство коллективом.

1 ноября 1992 г. — Организована корпорация FirstPerson.

15 января 1993 г. — Коллектив переезжает в Пало Альто в здание, где раньше находилась лаборатория Western Research Lab компании DEC и была основана исходная группа Hamilton Group (она же OSF).

15 марта 1993 г. — После ознакомления с результатами испытаний кабельного интерактивного телевидения, проведенных компанией Time Warner, корпорация FirstPerson сосредотачивается на этой тематике.

Апрель 1993 г. — Выпуск первого графического браузера для Internet — Mosaic 1.0, разработанного в центре NCSA.

14 июня 1993 г. — Компания Time Warner продолжает проводить свои испытания интерактивного кабельного ТВ с компанией SGI, несмотря на признанное превосходство технологии компании Sun и уверения, что Sun выиграла эту сделку.

Лето 1993 г. — Нотон пролетает 300 тыс. миль, продавая Oak всем, занимающимся бытовой электроникой и интерактивным телевидением; тем временем темп, с которой люди получают доступ к Internet, головокружительно нарастает.

Август 1993 г. — Через несколько месяцев многообещающих переговоров с компанией 3DO относительно разработки ОС для приставок, президент 3DO Трип Хокинс предлагает купить технологию. Макнили отказывается, и сделка срывается.

Сентябрь 1993 г. — К коллективу присоединяется Артур Ван Хофф, поначалу — чтобы создать среду разработки приложений, предназначенных для интерактивного телевидения, а потом разрабатывающий, главным образом, сам язык.

7 декабря 1993 г. — Экспертиза операций на высоком уровне в FirstPerson обнаруживает, что эта группа не имеет реальных партнеров или маркетинговой стратегии и неясно представляет себе дату выпуска.

8 февраля 1994 г. — Отменено публичное заявление компании FirstPerson о выпуске, которое должно было состояться на конференции Technology, Entertainment and Design (TED).

17 февраля 1994 г. — Исполнительным лицам компании Sun для разносторонней экспертизы представлен альтернативный бизнес-план корпорации FirstPerson по разработке мультимедийной платформы для CD-ROM и онлайновой работы.

25 апреля 1994 г. — Создана компания Sun Interactive; в нее переходит половина сотрудников FirstPerson.

Июнь 1994 г. — Начат проект Liveoak, нацеленный Биллом Джоем на использование Oak в крупном проекте небольшой операционной системы.

Июль 1994 г. — Нотон ограничивает область применения проекта Liveoak, просто переориентировав Oak на Internet.

16 сентября 1994 г. — Пейн и Нотон начинают писать WebRunner — браузер типа Mosaic, позднее переименованный в HotJava.

29 сентября 1994 г. — Прототип HotJava впервые продемонстрирован исполнительным лицам компании Sun.

11 октября 1994 г. — Нотон уходит в компанию Starwave.

Осень 1994 г. — Ван Хофф реализует компилятор Java на языке Java. (Ранее Гослинг реализовывал его на языке С).

23 мая 1995 г. — Компания Sun официально представляет Java и HotJava на выставке SunWorld '95.

История версий Java

JDK Alpha and Beta

Первые публичные альфа и бета релизы Java были выпущены в 1995 году и имели крайне нестабильные API и ABI. Прилагавшийся к среде веб-браузер назывался WebRunner.

JDK 1.0 (23 января 1996)

Кодовое имя Lucatjuh.

Первая официальная версия вышла 23 января 1996 года и имела кодовое имя «Oak» (Дуб). Первая стабильная версия JDK 1.0.2, получила название «Java» (Джава).

JDK 1.1 (19 февраля 1997)

Наиболее значимые дополнения:

  • обширное изменение событий библиотеки AWT;
  • в язык добавлены внутренние классы;
  • JavaBeans (классы в языке Java, написанные по определённым правилам. Они используются для объединения нескольких объектов в один для удобной передачи данных);
  • JDBC (соединение с базами данных) — платформенно-независимый промышленный стандарт взаимодействия Java-приложений с различными СУБД;
  • RMI (программный интерфейс вызова удаленных методов);
  • ограниченная рефлексия (модификация во время выполнения невозможна, есть только наблюдение собственной структуры);
  • JIT (Just In Time) — компилятор для платформ Microsoft Windows, выпущенный для JavaSoft фирмой Symantec;
  • Интернационализация и поддержка Юникода, берущие начало от операционной системы Taligent.

J2SE 1.2 (8 декабря 1998)

Кодовое имя Playground.

Следующей базовой версией Java стала версия Java 2, символизировавшая собой второе поколение. Первой версии Java 2 был присвоен номер 1.2. С появлением версии 2, SUN Microsystems стала выпускать Java в виде пакета J2SE (Java 2 Platform Standard Edition — Стандартная версия платформы Java 2) и теперь номера версий указываются применительно к этому продукту.

Java 2, или Java 2.0 — дальнейшее развитие и усовершенствование спецификации исходного стандарта языка и платформы Java, на который теперь принято ссылаться как на Java 1.0. В настоящее время спецификация платформы Java 2 продолжает интенсивно развиваться и обогащаться, пополняясь новыми возможностями, особенно из-за конкуренции с платформой .Net, перенявшей у Java ряд ключевых особенностей.

Основными усовершенствованиями Java 2 по сравнению с Java 1.0 являются:

  • Swing включен в спецификацию платформы Java 2;
  • Коллекции;
  • Policy файлы;
  • Цифровые сертификаты пользователя;
  • Библиотека Accessibility;
  • Java 2D;
  • Поддержка технологии drag-and-drop;
  • Полная поддержка Unicode, включая поддержку ввода на японском, китайском и корейском языках;
  • Поддержка воспроизведения аудиофайлов нескольких популярных форматов;
  • Полная поддержка технологии CORBA;
  • Включение в JDK для Java 2 JIT-компилятора, улучшенная производительность;
  • Усовершенствования инструментальных средств JDK, включая поддержку профилирования Java-программ.

J2SE 1.3 (8 мая 2000)

Кодовое имя Kestrel.

Изменения:

  • Добавлен HotSpot JVM (the HotSpot JVM был впервые выпущен в апреле 1999 для J2SE 1.2 JVM);
  • RMI был модифицирован для обеспечения совместимости с CORBA;
  • Java Naming и Directory Interface (JNDI) включены в основные библиотеки (в прошлом были доступны в виде расширений);
  • Java Platform Debugger Architecture (JPDA);
  • JavaSound API (интерфейс программирования приложений);
  • Прокси классы.

J2SE 1.4 (6 февраля 2002)

Кодовое имя Merlin.

  • Языковые изменения:
    • Ключевое слово assert (указанное в Java Specification Request 41);
  • Изменения в библиотеках:
    • Модель регулярных выражений основана на регулярных выражений языка Perl;
    • Цепочки исключений позволяют исключению инкапсулировать оригинальные исключения нижнего уровня;
    • Добавлена поддержка протокола Internet Protocol версии 6 (IPv6);
    • Не блокирующийся ввод-вывод (назван New Input/Output, NIO) (указано в JSR 51);
    • Запись журналов API (указано в JSR 47);
    • Программный интерфейся (API) для чтения и записи файлов изображений в форматах JPEG и PNG;
    • Встроенный парсер XML и процессор XSLT (JAXP) (указано в JSR 5 и JSR 63);
    • Встроенные расширения безопасности и криптографии (JCE, JSSE, JAAS);
    • Включен пакет Java Web Start (Java Web Start был впервые выпущен в марте 2001 для J2SE 1.3) (указано в JSR 56)
    • Настройки API (java.util.prefs);
    • Публичная поддержка и обновления безопасности для Java 1.4 закончились в октябре 2008. Платные обновления безопасности для пользователей Oracle закончились в феврале 2013.

J2SE 5.0 (30 сентября 2004)

Кодовое имя Tiger. Спецификация Java 5 была выпущена в сентябре 2004 года. Начиная с этой версии появилась новая система нумерации версий. Старая нумерация сохранилась для использования в библиотеках разработчиков. Оба номера версий «1.5.0» и «5.0» используются для обозначения этого выпуска Java 2 Platform Standard Edition. Число «5.0» лучше отражает уровень завершенности, стабильности, масштабируемости и безопасности J2SE. Данное соответствие было продолжено в последующих выпусках (Java 6 = JDK 1.6, Java 7 = JDK 1.7, и так далее).

В данной версии разработчики внесли в язык целый ряд принципиальных дополнений:

  • Перечислимые типы (enum). Ранее отсутствовавшие в Java типы оформлены по аналогии с C++, но при этом имеют ряд дополнительных возможностей:
    • Перечислимый тип является полноценным классом Java, то есть может иметь конструктор, поля, методы, в том числе скрытые и абстрактные;
    • Перечисление может реализовывать интерфейсы;
    • Для перечислений имеются встроенные методы, дающие возможность получения значений типа по имени, символьных значений, соответствующих именам, преобразования между номером и значением, проверки типа на то, что он является перечислимым;
  • Аннотации — возможность добавления в текст программы метаданных, не влияющих на выполнение кода, но допускающих использование для получения различных сведений о коде и его исполнении. Одновременно выпущен инструментарий для использования аннотированного кода. Одно из применений аннотаций — упрощение создания тестовых модулей для Java-кода;
  • Средства обобщённого программирования (generics) — механизм, аналогичный Eiffel (позже также появились и в C#, принципиально отличаются от шаблонов C++), дающий возможность создавать классы и методы с полями и параметрами произвольного объектного типа. С использованием данного механизма реализованы новые версии коллекций стандартной библиотеки Java;
  • Методы с неопределённым числом параметров;
  • Autoboxing/Unboxing — автоматическое преобразование между скалярными типами Java и соответствующими типами-обёртками (например, между int и Integer). Наличие такой возможности упрощает код, поскольку исключает необходимость в выполнении явных преобразований типов в очевидных случаях;
  • Разрешён импорт статических методов и переменных;
  • В язык введён цикл по коллекции объектов (итератор, foreach).

Java SE 6 (11 декабря 2006)

Кодовое имя Mustang. Начиная с версии, выпущенной 11 декабря 2006, компания Sun изменила название продукта «J2SE» на «Java SE» убрала «.0» из номера версии. Внутренняя нумерация для разработчиков осталась такой же — 1.6.0. Эта версия была выпущена в рамках документа JSR 270.

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

Основные изменения вошедшие в эту версию:

  • Прекращена поддержка старых версий Win9x; Неофициально Java 6 Update 7 стала последней версией, допускавшей запуск на этих версиях Windows. Считается, что так произошло из-за сильных изменений вошедших в обновление 10 (Java 6 Update 10);
  • Поддержка скриптовых языков (JSR 223): Универсальный API для тесной интеграции с скриптовыми языками и встроенная интеграция Mozilla JavaScript Rhino;
  • Существенное улучшение производительности работы ядра и графической оболочки Swing;
  • Улучшенная поддержка веб-сервиса с использованием JAX-WS (спецификация JSR 224);
  • Поддержка JDBC 4.0 (спецификация JSR 221);
  • Компилятор Java API (спецификация JSR 199): программный интерфейс, позволяющий Java-программам программно выбирать и вызывать компилятор Java;
  • Обновление JAXB до версии 2.0: Включена интеграция парсера StAX;
  • Поддержка подключаемых аннотаций (спецификация JSR 269);
  • Множественные улучшения графического интерфейса. Такие как интеграция SwingWorker в API, сортировка и фильтрация таблиц, двойная буферизация Swing (устраняющая эффект «серых» областей);
  • JVM улучшеия включая: синхронизацию и оптимизации производительности компилятора, новые алгоритмы и обновления к существующим алгоритмам сборщика мусора, производительности запуска приложения.

Поддержка Java 6 прекратилась в феврале 2013. К этому времени все публичные обновления, включая обновления безопасности, были прекращены. Компания Oracle выпустила ещё два обновления для Java 6 в марте и апреле 2013 года, которые устраняли некоторые уязвимости безопасности.

После выпуска Java 6, Sun, а позднее Oracle, выпустили несколько обновлений которые хоть не имели изменений в публичном API, улучшали удобство использования конечным пользователем или исправляли дефекты. Начиная с января 2016 года Java 6 и более ранние версии больше недоступны для загрузки с серверов Oracle.

Java SE 7 (7 июля 2011)

Java 7 (кодовое имя Дельфин) стало крупным обновлением, которое вышло 7 июля 2011 года и стало доступным для разработчиков с 28 июля 2011. Процесс разработки был разбит на 13 этапов; последний этап был завершён 6 июня 2011. В среднем, в течение одного этапа выходило выпускалось 8 билдов, которые преимущественно состояли из улучшений и исправлений дефектов.

Новые возможности в Java 7:

  • Поддержка виртуальной машиной динамических языков в рамках Мультиязыковой виртуальной машины
  • Сжатые 64-битные указатели Доступны в Java 6 с параметром -XX:+UseCompressedOops
  • Изменения в рамках Project Coin. Возможности, включенные в Project Coin:
    • Строки в switch
    • Автоматическое управление ресурсами
    • Выведение типов при создании экземпляра обобщённого (generic) класса
    • Упрощен вызов метода с переменным числом аргументов
    • Поддержка подчеркиваний в качестве разделителей цифр для чисел (Возможность разбивать визуально числа на разряды, увеличивает удобочитаемость)
    • Поддержка коллекций на уровне языка
  • Средства для параллельного исполнения в рамках JSR 166
  • Новая библиотека Ввода-вывода для улучшения платформонезависимости и поддержки метаданных и символьных ссылок. Пакеты: java.nio.file и java.nio.file.attribute
  • Поддержка алгоритмов эллиптической криптографии на уровне библиотеки.
  • XRender для Java 2D, улучшающий управление возможностями современных GPU
  • Новое графическое API, которое планировали выпустить в Java версии 6u10
  • Расширение поддержки сетевых протоколов (включая SCTP и Sockets Direct Protocol) на уровне библиотеки
  • Обновления в XML и Юникоде.

От Лямбда-функции, проекта Jigsaw и некоторых других возможностей проекта Coin в Java 7 было решено отказаться. Они будут отложены до Java 8.

Java SE 7 Update 1 (18 октября 2011)

Изменения:

  • данный релиз содержит исправления уязвимостей безопасности
  • исправлено 6 ошибок

Java SE 7 Update 2 (12 декабря 2011)

Изменения:

  • Новый JVM (Java HotSpot Virtual Machine, версия 22), который повышает надёжность и производительность
  • Поддержка Oracle Solaris 11
  • Поддержка Firefox 5 и старше
  • JavaFX входит в состав Java SE

Java SE 7 Update 3 (14 февраля 2012)

Изменения:

  • данный релиз содержит исправления 14 уязвимостей безопасности

Java SE 8 (18 марта 2014)

Java 8 was была выпущена 18 марта 2014 года и включала некоторые функции, которые были запланированы для Java 7, но позже были отложены.

Работа над функциями была организована в соответствии с предложениями по улучшению JDK Enhancement Proposals (JEPs).

Java 8 не поддерживается на Windows XP, но по состоянию на JDK 8 Update 25, по прежнему существует возможность установки и запуска в операционной среде Windows XP. Прошлые обновления JDK 8 могут быть запущены в Windows XP, но они могут быть установлены после непосредственной распаковки файлов из запускаемого инсталляционного пакета.

Начиная с октября 2014, Java 8 стала версией по умолчанию, предлагаемой для загрузки с сайта.

Новые возможности в Java 8

  • Лямбда-выражения и аннотация @FunctionalInterface
  • Возможность наличия у метода интерфейса реализации по умолчанию
  • Аннотации типов
  • JavaScript-движок Nashorn
  • Base64 декодер (java.util.Base64)
  • Date & Time API (java.time)
  • Bulk-операции для коллекций (интерфейс Stream);
  • Параллельная сортировка массивов и коллекций (parallelStream)

Java SE 9 (Ожидается 23 марта 2017)

Будет содержать:

  • Модуляризация — проект Jigsaw
  • REPL (jshell)
  • HTTP 2.0 клиент
  • Обновление Process API
  • Money API
  • JMH

Java SE 10

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

  • Спецификация JSR 354: API для работы с деньгами и валютой

Другие реализации Java

OpenJDK является бесплатно реализацией Java Platform, Standard Edition (Java SE) с открытым программным кодом.

До OpenJDK, существовало несколько бесплатных реализаций Java,изготовленных разными компаниями и организациями, такими как Apache Harmony. Фирма IBM также предоставляет свою реализацию Java, а RedHat предоставляет через проект IcedTea: сборочный и интерграционный пакет для OpenJDK.

Список использованных источников

  • https://ru.wikipedia.org/
  • https://geektimes.ru/post/114588/
  • https://www.bell-labs.com/
  • http://www.codenet.ru/progr/cpp/ccpphistory.php
  • The C++ Programming Language by Bjarne Stroustrup — Addison–Wesley Pub Co; 3rd edition (February 15, 2000); ISBN 0-201-70073-5
  • The Design and Evolution of C++ by Bjarne Stroustrup — Addison–Wesley Pub Co; 1st edition (March 29, 1994); ISBN 0-201-54330-3
  • http://www.interestprograms.ru/articles/historyprogramming/historycpp
  • Х.М.Дейтел, П.Дж.Дейтел "Как программировать на C++"
  • Бьерн Страуструп "Язык программирования C++. 3-е издание."
  • Симон Робинсон, Олли Корнес, Джей Глинн и др. "C# для профессионалов"
  • Джесс Либерти "Освой самостоятельно С++ за 21 день"
  • Е Зуев, А Кротов "Новые возможности языка Си++", PC Magazine/Russian Edition, #7, 1994.
  • http://www.tiobe.com/tiobe-index/