Желудевый Кофе

Павел Храмцов
Коротко о главном Немного истории Java-технология Модель Объектов Резюме

Коротко о главном

Начало 1996 года ознаменовано появлением нового языка программирования Java. Если быть более точным, то широкая публика могла "пощупать" это новое произведение от Sun Microsystems еще весной 1995 года, когда впервые на компьютерах этой фирмы появилась новая программа просмотра страниц World Wide Web - HotJava. На домашней странице WWW Consortium Java была внесена в список так называемых Мобильных Кодов - одного из перспективных направлений развития технологии World Wide Web. И вот в конце 1996 года на Западе начался бум Java, который к моменту проведения выставки Unix-Expo`96 докатился и до нашей страны. На выставке Sun устроила настоящее промывание мозгов компьютерной общественности под названием "Java - революция на Internet", посвятив этому целый выставочный день. Не менее впечатляющая компания по пропаганде Java развернута и в печати. При этом популяризацией возможностей этого языка занимаются не только специализированные компьютерные издания, но и, подражая The Economist и The New York Times, статьи на эту тему разместили Коммерсант Дейли и Известия. И это при всем при том, что реально ничего действительно существенного кроме того, что новую технологию залицензировали с десяток крупных компьютерных фирм, включая Microsoft, еще не произошло. При этом речь теперь ведется не просто об языке Java, а об технологии Java, которая призвана осуществить прорыв в реализации распределенной обработки данных в сети Internet. Не впадая в эйфорию от возможностей новой технологии, но и не отметая этих возможностей, попробуем разобраться в том, что такое Java-технология в чем ее сила, проблемы и будет ли она столь же популярной как и World Wide Web.

Немного истории

Название статьи спровоцировала история появления Java, которую автор прочитал в материалах, любезно подготовленных Sun для выставки Unix-Expo`96. Согласно этой истории технология Java(Кофе) родилась из проекта Oak (Дуб), основной целью которого была разработка об'ектно-ориентированных средств описания и коммуникации различного рода электронных устройств. Из-за неудачи этого проекта 1994 году опыт, накопленный в рамках его реализации, было решено применить к продуктам ориентированным на применение в Internet. В апреле 1995 года по сети свободно распространяется HotJava - интерфейс просмотра страниц World Wide Web для платформ Sun. Буквально через месяц Netscape Communication - законодатель моды в разработке программ-интерфейсов Internet, покупает лицензию на Java. В настоящее время HotJava реализована не только для SunOS и Solaris, но и для многих других Unix-платформ и Windows NT. Кроме HotJava мобильный код Java может интерпретироваться и второй версией программы Netscape Navigator для всех систем кроме Windows 3.x. Вот коротко история Java-технологии, если опустить список фирм, купивших лицензию на Java, и даты приобретения этих лицензий. Теперь рассмотрим на фоне каких событий разворачивается внедрение новой технологии.

Главным событием 1995 года стал бурный рост применения глобальной сети Internet для бизнеса в самых различных его проявлениях. Этот бум вызван во-первых, наличием хороших сетевых интерфейсных программ, первое место среди которых занимает Netscape Navigator, и, во-вторых наличием хорошо развитой системы телекоммуникаций, главным образом в США, которая обеспечивает доступ в Internet большого количества потенциальных потребителей информации и услуг. Но Internet имеет несколько слабых мест, которые тормозят его применение в серьезных коммерческих приложениях. Во-первых, это безопасность. Сама технология TCP/IP не имеет встроенных механизмов обеспечения безопасности, и следовательно для организации виртуальных защищенных сетей на основе Internet необходимо применять дополнительный программные средства. Во-вторых, это целый букет проблем связанных с технологией World Wide Web, которые характеризуются отсутствием возможности организации виртуального канала связи, что характерно при работе с базами данных, для удаленных и распределенных вычислений, отсутствием поддержки мультимедиа, что необходимо для рекламной деятельности в Сети и ряда других приложений, большой нагрузкой на сеть при реализации интерактивных приложений при доступе к ресурсу по принципу "каждый с каждым". Именно на решение некоторых из этих задач и ориентирована Java-технология.

Java-технология

