Для написания межплатформной программы необязательно использовать сам язык Java

 

Становится все более очевидным, что инструменты разработки на Java, подобные Applet Designer 1.0 Professional корпорации TVObjects, развиваются в направлении обеспечения программистов возможностью создавать Java-аплеты без знания самого Java. Эти инструменты принимают программы, написанные на различных языках (в случае Applet Designer это Visual Basic), и генерируют код на Java. В дальнейшем этот код может быть обработан обычными Java-инструментами, например компилятором javac фирмы Sun Microsystems.

 

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

 

Виртуальная машина Java, подобная той, что используется в Web-браузерах Navigator корпорации Netscape Communications и Internet Explorer корпорации Microsoft, не обращает внимания на исходный код. Она работает со скомпилированным файлом с расширением .class, содержащим двоичный код Java, и ее не заботит язык, применявшийся для генерации этого кода.

 

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

 

Эта “волшебная” величина  -  11001010111111101011101010111110  -  двоичное число. Оно выглядит взятым с потолка, но на самом деле скрывает в себе тонкую шутку профессионалов. Если за основание взять 16 и для значений от 10 до 15 использовать буквенные символы от А до F, то число превратится в слово CAFEBABE. И это не розыгрыш.

 

Вслед за другими, менее экзотическими информационными полями (например, полями кода версии), предназначенными в перспективе для сохранения совместимости с будущими усовершенствованиями Java, в файле с расширением .class размещаются команды виртуальной машины. Эти команды управляют стеками данных.

 

Например, когда Java складывает два целых числа, она помещает их в стек, а затем выдает команду iadd (целочисленное суммирование). Виртуальная машина отслеживает типы чисел в стеке и не позволяет проводить недопустимых операций, скажем использовать команду “iadd” для не целых величин.

 

Как и двоичные команды процессора х86, поток байтов, управляющий виртуальной машиной Java, может быть сгенерирован чем угодно, включая даже код, введенный вручную. Число инструментов, нацеленных непосредственно на виртуальную машину без промежуточного преобразования в исходный код на Java, будет расти по мере увеличения числа Java-инсталляций и приближения скорости работы виртуальных машин Java к скорости исполнения “родного” кода.

 

Питер Коффи, Тестовый центр PC Week Labs

 

Правила работы Java-машины

 

- Байтовые коды можно генерировать с конверсией исходного текста на Java или без нее

 

- Java-файлы с расширением .class содержат код версии и команды виртуальной машины

 

- Команды виртуальной машины  -  специфические для каждого типа данных

 

- Принудительное согласование типов  -  часть внутренних средств защиты Java