Sun Microsystems продолжает совершенствовать свой язык программирования
Саймон Риттер описывает техническое совершенство и большие перспективы Java

«Программное обеспечение Java сейчас установлено практически на всех компьютерах мира», — уверял собравшихся на Java Developer Day Саймон Риттер, пропагандист технологий компании Sun Microsystems. Впрочем, область применения этой технологии не ограничивается «классическими» компьютерами, поскольку Java может работать и на мобильных телефонах, которых сейчас уже больше, чем ПК, и на КПК, и даже на смарт-картах. По оценкам Sun, с Java имеет дело уже около 3 млн. разработчиков. Понятно, что изменения в столь значимой программной технологии в состоянии оказать самое серьезное влияние на рынок. Основная задача совершенствования Java — упростить процесс разработки настолько, чтобы этим языком могли воспользоваться массовые корпоративные разработчики. Этой задаче подчинено и создание новых версий технологии Java, и совершенствование средств разработки.

В версии Java 1.5 (она, похоже, будет переименована в 5.0) в Sun планируют добавить в язык целый ряд новых возможностей. Изменения позволят компилятору создавать более эффективный байт-код, обнаруживая еще на этапе компиляции некоторые ошибки, прежде проявлявшиеся уже при исполнении программ. При этом байт-код в большинстве случаев оказывается обратно совместимым с ранее созданными виртуальными машинами Java: приложение, разработанное и откомпилированное при помощи Java Development Kit (JDK) 1.5, будет — возможно, с определенными ограничениями — работать и на более ранних версиях машин.

В Java 1.5 появится автоматическое преобразование объектов простых типов в соответствующие объекты-«обертки» и обратно. Скажем, тип int там, где это необходимо, преобразуется в Integer, а потому для соответствующих переменных можно вызывать методы обработки. Планируется добавить возможность статического импорта библиотек, что позволит в процессе компиляции экспортировать в программу фрагменты кода из стандартных или внешних библиотек. Новой особенностью Java будет автоматическая нумерация множеств, при которой каждому элементу присваивается целочисленное значение. При этом в памяти хранится не имя элемента, а его значение. Однако использование таких множеств делает байт-код привязанным к Java 1.5, поскольку он не будет работать на ранних ее выпусках. Планируется также реализовать поддержку функций с переменным числом параметров.

Существенным расширением возможностей языка станет добавление конструкции Generic, которая позволит ограничивать допустимые типы объектов для коллекций (list, map и т. п.) вместо того, чтобы использовать преобразование типов при извлечении из них объектов. По семантике эта конструкция напоминает шаблоны С++, но ограничена процессом компиляции. Появится новый вариант цикла for, который исполняет свое тело для каждого значения переменной из коллекции. Еще одна новая возможность — процедура извлечения метаданных.

Изменения затронут и стандартные библиотеки, поставляемые в составе JDK. В частности, появление методов с переменным числом аргументов позволило наконец реализовать функцию форматированного вывода printf в виде, привычном для программистов на Си/С++. Изменились и механизмы работы в многозадачном режиме; в частности, появилась возможность управлять приоритетами потоков и при помощи интерфейса Сallable взаимодействовать с дочерним процессом. В новой библиотеке реализована поддержка Unicode, хотя тип char по-прежнему остается шестнадцатеричным.

Изменяется и сама виртуальная машина. В частности, в ней появляются механизмы самонастройки подсистемы работы с динамической памятью и возможность контролировать работу «сборщика мусора». Улучшена масштабируемость подсистемы памяти, производительность которой тестировалась на компьютерах с емкостью оперативной памяти до 500 Гбайт. Новая виртуальная машина приобретает возможность распределенной обработки классов, то есть сможет перемещать классы с одной Java-машины на другую. Кроме того, виртуальная машина будет обрабатывать фатальные ошибки, не прекращая своей работы.


Java движется вперед

В развитии технологии Java начинается новый этап. Новая версия будет отражать существенные дополнения в языке программирования, связанные с использованием метаданных, родовых типов, перечислений с сохранением типа и автоматического преобразования простых типов данных. Кроме того, будет создана новая виртуальная машина Java и новые интерфейсы Monitoring and Management API.

По словам Джеймса Гослинга, которого называют «отцом Java», эти изменения свидетельствуют о большом скачке в совершенствовании языка программирования.

Уже в четвертом квартале текущего года Sun Microsystems намерена выпустить комплект разработчика Java Development Kit 1.5.

«Поддержка метаданных позволит аннотировать фрагменты кода, создавая код, содержащий самоописание», — подчеркнул Гослинг. Метаданные представляют собой особенность языка, которая избавит разработчиков от написания стандартных фрагментов кода. Специальный инструментарий будет генерировать программный код автоматически по аннотациям, содержащимся в исходных текстах.

Таким образом можно будет реализовать «декларативный» стиль программирования, при котором программист объявляет, что должна делать программа, а инструментарий порождает код, который выполняет поставленную задачу. Метаданные избавят программистов и от необходимости поддерживать в актуальном состоянии разного рода «побочные файлы», в которых должны отражаться все изменения в исходных текстах. Вместо этого такая информация может поддерживаться непосредственно в файлах с кодом.

Еще одно чрезвычайно важное дополнение — механизм родовых типов (generic), усовершенствование в системе типов, позволяющее типу или методу действовать с объектами различных типов, при этом на этапе компиляции обеспечивая корректность типов. Одновременно это избавляет и от необходимости приведения типов.

Перечисление с сохранением типа — это гибкий, объектно-ориентированный вариант перечисления, который позволяет программистам создавать перечисляемые типы с произвольными методами и полями. Следует отметить также новый механизм — автоматическое приведение (autoboxing), который избавит программистов от нудной работы, связанной с преобразованием вручную между примитивными типами и типами-«обертками» (wrapper).

Преобразование между примитивными типами, такими как int или boolean, и их объектными эквивалентами Integer и Boolean может потребовать написания значительного по объему, но необязательного кода, особенно в том случае, если, к примеру, это нужно только для вызова метода из Collections API. В JDK 1.5 преобразование, к примеру, между int и Integer вменяется в обязанность компилятору.

Чтобы максимально расширить сферу применения Java, Гослинг рекомендовал шире использовать интегрированные среды разработки, которые могут оказать помощь в течение всего процесса создания программы.

«Подобные инструментальные средства есть практически на все случаи жизни», — заметил Гослинг. В первую очередь он рекомендует среду разработки NetBeans.

— Луис Чуа, Служба новостей IDG, Сингапур