Java: новые песни о старом

Урок истории

В конце семидесятых начале восьмидесятых в университете американского города Сан-Диего была разработана система программирования USCD Pascal, единственная на тот момент реализация языка Pascal для компьютеров Apple 2. Сегодня в это трудно поверить, но Apple 2 - компьютер, оснащенный 64 К оперативной памяти, двумя дисководами по 110 К и... больше ничем - продавался на рынке как мощная система для бизнес-приложений. Как быстро, однако, меняются времена.

Основной причиной успеха USCD Pascal была его изначально задуманная переносимость. Однажды скомпилировав программу, ее можно было выполнять на Apple 2, IBM PC, Appricot (в то время компьютерам часто давали фруктовые имена) или на чем-либо еще. Как такое было возможно, если учесть, что каждый компьютер использовал свой процессор?

Ответ можно свести всего к одному слову - р-код. Вместо того, чтобы генерировать машинный код для определенного процессора, компилятор USCD Pascal создавал р-код - объектный код абстрактного процессора - названного р-машиной. Первоначально аппаратной реализации р-машины не существовало. Вместо этого она эмулировалась специальной программой-интерпретатором. Позже университет лицензировал аппаратную реализацию р-машины, которая была выпущена как набор микросхем компанией Western Digital. Но это уже другая история. Интерпретатор р-кода обычно создавался на ассемблере из соображений скорости и размера. Для переноса системы USCD на другую платформу достаточно было написать сам интерпретатор и библиотеку основных функций низкоуровневого ввода-вывода. Все остальное было независимо от аппаратуры.

Большинство современных процессоров используют набор инструкций, основанный на использовании регистров. В отличие от них, р-машина, в основном, использовала стек. Это позволяло сделать р-код весьма компактным, так как при использовании стека, в большинстве случаев, нет необходимости указывать при выполнении команд, где находятся данные (подразумевается, что в стеке). В основном благодаря компактности р-кода было возможно его использование на такой машине, как Apple 2.


Восхождение Internet

Решение, найденное в USCD Pascal, было весьма остроумным и, тем не менее, не своевременным. В те времена компьютерный рынок находился еще в эмбриональном состоянии и изменялся слишком быстро, чтобы кто-то уделял слишком много внимания таким вопросам, как переносимость. Более важным был недостаток интерпретатора, как существенно замедляющего работу программы фактора.

Сегодня дела обстоят несколько, если не сказать совсем, иначе. Мы имеем мощные и относительно дешевые компьютеры, способные справиться с небольшим довеском в виде интерпретируемого языка. Хотя, как будет сказано ниже, существуют "хитрые" технологии, способные устранить и этот минус. И, наконец, мы имеем Internet. Компьютеры самых различных типов (а не только Wintel) объединены в единую сеть и вопрос о программном обеспечении, способном выполняться на различных платформах, вышел на первый план. Итак, история сделала полный круг и идея программного обеспечения, не зависимого от аппаратной платформы, снова вышла на сцену.

Подобно USCD Pascal, компиляторы Java не создают машинный код. Вместо этого они генерируют свой эквивалент р-кода, названного байт-кодом. Байт-код может выполняться на любой платформе, для которой создана так называемая Java Virtual Machine (Java VM). Очевидно, что Java VM выполняет ту же роль, что и интерпретатор р-кода. Любой компилятор Java создает байт-код, который затем помещается на Web-сайт. Когда браузер Internet встречает страницу с байт-кодом, он загружает его в компьютер и запускает Java VM, которая может быть частью того же браузера или операционной системы.

Но это еще не все. Как уже отмечалось выше, чтобы ускорить выполнение байт-кода, была создана технология JIT (Just In Time). Ее суть в том, что байт-код в процессе выполнения транслируется в машинный код данного процессора и, скажем, если какая-нибудь функция вызывается несколько раз, то после первого прохода и трансляции ее в родной код процессора последующие вызовы будут происходить так же и с той же скоростью, будь эта функция изначально скомпилирована для данного процессора.


Переносимость под угрозой

Чтобы перспективы Java не казались столь уж радужными, на рынке появились компиляторы, способные создавать исполняемые файлы. Очевидно, что вы не сможете поместить такую программу на страницу Web-сайта, но преимущества настоящего EXE-файла в виде более высокой производительности уж очень соблазнительны. Естественно, что возникает вопрос о том, пригоден ли язык Java для создания обычных программ. Мое мнение: да, Java унаследовал всю мощь языка C++ и, в тоже время, оставил за бортом такие спорные и проблематичные концепции, как множественное наследование (заменено более простым и ясным понятием интерфейса) и указатели. Java имеет встроенный сборщик мусора, который существенно упрощает работу с памятью. Ко всему, появление на рынке таких систем как JBuilder от Borland способно дать развитию и использованию Java аналогичный толчок, который получили, в свое время, Pascal и BASIC от Delphi и VB, соответственно.

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

Не так давно Microsoft накликала на себя громы и молнии от поборников чистого Java, выпустив Visual J++. Предназначенная для Windows система программирования просто-напросто "переопределяла" смысл некоторых ключевых слов Java, что позволило получить доступ к интерфейсам так лелеемых Microsoft COM объектов без расширения и изменения самого Java. Очевидно, что пути-дорожки Microsoft и Sun, равно как и их взгляды на будущее Java, серьезно разошлись.

И уж совсем недавно Microsoft предприняла еще один шаг в этом направлении. Если вы раньше создавали приложения для Windows на Java (а не апплеты для Internet), то использование функций Windows API представляло весьма большую проблему. Теперь Microsoft анонсировала технологию J/Direct, позволяющую приложениям на Java обращаться напрямую к функциям Windows API. Технология J/Direct составляет часть недавно вышедшего Internet Explorer 4.0 и способна сделать приложения более мощными при условии, конечно, что вы запускаете их под Windows. Естественным результатом такой политики будет фрагментация рынка Java на разработчиков, использующих "Windows Java", и тех, кто останется верным Pure Java.

Microsoft не раз уже действовала согласно принципу "разделяй и властвуй", разбивая рынок на более мелкие части и поглощая их затем по отдельности. Повторится ли такая история и на этот раз? Многие уверены, что да. Однако я склонен думать несколько иначе. Быть может, в недрах Microsoft существует фракция, вовремя распознавшая потенциал Java, как для Internet, так и за его пределами. И именно эти люди продвигают Java как новый способ создания приложений для Windows. Это предположение только подкрепляется слухами, что перешедший в Microsoft из Borland создатель Borland Pascal и Delphi Anders Hejsberg, приступил к разработке нового проекта "Visual Java".

Андрей КИРЕЕВ,
andreik@gs.minsk.by

Версия для печатиВерсия для печати

Номер: 

46 за 1997 год

Рубрика: 

Software
Заметили ошибку? Выделите ее мышкой и нажмите Ctrl+Enter!