Словосочетание "Java-технология" уже несколько раз употреблялось в этой статье. Пора сказать о том, что я под ним понимаю. Java технология состоит из по крайней мере трех основных компонентов: системы программирования на об'ектно-ориентированном языке Java в классическом смысле этого слова, системы разработки мобильных Java байт-кодов и системы программирования JavaScript. Первые два компонента предложены Sun, а JavaScript - это творение Netscape. Рассмотрим сначала общие свойства каждого компонента этой триады, а за тем посмотрим на их место в сложившейся технологии World Wide Web.

Java-приложения

Система программирования на Java позволяет компилировать программы для компьютерной платформы, на которой она стоит в том же ключе как и любая другая, например, С или С++. В этом случае главными отличиями Java-программ, которые называются Java-applications, является использование библиотеки Java-классов, которые обеспечивают разработку безопасных, распределенных систем. При этом утверждается, что язык позволяет делать гораздо меньше ошибок при разработке программ. Главным при этом является тот факт, что в Java напрочь отсутствует адресная арифметика. Анализировать возможности "проколов" в компиляторе Java пока представляется крайне затруднительно, т.к. он широко не применяется и craker-ы еще не начали его пристальное изучение, в отличии от других компонентов Java-технологии, где "дырочки" обнаружились незамедлительно. А вот по поводу отсутствия адресной арифметики можно сказать, что у дедушки языков программирования - Fortran, ее тоже не было, но за тем она появилась и являлась чрезвычайно мощным средством повышения эффективности программных кодов. Понятно, что ни о какой мобильности откомпилированного приложения говорить не приходится. Для его переноса нужен соответствующий компилятор и библиотеки. По сравнению с механизмом RPC Java - это большой шаг вперед, но многие ли разработчики страниц Web воспользуются этой возможностью?

Java-байт код

Гораздо более интересным является разработка мобильных Java байт-кодов, которые в терминах Java-технологии называются applets. Концепция applets была специально разработана для использования в World Wide Web. Задача applet-ов "оживить" Web. Типичным примером такого применения applet-ов является приветствующий пользователя симпатичный человечек из документации по программе HotJava. Для использования applet-ов в язык гипертекстовой разметки HTML был введен специальный тег APP, в котором указывается имя applet-а и параметры его вызова. При этом обработка HTML-документа программой-интерфейсом происходит также как и при встроенной в документ графике. Сначала запрашивается документ, анализируется его содержание, и, если есть теги APP, подгружаются applet-ы. После того как все applet-ы получены они могут быть выполнены. Из этой схемы ясно, что программа интерфейс является одновременно и интерпретатором байт-кода Java. Используя библиотеку классов Java можно разработать довольно эффектные мультимедийные страницы с движущейся графикой и звуком. Кроме этого применение байт-кода позволяет организовать распределенные процедуры вычислений с использованием различных серверов, с которыми можно взаимодействовать по разным протоколам. Собственно возможность подключения новых протоколов обмена также декларируется как одно из достоинств нового подхода. Но даже у неискушенного пользователя сразу возникает закономерный вопрос о безопасности машины, на которой запускается приложение. Как быть с традиционным девизом "доверяй, но проверяй" при копировании неизвестного программного обеспечения? Не надо быть семи пядей во лбу, чтобы понять, что при использовании HotJava или Navigator пользователь вольно или невольно запускает на своей машине чужие программы, которые могут не только "оживить" HTML-страницы, но и несколько "встряхнуть" владельца компьютера, на котором эти страницы "оживают". Ведь, в принципе , applet-ы могут выполняться и незаметно для пользователя в фоновом режиме. Ответ на этот вопрос прост: при разработке applet-ов используется компилятор байт-кода, который имеет встроенную систему безопасности, а сама программа просмотра, также анализирует получаемый байт-код на наличие в нем запрещенных операций. Однако, если отбросить детали механизмов защиты HotJava и Navigator, все сводится к запретам записи информации на диск и по адресам оперативной памяти с использованием адресной арифметики. Совершенно очевидно, что этого явно недостаточно для построения надежно защищенной системы. Существует масса способов внедрения в систему и без указанных выше действий, не говоря просто о непроизводительном использовании ресурсов компьютера. Первая ласточка уже появилась на свет в виде сообщения CERT о возможности разработки applet-а, который использует брешь в системе DNS, и подменяет IP адреса. Правда эта "дырочка" обнаружена в Navigator, а не HotJava, но и популярность первой программы не идет ни в какое сравнение популярностью продукта Sun. Netscape уже об'явила о том, что в систему защиты будут внесены изменения и программа будет проверять IP-адреса, с которыми работает applet на идентичность с IP-адресом HTTP-сервера, с которого applet получен. Но естественно встает вопрос о том как же быть в этом случае с распределенными вычислениями, которые должны произвести революцию на Internet? В принципе существует пока два способа защиты: запрет выполнения Java байт-кода программой интерфейсом и использование проверенных страниц. Запретить выполнение можно, включив специальный режим настройки программ HotJava и Navigator. Вообще же говоря, в телеконференции comp.lang.java энтузиасты новой технологии на проблему безопасности реагируют примерно так - мы же честные люди, которые не собираются писать всякие пакости. Для реальной же защиты в программу-интерфейс придется вставить полноценный firewall с возможностями конфигурирования TCP/UDP портов и анализа содержания пакетов, и то, как показывает практика, это не приводит к стопроцентной безопасности.

