Есть у меня один “грешок” - люблю начинать “от Адама”. Особенно в статьях. Так интересные параллели можно обнаружить с сегодняшней ситуацией. Вот типичный пример проблемы: что ждет в обозримом будущем ту часть компьютерной индустрии, избежать соприкосновения с которой никому из нас не удается, - персональные компьютеры? С чего, вообще, все началось?
Итак, сначала были Машины. С большой буквы - ибо они ее заслуживали. “Чайников” к ним не допускали - нечего им около Компьютера делать. Да и программиста-то к сложному электронному прибору допускать не стоит - программистов много, а компьютеров мало, и денег они немалых стоят. Работа с такой Машиной велась в пакетном режиме, и для “перемалывания цифр” это было вполне удобно.
Электроника на месте не стояла - машины постепенно стали дешевы настолько, что труд программистов стал заметной статьей расходов. И начался новый виток гонки - в этот раз под девизом за эффективность труда программиста”. До пользователей руки еще не дошли, но пишущая машинка (а кое-где и терминал) с разделением времени была большим прогрессом. Примерно в те же времена проекты стали настолько велики, что потребовалось участие многих людей в работе над одной и той же программой.
Дальше - больше. Дешевизна электроники позволила дотянуть “щупальца” ЭВМ до рабочих столов пользователей. Для программистов это стало страшным ударом. Вместо простых и понятных квалифицированному оператору инструкций (“в случае АВОСТа по адресу 45675 произвести перезапуск со следующими параметрами...”) пришлось думать о странной вещи под названием “интерфейс”, об отслеживании и обработке ошибок, причем не программы, а пользователя.
А тут как раз и персональные компьютеры появились. Маленькие, странные уродцы, почти ничего не умеющие, но свои собственные. На волне энтузиазма пользователей, обрадованных перспективой освобождения от “тирании программистов”, индустрия влетела в новую эпоху. И начался кошмар. Пользователи в ужасе смотрели на тарабарщину, загадочно мерцавшую на экранах, а программисты недоумевали - “что их там не устраивает”?
Но рыночная экономика - хитрая штука. Если не удается сделать товар, нужный потребителю, приходится создавать потребителя под тот товар, что есть в наличии. И таковой был успешно выведен. Его характерные особенности - стремление иметь все “самое последнее, самое мощное, самое эффективное” на своем собственном столе. Если раньше, для того чтобы ткнуть мышью в изображение папки и получить в окошке иконки лежащих в ней файлов, пользователям первых компьютеров Macintosh было достаточно 64 Кб ОЗУ и дискеты, то сегодня для того же самого (и, увы, с той же самой черепашьей скоростью) требуется уже как минимум Pentium-90 с 16 Мб ОЗУ и жестким диском мегабайт эдак на 500... А фразы типа “486-е компьютеры - это смерть для бизнеса”, звучащие из уст обозревателей? Они говорят о том, что уже давно не спрос формирует предложение, а наоборот - фирмы, заинтересованные в продаже своих продуктов, искусственно формируют спрос на них.
Итак, мы добрались до сегодняшних дней. Старая ситуация повторяется на новом уровне. Рассыпанные по миру персональные компьютеры поспешно группируются в локальные и глобальные сети, превращаясь в функциональные аналоги терминалов. “Большие” компьютеры, к которым простые пользователи не допускались (а если встречалась “неподъемная” задача - то только под присмотром профессионалов), работают в качестве серверов и открыты для каждого. Вопиющее противоречие между навязанной пользователям идеологией “все свое ношу с собой” (очень выгодной производителям “железок” и монополистам на рынке ПО) и реальными нуждами офисной работы уже не позволяет себя игнорировать.
Помощь обычно приходит с самой неожиданной стороны. Так и в этот раз - фирма Sun Microsystems, не занимавшаяся до этого дешевой массовой техникой, выдвинула новую разработку. Казалось бы, какая связь между проблемами ПК и новым языком программирования Java? Да еще и ориентированным на распределенную обработку - главным образом на работу в Internet.
Но недаром в числе первых заинтересовавшихся Java оказались именно гранды, работающие в области ПО для персональных компьютеров. Только с 4 до 7 декабря прошедшего года были подписаны следующие соглашения:
4, понедельник. С Netscape - о совместной разработке нового открытого языка сценариев JavaScript, ориентированного на пользователей, незнакомых с программированием. Он предназначен для создания страниц в WWW, использующих приложения Java. Двадцать восемь компаний уже выразили намерение поддержать JavaScript;
4, понедельник. Sun объявила о намерении совместно с Silicon Graphics и Macromedia разработать общие мультимедийные интерфейсы разработчика и форматы файлов для Java, интегрирующие трехмерность и интерактивность;
4, понедельник. Объявлено о том, что фирмы Sun, Netscape и SGI будут совместно поддерживать VRML, Java и JavaScript как стандарт для мультимедиа, трехмерности и интерактивности в Internet;
6, среда. Корпорация IBM объявила, что лицензировала технологию Java и планирует реализовать ее для платформ AIX, OS/2 и Win 3.1;
6, среда. Фирма Adobe объявила, что лицензировала Java и намерена интегрировать ее в свое ПО для авторизации PageMill и в Adobe Acrobat;
6, среда. Sybase объявила о своем намерении лицензировать технологию Java для использования со своими СУБД и инструментальными средствами;
7, четверг. Корпорация Microsoft объявила, что ею подписан протокол о намерениях с фирмой Sun о лицензировании технологии Java. Сейчас идет работа над деталями лицензионного соглашения. Кроме того, в принципе Microsoft согласилась предоставить Sun реализацию виртуальной Java-машины и AAPI (интерфейс разработчика для программирования приложений) для Windows.
А примерно на месяц раньше, 8 ноября, фирма Borland объявила, что лицензирует Java и создаст инструменты разработки на этом языке. Соглашение, в частности, отмечает, что Borland построит визуальную среду быстрой разработки программ (RAD) для создания Java-приложений.
Пол Гросс, старший вице-президент по разработкам фирмы Borland, сказал: “Мы верим, что платформно-независимые возможности Java ускорят его принятие в качестве среды разработки программ для распределенных вычислений и создадут потребность в высокопроизводительном инструменте для разработки приложений”.
Продукт, условно названный Latte, будет написан на самом языке Java и, чтобы ускорить процесс продвижения этой технологии, будет доступен в несколько стадий. Первый коммерческий выпуск намечен на первую половину 1996 г. Гросс пояснил: “Мы планируем этапный подход к продвижению наших решений, чтобы сделать эту технологию доступной разработчикам на Java как можно раньше”.
А вот корпорация Symantec опередила всех, объявив 13 декабря, что она лицензировала Java у Sun и уже выпустила первую среду разработки программ на этом языке для Windows 95 и NT, названную Espresso. Среди ее особенностей - Project Express Wizard для быстрого создания приложений, Java Class Browser, показывающий объектное представление программы вместо традиционных файлов с исходными текстами, и многое другое.
Единственный недостаток - невозможность работы с этим продуктом на других платформах - искупается доступностью его уже сегодня и планами корпорации выпустить в первом квартале Espresso for the Power Macintosh.
Разработчики, использующие Symantec C++ 7.2 for Windows 95/ NT, могут легко провести модернизацию для работы с Java. Для этого достаточно загрузить Espresso с Web-страницы Symantec: http://http.www.symantec.com.
Что же так привлекло все эти фирмы? И почему они так торопятся занять нишу на этом рынке? Даже Microsoft, обычно внедряющая новинки с опозданием на несколько лет (вспомним историю появления Windows NT и Windows 95 в сравнении с OS/2), сейчас боится оказаться за бортом. Чтобы ответить на этот вопрос, стоит немного рассказать о самом языке Java.
Со строго технической точки зрения Java - это интерпретируемый объектно-ориентированный язык, по синтаксису весьма похожий на Си++. Казалось бы, что тут такого? Ключ к загадке - в слове “интерпретируемый”. Сейчас затраты на перенос приложения на другую платформу составляют огромную сумму, кроме того, на это требуется масса времени. А ведь потом этот продукт надо еще и поддерживать с учетом многоплатформности. Это почти полностью предотвращает конкуренцию со стороны небольших фирм - производителей ПО.
С появлением Java для запуска приложения, написанного на нем, на любой платформе не требуется вообще ничего. Так называемый “байткод” (bytecode), в который превращается исходный текст программы после “компиляции”, является полностью независимым от компьютера и ОС. Для его выполнения необходим только интерпретатор, который, несомненно, в ближайшем будущем будет написан для всех платформ.
У такого подхода много преимуществ. Во-первых, приложение, написанное на Java, могут приобрести больше пользователей, что стимулирует разработки именно на нем.
Во-вторых, открывается возможность (и уже объявлено, что разработки в этом направлении ведутся) создания специализированного Java-терминала, построенного на базе спецпроцессора для этого языка и способного при очень невысокой цене (называется сумма $500) выполнять те же функции, что и современный офисный ПК, в том числе - даже “живое” видео.
В-третьих, Java - это замечательная дорога к объединению локальных и глобальных сетей в “суперсеть”, каковой обещает стать Internet. Мечта об “Информационной магистрали” (Information Superhighway) вполне может стать явью, а Java-терминал - заменить привычный телевизор.
Разумеется, красивые мечты часто гибнут, не выдержав “бытовых трудностей”, но разработчики из фирмы Sun постарались все предусмотреть, чтобы этого не произошло. Прежде всего они нашли практически незанятую нишу для начального распространения языка - приложения для Internet. Общение с сетью из пассивного “серфинга” превращается в полностью интерактивное. Очень многие фирмы, имеющие Web-страницы, заинтересованы в большей их интерактивности.
Далее, для перехода на Java не требуется выбрасывать существующие компьютеры и операционные системы, поскольку его интерпретатор вполне может работать на существующем оборудовании и ПО. То есть вложения, сделанные предприятием, не обесцениваются. А перспектива перехода на более дешевые, чем обычные ПК, Java-терминалы должна обрадовать любого руководителя информационного отдела.
Кроме того, для облегчения перехода с наиболее популярного сейчас Си++ синтаксис языка Java сделан очень похожим на Си++, что позволит сэкономить время и деньги как на обучении программистов, так и на переносе существующих программ.
Несмотря на это, сделано все для борьбы со “скелетами в шкафу”, накопившимися в Си++, из-за которых программы на нем славятся своей ненадежностью и трудностью модификации. В частности, полностью убрана работа с указателями, столь часто приводившая к известным каждому пользователю Windows ошибкам защиты. Автоматическая сборка мусора позволяет избавиться от проблемы постепенного уменьшения доступной памяти из-за неудаленных динамических переменных. Объектно-ориентированный подход, с трудом привитый в Си++, здесь приобретает второе дыхание. Многопотоковое выполнение также интегрировано в язык и позволяет получать программы с гораздо лучшим временем отклика на действия пользователя, которому больше не придется по нескольку минут смотреть на курсор мыши в форме часов. Стандартизованная интерфейсная библиотека позволит пользователям безболезненно переходить на другие платформы и в другие программы, не преодолевая барьер обучения новым правилам работы.
Следует отметить, что, несмотря на тесную связь с Internet, язык Java не ограничен этой областью. Конечно, там он занимает очень важное место - фирмой Sun уже выпущена программа для просмотра Internet HotJava с поддержкой написанных на нем приложений, да и фирма Microsoft собирается использовать Java и JavaScript в своей программе Explorer.
Но возможности нового языка этим не ограничиваются - он отлично подходит и для работы, например, в условиях обычного офиса, где есть сервер и несколько рабочих станций. Станции вполне могут выполнять приложения Java независимо от того, что это за компьютеры и какая ОС на них установлена, и, кроме того, усилия администратора сети по установке, обновлению и конфигурированию ПО в значительной мере облегчаются тем, что Java делает возможной автоматизацию этих задач. Например, когда пользователь, включив компьютер, запускает текстовый процессор, по сети автоматически подгрузится самый новый его вариант.
Те же самые возможности существуют и в глобальных сетях. Например, пользователь программы для просмотра Web натолкнулся на интересные ему данные, к примеру на картографическую информацию, но в новом формате, который его программа не умеет обрабатывать. При этом автоматически произойдет следующее: будет выяснено, что необходимо для их просмотра, каков адрес в сети кода для их обработки, произойдет ли соединение с нужным узлом сети, будет ли код загружен в компьютер пользователя и использован при просмотре нужных файлов, став в некотором смысле частью программы просмотра.
Разумеется, при этом возникают вопросы надежности и безопасности. Мало ли, что может натворить код, загруженный неизвестно откуда... Разработчики фирмы Sun вложили немало труда в решение этих проблем. Например, вот как выглядит процесс загрузки такого кода, полученного по сети. Первым делом за работу берется модуль проверки безопасности, не делающий никаких “предположений” о коде, в частности о том, что код создан “настоящим” компилятором Java. Если выясняется, что нигде нет обращений в недопустимые области памяти, неверно заданных размеров и типов переменных и тому подобных опасных действий, код передается на выполнение.
Никакой возможности воздействовать на систему или даже на другие программы у него нет - каждая программа выполняется в своем собственном пространстве имен благодаря тому, что язык интерпретируемый. Решения о размещении всех объектов принимаются во время выполнения самим интерпретатором, и программам даже неизвестно физическое их расположение - доступ к данным выполняется не по традиционным для Си++ указателям, а по ссылкам (handles), содержащим условные номера. Это делает невозможным “подделку указателей”.
Следующая потенциальная опасность - бесконтрольный доступ к сети. У пользователя есть возможность сконфигурировать среду в соответствии с его требованиями к безопасности: запретить все обращения к сети; разрешить только обращения к узлу сети, откуда загружен код; разрешить обращения к сети только снаружи брандмауэра, если код пришел извне; разрешить все обращения к сети.
При такой скрупулезной проверке безопасности стоит подумать и о производительности. Здесь принято достаточно мер для ее повышения. Во-первых, язык создан таким, чтобы как можно больше проверок вынести на этап до выполнения программы. Во-вторых, этап синтаксического разбора и сопутствующих операций по превращению исходного текста в быстро выполняемый байткод выполняется при разработке. Наконец, существует возможность создания оптимизирующего компилятора байткода в код машины, на которой происходит его выполнение. В этом случае производительность будет такой же, как и у “обычных” программ, при сохранении переносимости.
Впрочем, даже без этого предварительные результаты весьма впечатляют. Уменьшение скорости выполнения приложения на Java по сравнению с традиционной программой на Си++ оказалось всего лишь около 20%, а не в несколько раз. Учитывая многопотоковое выполнение, пользователи, вероятно, ощутят не замедление, а ускорение реакции на их действия.
Итак, что же нас ждет в ближайшем будущем? Уступит ли Microsoft свое положение монополиста в области бизнес-приложений и операционных систем? Возникнет ли активная конкуренция, ведущая к резкому повышению качества и количества ПО? Или эта фирма сможет захватить лидерство и в этой области? В конференциях Internet, посвященных Java, с грустью предсказывают, что, как уже неоднократно бывало раньше, Microsoft, недавно торжественно отметившая свое двадцатилетие, реализует недокументированные расширения к стандарту Java, а затем, опираясь на свою репутацию, сделает их де-факто стандартом, отбросив тем самым остальных разработчиков назад и поставив их в зависимость от своих решений.
Поживем - увидим. Одно ясно уже сейчас - в компьютерном мире на наших глазах происходит очередная революция. Вы можете сами узнать последние новости, если имеете доступ к World-Wide Web, по адресу: http://www.sun.com. Там же можно бесплатно получить инструментарий разработчика (Java Developer’s Kit) для ОС Solaris или 32-разрядных Windows-платформ (Windows NT и Windows 95). На сегодня это уже вторая бета-версия, соответствующая “замороженным” спецификациям.
Там же можно найти и HotJava - утилиту просмотра Web, поддерживающую Java, разработанную Sun Microsystems, и посмотреть на примеры интерактивных страниц WWW.
Павел Гродек