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

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

 

    В декабре 1990 года из компании Sun Mycrosystems 25-летний хорошо зарекомендовавший себя программист Патрик Нотон (Patrick Naughton), проработав три года, объявил о своем уходе в компанию NeXT. Фирма Sun Microsystems, занимающая значительную долю рынка серверов и высокопроизводительных станций, не могла предложить ничего интересного для обычных пользователей персональных компьютеров. Скотт МакНили (Scott McNealy) исполнительный директор корпорации Sun попросил Патрика перед уходом описать, что, по его мнению, в Sun делается неверно и предложить решение.

    Патрик Нотон выполнил просьбу, раскритиковал новую программную архитектуру NeWS, над которой фирма работала в то время. Предложил привлечь профессиональных художников-дизайнеров, чтобы сделать пользовательские интерфейсы Sun более привлекательными; выбрать одно средство разработки и сконцентрировать усилия на одной оконной технологии, а не на нескольких сразу (программисты были вынуждены поддерживать сотни различных комбинаций технологий, платформ и интерфейсов, используемых в компании).

    Письмо  Нотона было разослано ведущим специалистам компании и по общему мнению, Нотон описал то, о чем все думали, но боялись высказать. Решающей оказалась поддержка Билла Джоя (Bill Joy) и Джеймса Гослинга (James Gosling). Билл Джой - один из основателей и вице-президент Sun, а также участник проекта по созданию операционной системы UNIX в университете Беркли. Эти люди имели огромный авторитет в корпорации.

    Не  останавливаясь на достигнутом, Нотон  решил предложить какой-то совершенно новый проект. Он объединился с  группой технических специалистов, чтобы обсудить базовые концепции  такого проекта. Их получилось всего три:

    • главное - потребитель, и все строится исключительно в соответствии с его интересами;
    • небольшая команда должна спроектировать небольшую же аппаратно-программную платформу;
    • эту платформу нужно воплотить в устройстве, предназначенном для персонального пользования, удобном и простом в обращении.

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

    5 декабря 1990 года, в день, когда  Нотон должен был перейти в  компанию NeXT, Sun сделала ему встречное предложение. Руководство согласилось со всеми его условиями. Поставленная задача - "создать что-нибудь необычайное". 1 февраля 1991 года Патрик Нотон, Джеймс Гослинг и Майк Шеридан (Mike Sheridan) вплотную приступили к реализации проекта, который получил название Green. С самого начала проект задачей было создать реальный продукт, устройство.

    На  ежегодном собрании Sun весной 1991 года Гослинг заметил, что компьютерные чипы получили необычайное распространение, они применяются в видеомагнитофонах, тостерах, даже в дверных ручках гостиниц! Тем не менее, до сих пор в каждом доме можно увидеть до трех пультов дистанционного управления - для телевизора, видеомагнитофона и музыкального центра. Так родилась идея разработать небольшое устройство с жидкокристаллическим сенсорным экраном, которое будет взаимодействовать с пользователем с помощью анимации, показывая, чем можно управлять и как. Чтобы создать такой прибор, Нотон начал работать над специализированной графической системой, Гослинг взялся за программное обеспечение, а Шеридан занялся бизнес-вопросами.

    В апреле 1991 года команда покидает офис Sun, отключаясь даже от внутренней сети корпорации, и въезжает в новое помещение. Закупаются разнообразные бытовые электронные устройства, такие как игровые приставки Nintendo, телевизионные приставки, пульты дистанционного управления, и разработчики играют в различные игры целыми днями, чтобы лучше понять, как сделать пользовательский интерфейс легким в понимании и использовании. Но практически все устройства построены на самых разных центральных процессорах. Это означает, что добавление новых функциональных возможностей крайне затруднено, так как необходимо учитывать ограничения и, как правило, довольно скудные возможности используемых чипов.

    Сначала Гослинг попытался модифицировать С++, чтобы создать язык для написания  программ, минимально ориентированных  на конкретные платформы. Однако очень  скоро стало понятно, что это  практически невозможно. Основное достоинство  С++ - скорость программ, но отнюдь не их надежность. А надежность работы для  обычных пользователей должна быть так же абсолютно гарантирована. Поэтому в июне 1991 года Гослинг, который  написал свой первый язык программирования в 14 лет, начинает разработку замены C++. Создавая новый каталог и раздумывая, как его назвать, он выглянул в окно, и взгляд его остановился на растущем под ним дереве. Так язык получил свое первое название - OaK (дуб). Спустя несколько лет, после проведения маркетинговых исследований, имя сменили на Java.

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

    В августе 1991 года состоялась первая демонстрация. И только 4 сентября 1992 года Star7 был завершен и продемонстрирован МакНили. Это было небольшое устройство с 5" цветным (16 бит) сенсорным экраном, без единой кнопки. Чтобы включить его, надо было просто дотронуться до экрана. Весь интерфейс был построен как мультик - никаких меню! Дьюк перемещался по комнатам нарисованного дома, а чтобы управлять им, надо было просто водить по экрану пальцем - никаких специальных средств управления. Можно было взять виртуальную телепрограмму с нарисованного дивана, выбрать передачу и "перетащить" ее на изображение видеомагнитофона, чтобы запрограммировать его на запись.

    Результат превзошел все ожидания! Стоит  напомнить, что устройства типа карманных  компьютеров (PDA), появились заметно позже, не говоря уже о цветном экране. Это было время 286i и 386i процессоров Intel и MS DOS, даже мышь еще не была обязательным атрибутом персонального компьютера. Объектно-ориентированный язык OaK обещал стать достаточно мощным инструментом для написания программ, которые могут работать в сетевом окружении. Его объекты, свободно распространяемые по сети, работали бы на любом устройстве, начиная с персонального компьютера и заканчивая обычными бытовыми видеомагнитофонами и тостерами. Более того, как язык, ориентированный на распределенную архитектуру, OaK имел механизмы безопасности, шифрования, процедур аутентификации.

    1 ноября 1992 года создается компания  FirstPerson. Арендуется роскошный офис, число сотрудников возрастает с 14 до 60 человек. Компания должна заниматься продвижением Star7 на рынке.

    Разработкой интересовались Mitsubishi Electric, France Telecom, Dolby Labs, 3DO и другие. Однако позднее оказалось, что стоимость подобного решения (процессор, память, экран) составляет не менее $50. Производители бытовой техники не привыкли платить такую сумму за доп. функциональность, облегчающую использование их продуктов.

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

    В апреле 1993 года была выпущена первая версия графического браузера Mosaic. Хотя Internet существовал на тот момент уже около 20 лет, имеющимися протоколами связи (FTP, telnet и др.) пользоваться было очень неудобно и Глобальная Сеть использовалась лишь в академической и государственной среде. Mosaic же основывался на новом языке разметки гипертекстовых документов HTML, который разрабатывался с 1991 года.

    Когда создатели FirstPerson, наконец, обратили внимание на Internet, они поняли, что функциональность тех сетевых приложений, для которых создавался OaK, очень близка к WWW. Билл Джой вспомнил, как он двадцать лет назад принимал участие в разработке UNIX и затем эта операционная система получила широчайшее распространение благодаря тому, что ее можно было загрузить по сети бесплатно. Такой принцип бесплатного распространения коммерческих продуктов создал саму WWW, так многие технологии получили возможность захватить долю рынка в кратчайшие сроки.

     Гослинг и Нотон начинать работу по адаптации OaK для Internet. Гослинг пересматривает программный код платформы, а Нотон берется за написание "убойного" приложения, которое сразу бы продемонстрировало всю мощь OaK для Internet.

    К середине 1994 года WWW достиг больших размеров, web-страницы по-прежнему были скорее похожи на обычные бумажные издания, чем на интерактивные приложения. По большей части вся работа в сети заключалась в отправке запроса на web-сервер и получении ответа, который содержал обычный статический HTML-файл, отображаемый браузером на стороне клиента. Уже тогда функциональность web-серверов расширялась с помощью CGI (Common Gateway Interface). Эта технология позволяла по запросу клиента запускать на сервере обычную программу и ее результат отсылать обратно в качестве ответа. Поскольку в то время скорость каналов связи была невысокой , клиент мог ждать несколько минут, чтобы лишь увидеть сообщение о том, что он ошибся в одной букве запроса. А ведь зачастую клиентские машины являются полноценными персональными компьютерами, которые могли бы брать значительную часть работы взаимодействия с пользователем на себя, разгружая серверы.

    Для демонстрации Oak был разработан браузер, получивший название WebRunner.  Нотону потребовался всего один выходной, чтобы написать основную часть программы. Это было в июле, а в сентябре 1994 года WebRunner уже демонстрировался руководству Sun. Небольшие программы, написанные на OaK для Internet, назвали апплетами.

    Демонстрация  происходила на конференции, где  встречались разработчики Internet-приложений и представители индустрии развлечений. Когда Гослинг начал презентацию WebRunner, слушатели не проявили большого интереса, решив, что это просто клон Mosaic. Тогда Гослинг провел мышкой над сложной трехмерной моделью химической молекулы.

    Следуя  за курсором, модель поворачивалась по всем направлениям! Сейчас данная функция, возможно, не производит такого впечатления, однако в то время это было подобно  переходу от картинки к кинематографу. Успех демонстрации, которая закончилась бурными аплодисментами, показал, что OaK и WebRunner способны устроить революцию в Internet.

    В начале 1995 года, за дело взялись маркетологи. В результате их исследований OaK был переименован в Java, а WebRunner стал называться HotJava. Легенда гласит, что Java - это сорт кофе, который любили программисты. Видимо, похожим образом родилось и название HotJava ("горячая Java"). Тема кофе навсегда останется в названиях и логотипах технология создания компонентов названа Java Beans - зерна кофе, специальный формат для архивирования файлов с Java-программами JAR - банка с кофе и т.д.

    23 мая 1995 года технологии Java и HotJava были официально объявлены Sun и тогда же представители компании сообщили, что новая версия самого популярного браузера Netscape Navigator 2.0 будет поддерживать новую технологию. По сути, это означало, что отныне Java становится такой же неотъемлемой частью WWW, как и HTML. Но на самом деле Java - это больше, чем украшение HTML. Поскольку это полноценный язык программирования, с его помощью можно создать сложный пользовательский интерфейс.

    4 декабря 1995 года компании Netscape и Sun совместно объявляют новый "язык сценариев" (scripting language) Java Script. Как следует из пресс-релиза, это открытый кроссплатформенный объектный язык сценариев для корпоративных сетей и Internet. Таким образом, Java Script, с одной стороны, расширяет и дополняет HTML, а с другой стороны - дополняет Java. С помощью Java пишутся объекты-апплеты, которыми можно управлять через язык сценариев. Таким образом, Java и Java Script это два различных языка, хотя они и имеют много общих черт.

    По  отношению к языку Java используется термин "платформа", и Java отличается от обычного языка программирования.

    Как правило, платформой называют сочетание  аппаратной архитектуры ("железо"), которая определяется типом используемого  процессора (Intel x86, Sun SPARC, PowerPC и др.), с операционной системой (MS Windows, Sun Solaris, Linux, Mac OS и др.). Различные платформы, в силу технических, исторических и других причин, поддерживают различные возможности и интерфейсы и программа может исполняться только под той платформой, под которую она была написана. Однако часто заказчикам требуется одна и та же функциональность, а платформы они используют разные. Задача портирования приложений стоит перед разработчиками давно. Редко удается перенести сложную программу без существенной переделки. А значит, и языки программирования должны быть изначально ориентированы на какую-то конкретную платформу. Синтаксис и основные концепции легко распространить на любую систему, но библиотеки, компилятор и, естественно, бинарный исполняемый код специфичны для каждой платформы. Создатели Java задумали разработать не просто еще один язык программирования, а универсальную платформу для исполнения приложений, тем более что изначально OaK создавался для различных бытовых приборов, от которых ждать совместимости не приходится.

    Каким же образом можно "сгладить" различия и многообразие операционных систем? Способ не новый, но эффективный - с  помощью виртуальной машины. Приложения на языке Java исполняются в специальной, универсальной среде, которая называется Java Virtual Machine. JVM - это программа, которая пишется специально для каждой реальной платформы, чтобы, с одной стороны, скрыть все ее особенности, а с другой - предоставить единую среду исполнения для Java -приложений. Фирма Sun и ее партнеры создали JVM практически для всех современных операционных систем. Когда речь идет о браузере или устройстве с поддержкой Java , подразумевается, что в нем имеется встроенная виртуальная машина. Существует знаменитый девиз для Java-приложений  "Write once, run everywhere" ("Написано однажды, работает везде").

    Кроме очевидных удобств, это начинание  было с большим энтузиазмом поддержано индустрией и в силу того, что  оно являлось сильнейшим оружием  в борьбе с крупнейшим производителем программного обеспечения - Microsoft. Тогда и сейчас самой распространенной платформой являлась операционная система Windows на базе процессоров Intel. Этим компаниям удалось создать замкнутый круг, гарантирующий успех,- все пользовались их платформой, так как под нее написано больше всего программ, что, в свою очередь, заставляло разработчиков создавать новые продукты именно для этой платформы. Поскольку корпорация Microsoft всегда очень агрессивно развивала свое преимущество в области персональных компьютеров (так Netscape Navigator безнадежно проиграл конкуренцию MS IE), это не могло не вызывать сильное беспокойство других представителей компьютерной индустрии. Понятно, что концепция сетевых компьютеров свела бы на нет преимущества Windows в случае широкого распространения. Разработчики просто перестали бы задумываться, что находится внутри их рабочей станции, также как домашние пользователи не имеют представления, на каких микросхемах собран их мобильный телефон или видеомагнитофон. Поэтому со стороны Microsoft принимались все возможные ходы, препятствующие продвижению новой технологии. Был суд между компаний Microsoft и SM, тянувшийся с 1998 по 2001 год, в результате которого Sun получил компенсацию в 20 миллионов долларов и добился выполнения лицензионного соглашения. В результате Microsoft остановила свою поддержку Java на версии 1.1, которая на данный момент является устаревшей и не имеет многих полезных возможностей. Это, в свою очередь, практически остановило широкое распространение апплетов.

