О Java - "языке программирования для Internet" - сейчас говорят повсеместно. Увы, это делается в несколько шарлатанской манере; о том, что многие возможности Java отнюдь не новы и уже давно прекрасно зарекомендовали себя (в особенности в языках, близких к Паскалю), чаще всего умалчивают. Ниже мы коснемся стремительного взлета Java, выявим неизвестные сейчас широкой публике связи между Java и Паскалем и, наконец, рискнем сформулировать прогноз относительно будущего Java.
Введение
Как точно подметил в одной из своих работ Никлаус Вирт [Вирт 89], мир информатики подвержен влияниям моды. О технологии Java без всякого преувеличения можно сказать, что она сейчас в моде. Рано или поздно эта мода пройдет, и тогда интерес к Java снизится до несколько более разумного уровня. Цель настоящей работы - рассмотреть феномен Java в контексте современных, в особенности европейских, исследований в области информатики, попутно развеяв миф о спонтанном возникновении новой технологии на пустом месте, а затем назвать реальные достоинства Java.
"Концепция Java", состоящая из объектно-ориентированного языка программирования и архитектуры сконструированной для него виртуальной машины - была представлена общественности в августе 1995 г. в ходе беспримерной маркетинговой акции. Благодаря ряду факторов, на которых мы чуть ниже остановимся подробнее, концепция быстро приобрела огромную популярность. Порой и самому не верится, что с момента появления Java прошло меньше двух лет, - настолько всеобъемлющим образом удалось новой концепции заполонить мир информатики.
Стремительное распространение Javа
Концепция Java, т. е. комбинация языка и виртуальной машины, ведет свое происхождение от проекта фирмы Sun под названием Green (Oak), открытого в 1990 г. Первоначальной целью проекта было создать среду разработки программного обеспечения для бытовой электроники. Современными электроприборами - тостерами, стиральными машинами, мобильными телефонами - управляют все более и более изощренные программы, выполняемые встроенными компьютерами - так называемыми микроконтроллерами, и Sun поставила задачу заменить множество архитектур микроконтроллеров одной-единственной масштабируемой архитектурой (прототипом нынешней виртуальной Java-машины) с широким спектром применений. В качестве производителя микросхем Sun, естественно, планировала в дальнейшем наладить выпуск и поставку соответствующих микроконтроллеров.
Согласно информации Sun [JavaSoft], идея переориентации Java на World Wide Web возникла в 1994 г. и принадлежала Биллу Джою, одному из основателей фирмы. Осенью 1994 г. началась работа по реализации Web-браузера HotJava с возможностью выполнения аплетов. В марте 1995 г. браузер был представлен избранному кругу стратегических партнеров Sun, включая руководство корпорации Netscape Communications, чья публичная поддержка впоследствии немало способствовала успеху новой технологии. В августе 1995 г. состоялся триумфальный выпуск Java, который происходил в довольно необычной для базовых технологий форме - в виде серии пресс-конференций.
Своим поразительно быстрым распространением идея Java обязана необычайно удачному сочетанию нескольких факторов.
И наконец, необходимо отметить, что без непрерывной рекламной кампании, проводимой Sun, вероятно, никогда не была бы достигнута та "критическая масса", которая сделала Java ведущей технологией для реализации программных вставок в Web-страницы у многих и многих фирм. Во всяком случае, подавляющее превосходство Java на рынке привело к тому, что лишь немногие из специалистов имеют хоть какое-то представление о существовании конкурирующих технологий, таких как, например, Inferno, разработанная в Bell Laboratories [Lucent]. Очевидно, в Sun усвоили урок, преподанный историей борьбы базовых технологий за рынок (например, VHS против Betamax, DOS против Macintosh): даже с технически менее совершенным продуктом можно добиться успеха, если вывести его на рынок своевременно и энергично.
Что в Java действительно ново?
При ближайшем рассмотрении довольно быстро обнаруживается, что революционных новшеств в Java совсем немного. Правильнее сказать, что Java объединяет ряд давно известных идей, причем поразительно многие из них восходят к работам Никлауса Вирта и его исследовательской группы в Швейцарском федеральном технологическом институте (ETH) в Цюрихе.
Что получится из Java?
Как уже упоминалось в начале статьи, интерес к Java практически неизбежно должен снизиться. Хотя то и дело звучат предложения переписать на Java программное "наследие старины", сама эта задача, при том, что исходным языком является Си или Си++, не вполне тривиальна из-за отсутствия в Java указателей. И вполне реальна опасность, что как раз ради поддержки такого проекта кто-нибудь решит создать специальную версию Java "с указателями", что, естественно, одним махом сведет на нет все преимущества технологии.
Вдобавок фрагментация мира Java грозит распадом языка на ряд несовместимых диалектов, как это, к сожалению, уже не раз случалось с так называемыми промышленными стандартами. А корпорация Microsoft, против которой, как мы все помним, был (по крайней мере отчасти) изначально направлен Java-альянс, буквально выдернула ковер из-под ног у конкурентов. В Microsoft сейчас работают не только над созданием собственной среды программирования на Java, коварно названной J++ (возможно, в отдаленном будущем она не останется полностью совместимой с Java), но, по-видимому, и над собственными расширениями виртуальной Java-машины.
Выживание Java в качестве учебного языка программирования в высшей школе весьма вероятно, и это должно весьма приветствоваться. Во многих высших учебных заведениях, как в родном университете автора, в прошлом году воспользовались благоприятным моментом, чтобы вставить Java в учебные планы взамен чудища по имени Си/Си++. Вернуть ситуацию в прежнее состояние будет не так-то просто даже в случае, если промышленные проекты и дальше будут реализовываться на Си/Си++. Профессора смогут с чистой совестью заявить, что применяют на занятиях более современный и нацеленный в будущее язык, а благодаря сходству синтаксиса Java с Си/Си++ должны быть удовлетворены и "промышленники".
Как ни смешно, маркетинговая машина Sun сделала для нас, преподавателей информатики, то, чего мы безуспешно добивались не один десяток лет: даже законченные "хакеры" приобщились теперь к добродетелям типизации и абстрагирования данных.
Заключение
В качестве профессора американского университета я должен приветствовать Java уже по той причине, что этот язык позволяет безболезненно отказаться в преподавании от дидактически несостоятельных Си и Си++. Java представляет собой приемлемый компромисс: современный язык программирования, разработанный в традиции, близкой к Паскалю, Модуле-2 и Оберону, но с сознательной попыткой замаскировать это синтаксисом, сходным с синтаксисом Си. В качестве практика я, таким образом, приветствую язык Java везде, куда он планомерно входит как альтернатива Си или Си++. Однако те, кто уже обрел столь же мощный, но эстетически более совершенный язык программирования, такой как Оберон или Ада-95, спокойно могут держаться за него, не боясь оказаться в невыгодной "языковой ситуации".
Литература
[Брандис и др.] M. Brandis, R. Crelier, M. Franz, J. Templ. The Oberon System Family // Software Practice and Experience, 1995, vol.25, #12, p. 1331-1366.
[Вирт 71] N. Wirth. The Programming Language Pascal // Acta Informatica, 1971, vol.1, #1, p. 35-63.
[Вирт 82] N. Wirth. Programming in Modula-2. Heidelberg: Springer-Verlag, 1982.
[Вирт 88] N. Wirth. The Programming Language Oberon // Software Practice and Experience, 1988, vol.18, #7, p. 671-690.
[Вирт 89] N. Wirth. Modula-2 and Object-Oriented Programming // Proceedings of the First International Modula-2 Conference. Bled, Yugoslavia, 1989. p. 7-13.
[Вирт-Гуткнехт 89] N. Wirth, J. Gutknecht. The Oberon System // Software Practice and Experience, 1989, vol.19, #9, p. 857-893.
[Вирт-Гуткнехт 92] N. Wirth, J. Gutknecht. Project Oberon: The Design of an Operating System and Compiler. Addison-Wesley, 1992.
[Гуткнехт] J. Gutknecht. Oberon System 3: Vision of a Future Software Technology // Software Concepts and Tools, 1994, vol.15, #1, p. 26-33.
[Линдхольм и др.] T. Lindholm, F. Yellin, B. Joy, K. Walrath. The Java Virtual Machine Specification. Addison-Wesley, 1996.
[Нори и др.] K. V. Nori, U. Amman, K. Jensen, H. H. Naegeli, Ch. Jacobi. Pascal-P Implementation Notes // Pascal: The Language and its Implementation / Ed. by D.W. Barron. Chichester: Wiley, 1981.
[Франц 93] M. Franz. Emulating an Operating System on Top of Another // Software Practice and Experience, 1993, vol.23, #6, p.677-692.
[Франц 94] M. Franz. Code-Generation On-the-Fly: A Key to Portable Software. Дис. #10497, ETH Zu..rich; Zu..rich, 1994 (ISBN 3-7281-2115-0).
[Франц 97] M. Franz. Dynamic Linking of Software Components // IEEE Computer, март 1997.
[Франц - Кистлер] M. Franz und T. Kistler. Slim Binaries // Communications of the ACM, принято к публикации.
[Шиперский] C. A. Szyperski. Write-ing Applications: Designing an Extensible Text Editor as an Application Framework // Proceedings of the Seventh International Conference on Technology of Object-Oriented Languages and Systems (TOOLS'92). Dortmund, 1992, p. 247-261.
[JavaSoft] JavaSoft, Inc. What Is Java? http://www.javasoft.com/nav/whatis.
[Lucent] Lucent Technologies Inc. Inferno. http://plan9.bell-labs.com/inferno/.
Михаэль Франц - преподаватель Отделения информации и информатики университета шт. Калифорния в Ирвине. В прошлом - старший научный сотрудник руководимой Никлаусом Виртом исследовательской группы ETH (Цюрих), один из первых участников проекта Oberon и автор созданной в ETH реализации языка Оберон для Macintosh. Области научных интересов - языки программирования и их реализация; расширяемые системы (программная архитектура таких систем, компонентное ПО, переносимое ПО, распространяемое по сети). E-mail: franz@uci.edu, http://www.ics.uci.edu/~franz.
Информация к размышлению
Статья Михаэля Франца, любезно предоставленная им для публикации в "Мире ПК", - одна из редких критических работ, где предпринимается попытка осмыслить причины и последствия нынешней эйфории, связанной с технологией Java. К сожалению, автор лишь вскользь упомянул о своих собственных исследованиях в этой области, поэтому читатель, не знакомый с его работами, возможно, сочтет статью неконструктивной.
Михаэль Франц был основным разработчиком системы Oberon System 3 для платформы Macintosh - ОС принципиально нового типа, позволяющей расширение за счет отложенного связывания и реконфигурации программных модулей, а также за счет активного использования так называемых долговременных объектов (persistent objects) для видоизменения пользовательского интерфейса. В системе Oberon любая процедура без параметров в реализованном программистом модуле автоматически становится полноценной командой ОС(!), а текстовый фрагмент любого окна напрямую может быть использован для выполнения произвольных активных действий (это куда более мощные средства, чем ставший для многих уже привычным механизм гипертекста). Проект Oberon почти на десять лет опередил работы Sun Labs по Java и привел к появлению языка Оберон и ориентированной на него аппаратной архитектуры Ceres.
Упоминаемая в статье диссертация Франца посвящена анализу недостатков виртуальных машин и подробному изложению особенностей динамической генерации объектного кода для произвольного целевого процессора. Суть решения, предложенного Францем, состоит в том, что исполняемая программа не просто запускается с диска штатным загрузчиком ОС, а сначала "на лету" компилируется из компактного промежуточного представления (причем с проведением полноценной оптимизации!), затем в оперативной памяти компонуется с другими "полуфабрикатными" и объектными модулями приложения, после чего получает управление. Эта схема была реализована в виде протокола OMI (Oberon Module Interchange). Благодаря компактности промежуточного кода время загрузки программ увеличилось не очень сильно (примерно на 30%). Интересно, что схема Франца имеет значительные преимущества по сравнению с куда более поздними реализациями медленных виртуальных Java-машин и так называемых JIT-компиляторов прежде всего за счет не линейной (как в Java), а древовидной структуры промежуточного кода, построенного на принципе семантического словаря.
В Ирвине Франц возглавил коллектив, который к середине прошлого года реализовал OMI в варианте для Internet, получившем название Juice. Загрузчик компактных полуфабрикатных аплетов, кодогенератор (back-end компилятора Oberon) и библиотека основных функций (в том числе экранных) поместилась в дополнительном модуле для Microsoft Internet Explorer и Netscape Navigator (его объем менее 400 Кбайт). Juice существует в редакциях для платформ Wintel и Macintosh, распространяется свободно (www.ics.uci.edu/~juice).