Неофициально об официальной истории Java
Сергей Бобровский
Распространенная история Java (http://java.sun.com/nav/whatis/storyofjava.html) связывается с личностью Патрика Нотона. Этот человек устроился на работу в Sun в 1988 г. и занимался стыковкой ОС X11 и сетевой оконной системы NeWS, которую ее автор, известный компьютерный специалист Джеймс Гослинг, специально переделывал для Sun. Нотону приходилось поддерживать сотни несовместимых программных интерфейсов данных систем, и, устав от непродуктивной деятельности, он задумал перейти в компанию NeXT. Скотт Мак-Нили, исполнительный директор Sun, упросил Патрика перед уходом подробно описать недостатки организации труда в компании. Билл Джой, ведущий научный руководитель и один из основателей Sun, вместе с Гослингом внимательно изучил большое критическое письмо и пообещал исправить все, что возможно. Вскоре после интенсивного обсуждения с Нотоном стратегических направлений развития Sun было решено начать экспериментальный проект Green (создание ручного компьютера Star 7). В проект первоначально вошли Гослинг, Нотон и сотрудник Sun Майк Шеридан. В рамках Green создавались оригинальная ОС GreenOS (версия Unix для компьютеров с ОЗУ 1 Мб) и новый объектно-ориентированный язык Oak, прообраз современной Java.
Но даже авторы технологии Oak долго не понимали ее реального потенциала. Так, в 1995 г. Гослинг назвал багом оказавшееся весьма эффективным представление в Java-пакетах иерархического пространства имен. После полосы неудач, связанных с отсутствием покупателей на созданную технологию, в 1995 г. Билл Джой, очарованный бурным ростом Сети, решил выпустить в свободном варианте элементы технологии Java, в которую к тому времени был переименован Oak. Он угадал: за полгода Java была лицензирована всеми ведущими корпорациями, а сегодня по праву считается одной из наиболее распространенных и перспективных информационных технологий.
Однако в официальной истории ни слова не говорится о концепциях, заложенных в Java в первые годы деятельности Green, хотя ее авторы, конечно, были прекрасно знакомы с множеством существовавших языков и систем программирования. Может показаться, что участники группы Green создавали Java с нуля, равно как и идея самой Green возникла на пустом месте. Но это не так.
С 1989 г. фирма Bridge Systems, основанная Томом Стенбаухом (бывшим сотрудником IBM, проектировщиком PDP 11 и специалистом по Smalltalk), готовила по контракту с исследовательской лабораторией Sun систему, от которой заказчик требовал сочетания индустриальной мощи Smalltalk и выразительного синтаксиса С++. Ей было дано предварительное название Smalltalk Minus Minus, и Стенбаух вкладывал в нее опыт разработки виртуальных машин (ВМ) Smalltalk для RISC-процессоров. Его ежемесячные отчеты постоянно читали Билл Джой и Джеймс Гослинг.
В 1991 г. прототип системы был куплен Sun вместе с правами на любое использование заложенных в нее решений и идей. И впоследствии никаких официальных контактов Bridge Systems с группой Green не возникало. Поставленный прототип, во многом послуживший основой создаваемой Oak, уже тогда обладал большинством отличий современной версии Java от C++. Правда, в ходе работ инженеры Sun решили, что семантика С++ препятствует реализации ряда передовых требований, и решили взять за основу идеи Objective C (прежде всего средства описания интерфейсов классов).
ВМ Oak использовала компилятор, который готовил промежуточный код для каждого объектного метода и затем переводил его в код целевой платформы (фактически это был прообраз компиляции на лету). Автором этой идеи был Питер Дейч (создавший также интерпретаторы GhostScript/GNU PostScript), разрабатывавший ВМ Smalltalk в лаборатории Xerox PARK. В период с 1982-го по 1984-й он подготовил версию Portable Smalltalk – первую ВМ с компиляцией на лету (эту технологию он называл динамической трансляцией). ВМ была написана на ассемблере Motorola 68000 для рабочих станции Sun 1 и выполнялась без ОС на "голом" оборудовании. Вскоре последовала версия для Sun 2/SunOS – она вошла в пакет Object Works 2.3. В 1986 г. Дейч приступил к реализации на Си новой портативной ВМ High Performance Smalltalk (известной также как ParkPlace Smalltalk-80), включенной затем в ObjectWorks 2.5.
Производительность ВМ Smalltalk оказалась для сложного объектного языка столь высокой, что ею всерьез заинтересовалась IBM, уделявшая особое внимание Smalltalk-программированию. Свою первую ВМ IBM Smalltalk она подготовила на базе ВМ, разработанной фирмой OTI в начале 80-х годов, и затем использовала ее в своих наработках (а возможно, использует и сегодня). Так, машина IBM Java по внутренней организации была очень похожа на IBM Smalltalk. Надо отметить, что собственный опыт инженеров IBM в создании ВМ также очень богат. Достаточно вспомнить рассчитанные на выполнение в виртуальном окружении язык IBM BAL 360/370 или абстрактный ассемблер для машин AS/400. Правда, эти виртуальные среды были непереносимы на другое оборудование.
Идеи ВМ Smalltalk оказали существенное воздействие на развитие архитектуры процессоров Sun SPARC, которая представляла собой коммерческую реализацию технологии SOAR (SmalltalkOnARisc), подготовленной исследовательским сообществом Smalltalk-разработчиков. Инженеры Sun рассчитывали на значительный эффект от аппаратной оптимизации ВМ Smaltalk, но в SPARK-процессорах удалость достичь "только" двух-четырехкратного выигрыша в быстродействии в сравнении с программными эмуляторами. Такой результат, как отмечала Адель Голдберг ("мать" Smalltalk, много сделавшая для его популяризации, автор одной из популярнейших книг), был сочтен недостаточным для того, чтобы привлекать ресурсы к созданию специализированных ВМ для этого языка, способных использовать аппаратное преимущество. Проще и выгоднее было применять кросс-платформную технологию компиляции на лету, нежели ориентироваться на жесткую привязку к оборудованию. Поэтому группа Green с повышенным интересом относилась ко всем виртуальным технологиям, и здесь наработки Bridge Systems оказались весьма кстати.
С 1987 г. Sun вела еще один проект – создание виртуальной системы программирования Self (сегодня сложно сказать, пересекался ли он с Bridge Systems), и его достижения также активно использовались в проекте Green. Система Self (http://www.sun.com/research/self/) развивалась под девизом "Self – это нечто похожее на Smalltalk, только немного больше". ВМ, положенная в ее основу, была создана фирмой Anamorphic, выпускавшей быстрые коммерческие оболочки Smalltalk. Реализованные в них идеи впоследствии вошли в технологию ускорения Java-программ HotSpotJava.
В языке Self нет выделенного понятия классов. Разработчик имеет дело только с прототипами и может не описывать класс, если для работы нужен единственный объект. Не делает Self и различия между полями класса и методами. Программисту доступен универсальный слот (данная идея воплощена в JavaScript), способный содержать данные или код. Объекты в ходе выполнения программы могут непрерывно изменять свою структуру, поэтому в Self нет также понятия состояния объектов. Создание приложения ведется, основываясь только на средствах взаимодействия объектов, что устраняет традиционный для массовых языков программирования разрыв между методами и данными. Self предоставляет разработчику универсальную графическую среду манипулирования объектами (Morphic User Interface), рассчитанную на быстрое прототипирование и рефакторинг. Эта система развивается до сих пор. Последняя версия 4.1.6 вышла в сентябре 2002 г.
Self реализует идеи, выдвинутые Аланом Кеем, автором Smalltalk, который всегда стремился уйти от формального заучивания и механического использования операторов программирования и призывал к чисто объектному мышлению при создании ПО. Он полагал, что программист должен прежде всего стремиться к организации эффективного обмена сообщениями между объектами, а не заботиться о формализации их внутренних интерфейсов. К сожалению, эта идея оказалась слишком сложной для большинства разработчиков и осталась невостребованной. Но, возможно, наметившееся в последнее время удешевление и массовое распространение систем проектирования, моделирования и рефакторинга вдохнет жизнь в идеи Кея, избавит создателей программ от рутинных аспектов объектных концепций и позволит в полной мере использовать их потенциально неограниченную мощь.
Статья опубликована в PC Week/RE № 41 от 04.11.2003 г., стр. 36.