Преимущества  языка Java

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

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

  • Исключена возможность явного выделения и освобождения памяти. Память в языке Java освобождается автоматически с помощью механизма сборки мусора. Программист гарантирован от ошибок, связанных с неправильным использованием памяти.
  • Запрещена арифметика указателей. Теперь программисты в принципе не могут стереть данные из памяти вследствие неправильного использования указателей.
  • Исключена возможность перепутать оператор присваивания с оператором сравнения на равенство. Теперь нельзя даже скомпилировать выражение if(abc=3)  эта ошибка — источник  большинства недоразумений вязыках С и С++.
  • Исключено множественное наследование. Оно заменено новым понятием —интерфейсом, позаимствованным из языка Objective C. Интерфейс дает программисту почти все, что тот может получить от множественного наследования, избегая при этом сложностей, возникающих при управлении иерархиями классов.
 

Свойства  – преимущества языка  Java:

1. Объектно-ориентированный.

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

2. Распределенный.

    Язык  Java предоставляет мощные и удобные средства для работы в сети. На Java легко решаются самые трудные задачи, например, открытие сетевых соединений. Элегантный механизм, состоящий из так называемых сервлетов (servlets), делает работу на сервере чрезвычайно эффективной. Сервлеты поддерживаются многими популярными Web серверами. Связь между распределенными объектами в языке Java обеспечивается механизмом вызова удаленных методов.