JavaScript

Третьей составляющей Java-технологии является язык сценариев управления просмотром гипертекстовых страниц JavaScript. В девичестве LiveWare, этот язык разрабатывался компанией Netscape Communication еще до анонсирования Java. Для специалистов в области теории и практики гипертекстовых систем появление этого языка было давно ожидаемым событием. Практически любая локальная система имеет средство описания сценариев просмотра своих информационных страниц, появление такого механизма в World Wide Web было делом времени. При этом и теория и практика реализации такого языка были достаточно хорошо изучены, начиная от демонстраций Дуга Энжельбарда, и кончая системами типа Hyper Card, Hyper Note, KMS и т.п.. Кроме того появление фреймов, многооконность, динамическая загрузка страниц и ряд других расширений от Netscape явно указывали направление развития Navigator. Надо сказать, что технология LiveWare по своей архитектуре очень напоминала Java. Та же возможность разработки приложений для сервера HTTP, мобильный код, исполняемый Navigator. Но, кроме этого, в HTML страницы можно встраивать еще и исходные тексты программ. Последняя возможность превращает Navigator в самодостаточную среду программирования, которую можно использовать не только при путешествиях по Internet, но и в локальных системах. Используя JavaScript, можно организовать очень гибки много оконный интерфейс с локальным контекстной справочной системой и встроенной графикой при этом многие вопросы проверки вводимых пользователем данных можно возложить на функции JavaScript. По своим функциональным возможностям JavaScript довольно сильно уступает Java, по крайней мере пока. Можно организовать открытие нового окна, прокрутку текста, запрограммировать калькулятор, которых на сети уже около двух десятков, проверку ввода, но не более того.

Модели объектов

