Беседы о программировании

 

В апреле я высказал предположение, что виртуальная машина Java (JVM) станет платформой для разработки и на других языках, а не только Java. Это вызвало усмешку у некоторых читателей. "Не отрывайтесь от жизни"  -  вот один из печатных комментариев.

 

Однако в начале мая пришли сообщения от IBM, Microsoft, Apple и Novell о том, что они собираются встроить JVM в качестве системной услуги в OS/2, AIX, MVS, Win32, MacOS, NetWare и даже в Notes. Идея о Java как о платформе выглядит сейчас даже более обещающей.

 

Подобно тому как компиляторы Си++, Модулы-2, Фортрана и более экзотических языков работают на Intel-совместимых ПК и генерируют программы в кодах х86, средства синтаксического анализа различных языков и механизмы оптимизации могут создавать байт-код Java.

 

Одним из доказательств этой концепции является проводимое фирмой Intermetrics открытое бета-тестирование. Фирма предложила технологию отображения языка Ада 95 в набор команд JVM. Теперь я могу вам сообщить Web-адрес: http://www.inmet.com/javadir/download/.

 

Там вы найдете превосходный документ, подготовленный разработчиком из Intermetrics Такером Тефтом для презентации на форуме Ada Europe’96. В нем обсуждается внутренняя структура JVM и вопросы трансляции любого языка программирования под JVM.

 

"Набор команд JVM,  -  заметил Тэфт,  -  аналогичен интерпретируемому байт-коду с использованием стеков, применяемому в языках, подобных Smalltalk... Однако набор команд JVM имеет дополнительные возможности для поддержки специальных средств безопасности Java и большей эффективности. Например, вместо независимых от типа данных команд "load word" или "store word" в байт-коде предусмотрены отдельные операции для загрузки адресов и целых чисел... Необходимо сохранять информацию о типе данных в процессе трансляции, а не отбрасывать ее после выполнения семантической проверки".

 

Это потребует создания дополнительных структур данных.

 

Язык Ада 95, сочетающий объектный подход и поддержку потоков,  -  очевидный кандидат для этой стратегии. Менее очевидный выбор  -  это язык REXX корпорации IBM, но я также могу указать адрес, по которому находится информация о новом гибриде NetRexx: http://www2.hursley.ibm.com/netrexx/.

 

Как и классический REXX, NetRexx  -  это язык, выполняющий простые операции с помощью простого кода. Его внутренние средства синтаксического анализа позволяют создавать рекурсивные конструкции, подобно LISP, для обработки списка слов неизвестной длины, облегчающие ввод в свободном формате. Он управляет текстовыми и математическими операциями с помощью средств манипуляции строками и автоматически преобразует данные в тип, необходимый для Java.

 

Альтернативы, предлагаемые фирмой Intermetrics или корпорацией IBM, не являются взаимно исключающими по отношению друг к другу или к языку Java фирмы Sun. Как NetRexx, так и трансляция Ада 95 обеспечивают полное взаимодействие между классами Java, абстрактными типами данных Ада, методами NetRexx и т. п.

 

Увидим ли мы когда-нибудь виртуальную машину JVM, реализованную в кристалле? Фирма Sun это обещала, но непонятно, насколько это будет полезно. Онлайновые компиляторы байт-кода от Symantec и Borland уже обеспечивают производительность, близкую к Си++, а Borland к тому же и лицензирует эту технологию.

 

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

 

Но всякий раз, когда я думаю, что был слишком решительным, реальность показывает, что я был слишком робок. Некоторые революции действительно происходят.

 

Питер Коффи