Беседы о программировании
В апреле я высказал предположение, что виртуальная машина 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 к тому же и лицензирует эту технологию.
Признаюсь, меня ошеломило такое стремительное развитие событий. Я спрашивал себя, оказался ли я участником развернувшейся вокруг этого шумихи или предупредил вас о чем-то действительно важном.
Но всякий раз, когда я думаю, что был слишком решительным, реальность показывает, что я был слишком робок. Некоторые революции действительно происходят.
Питер Коффи