Отдельной интересной темой является об'ектно-ориентированный характер JavaScript. Если с Java более менее все понятно: есть декларация об'ектов, наследование свойств об'ектов и т.п., то с JavaScript все несколько иначе. Весь язык ориентирован на встроенные об'екты Netscape Navigator: окна, формы, поля форм, элементы рабочих областей Navigator и т.п. Это сильно облегчает обучение языку и позволяет сразу писать интересные и полезные программы. Но вот с наследованием свойств об'ектов и обменом данными между различными объектами, например двумя окнами Navigator, дела обстоят из рук вон плохо. Эти возможности вообще никак не реализованы. Правда есть намеки на то, что в будущем что-то появится, типа подкласса parent класса window, но пока JavaScript сейчас - это просто язык сценариев просмотра HTML страниц. Правда надо сказать, из-за него Navigator стал довольно тяжелой программой для персональных компьютеров. При организации HTML страниц со встроенной графикой и JavaScript функциями открытия/закрытия окон и проверкой ввода ресурсов 486 компьютера с 8Mb памяти и Windows 3.x хватает едва-едва. Аналогичная ситуация происходит и при использовании Windows NT c 16Mb оперативной памяти. Вообще говоря, пользоваться JavaScript следует аккуратно, думая о потенциальных пользователях. Так например размещение "бегущей" строки в status bar при переходе к другой странице довольно сильно мешает пользователям, которые используют медленные линии для подключения к сети, т.к. именно в этом поле отображается статистика переданных байтов с сервера клиенту. К тому же бегущая строка для пользователей Windows 3.x хороша только в том случае если на ней не задерживаться. функция setTimeout, которая выполняет отложенный вызов прокрутки текста, приводит к от'еданию ресурсов системы, что может привести к зависанию машины, если оставить страницу с бегущей рекламой на некоторое время. Из раз'яснений, полученных в телеконференции comp.lang.javascript списка javascropt@oberon.org, следовало, что отложенное выполнение порождает новый поток, если речь идет о много потоковых операционных системах, а так как Windows 3.x таковой не является, то функция реализуется путем рекурсии, что приводит к "поеданию" ресурсов. Наиболее логичным выходом в этой ситуации рекомендуется считать установку 32-разрядной ОС Windows`95 или NT. Надо сказать, что переход на NT этой проблемы не снимает, т.к. сама ОС требует гораздо больше ресурсов. Кроме того довольно часто и при использовании HotJava, и при использовании Navigator под NT появляется сообщение "protection violation", что приводит к аварийному завершению программы (речь идет не о моих программах а о тех, которые я загружал из Сети). Сконцентрируем теперь внимание на том каково место Java-технологии в рамках технологии World Wide Web, где, собственно, и прочат прорыв к новым технологическим высотам. Рассмотрим схему взаимодействия программ в рамках Web.

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

Область применения Java расширяется только в случае применения Netscape Navigator или HotJava. Здесь уже возможно создать набор applet-ов, которые будут выполняться при помощи этих программ на компьютере пользователя.

При использовании HotJava и Java Development Kit можно расширить возможности программы-интерфейса за счет разработки новых модулей.

Резюме

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

"Java - это современный язык для разработки приложений, созданный компанией Sun Microsystems Inc., специально для распределенных сред. Архитектура языка снимает бремя вычислений с настольных станций, перекладывая его на серверы, которые собственно и доставляют приложения пользователям."

В этом высказывании следует обратить внимание на второе предложение. Если речь идет о сервер-приложениях, то здесь ничего нового относительно обычной Web-технологии, которая представлена на рисунке 1, нет. Приложения Java, как и как и любое другое выполняется сервером, как API-приложение или CGI-скрипт. А вот в случае Java байт-кода приведенное высказывание просто ошибочно, т.к. байт-код выполняется именно на рабочей станции пользователя, а не на компьютере сервера.

"Истинная значительность Java заключается в том, что это первый язык, который позволяет разрабатывать программное обеспечение для Internet, независящее от аппаратной платформы."

Здесь все правильно, с одной только оговоркой - для любой аппаратной платформы должен существовать интерпретатор Java, как существует, например, интерпретатор Basic или Tcl/Tk для X-window, скрипты которого можно также передавать по сети, если использовать Tk интерфейс для World Wide Web, разработанный гораздо раньше Java.

"Язык Java может быть использован для создания двух различных типов программного обеспечения: автономного, которое может выполняться на машине без операционной системы и работает непосредственно на Вашей настольной станции, а также для миниатюрных приложений (апплетов), которые запускаются с помощью написанного на Java Web-броузера, например Netscape Navigator 2.0."

О работе без операционной системы - это что-то уж больно круто. Скорее всего предполагается, что ОС все же будет но будет также написана на Java. В этом случае, естественно, предполагается наличие возможности записи на диск. О бездисковых Internet-терминалах вообще не хочется говорить. Иметь компьютер который полностью зависит от линий связи в нашей действительности просто непозволительная роскошь. Во-вторых, чтобы Netscape Navigator 2.0 был написан на Java, кроме как в рекламе Sun, нигде больше не написано. Кроме того, любой кто запускал HotJava и Navigator может воочию убедится, что программа, написанная обычным способом работает гораздо быстрее, чем HotJava, да и вообще это очень сильно смахивает на японские компьютеры пятого поколения, аппаратно реализующие Prolog:-).

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


Коротко о главном Немного истории Java-технология Модель Объектов Резюме
"Открытые системы" N6(48),1996г. Апрель 2 Computerworld Россия.