3. Надежный.

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

4. Безопасный

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

5. Не зависящий от архитектуры

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

6. Машинонезависимый

    Например, тип int в языке Java всегда означает 32.разрядное целое число. В языках С и С++ тип int может означать как 16 разрядное, так и 32 разрядное целое число, а также целое число произвольного размера, по выбору разработчика конкретного компилятора. Единственное ограничение заключается в том, что размер типа int не может быть меньше размера типа short int и больше размера типа long int. Фиксированный размер числовых типов позволяет избежать многих неприятностей, связанных с выполнением программ на разных компьютерах. Строки сохраняются в стандартном формате Unicode.

7. Интерпретируемый

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

8. Высокопроизводительный

    Если  для выполнения байт кодов применяется  интерпретатор, не следует употреблять  словосочетание “высокая производительность”. Однако на многих платформах возможен другой вид компиляции, обеспечиваемый синхронными компиляторами (just in time compilers — JIT). Они транслируют байт код в машинозависимый код, сохраняют результат в памяти, а затем вызывают его при необходимости. Поскольку при этом интерпретация выполняется только один раз, этот подход во много раз уве личивает скорость работы. Несмотря на то что синхронные компиляторы все равно медлительнее, чем машинозависимые компиляторы, они во всяком случае работают намного быстрее интерпретаторов, обеспечивая для некоторых программ 10 и даже 20 кратное ускорение. Эта технология постоянно совершенствуется и в конце концов может достичь той скорости, которую никогда не превзойдут традиционные компиляторы. Например, синхронный компилятор может определить, какой фрагмент кода выполняется чаще, и оптимизировать его по скорости выполнения.

9. Многопоточный

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

10. Динамичный

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

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