Spec-Zone .ru
спецификации, руководства, описания, API
Содержание | Предыдущий | Следующий | ИндексСпецификация Виртуальной машины JavaTM


Сводка Разъяснений и Поправки


Это приложение обсуждает различия между оригинальной версией Спецификации Виртуальной машины JavaTM и существующей версией. Его цель является двукратной: суммировать, что изменения были произведены и объяснить, почему они были сделаны.

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

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

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

Самые очевидные изменения находятся в спецификации типов с плавающей точкой и операций; class проверка файла; инициализация, загрузка, и соединение; и инструкции вызова метода. Кроме того, несколько других важных исправлений были сделаны.

Пересмотренная спецификация также ошибки исправлений или разъясняют проблемы, на которые обратили наше внимание читатели исходной спецификации.

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

Следующие разделы обсуждают изменения к исходной спецификации более подробно и объясняют, почему изменения были необходимы.


Типы с плавающей точкой и Операции

Исходная спецификация, требуемая, что весь сингл - и плавающая точка двойной точности - вычисления вокруг их результатов к единственному IEEE 754 - и форматы двойной точности, соответственно. Пересмотренная спецификация разрешает дополнительным вычислениям с плавающей точкой быть сделанными, используя форматы расширенной точности IEEE 754.

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


Изменения к class Проверка файла

Самое важное разъяснение на теме class проверка файла состоит в том, что каждая реализация виртуальной машины Java должна фактически выполнить проверку. Это утверждается однозначно в Спецификация языка JavaTM. Исходная спецификация виртуальной машины Java, содержавшей несколько вводящих в заблуждение предложений, которые привели некоторых читателей приходить к заключению, что проверка была дополнительной.

Обсуждение class формат файла в Главе 4 также исправляет много маленьких ошибок в исходной спецификации. Старшие значащие из этих исправлений:

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


Инициализация

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

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

Одно из исходных требований было то, что класс будет инициализирован в первый раз, когда один из его конструкторов вызывается. В языке программирования Java вызов конструктора составляет создание экземпляра. Кроме того, так как никакой метод экземпляра не может быть вызван, если никакие экземпляры не существуют, это является четким, для которого требование, чтобы класс быть инициализированным в первый раз один из его методов был вызван, важно только static методы. Подобным рассуждением, требование, чтобы класс быть инициализированным, если к какому-либо из его полей получают доступ, применялся только к static поля.

Исходная спецификация точно не описывала обстоятельства, которые инициируют инициализацию на уровне виртуальной машины Java (см. обсуждение позже в этом приложении). Разделите 5.5, теперь дает простое и точное определение с точки зрения инструкций виртуальной машины Java.


Загрузка и Соединение

Глава 5, "Загрузка, Соединение, и Инициализация," была полностью переписана (и повторно названа). Глава 5 исходной спецификации была ошибочна в нескольких важных отношениях. Новая глава исправляет эти ошибки и пытается быть и более четкой и более точной. Организация пересмотренной главы близко следует за структурой соответствующих разделов в Главе 12 Спецификации языка JavaTM.

Ключевые изменения включают следующее:


Изменения к Вызову метода

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

    void bar(A a) {a.foo();} 

Вложенные Классы

Вложенные классы были введены в язык программирования Java после того, как исходная спецификация виртуальной машины Java и первый выпуск Спецификации языка Java были напечатаны. Innerclasses и Synthetic атрибуты, описанные в пересмотренной спецификации в Разделе 4.7.5 и Разделе 4.7.6, соответственно, были добавлены в выпуске 1.1 JDK, чтобы поддерживать вложенные классы.

К сожалению, мы не были в состоянии включать описание вложенных классов в кратком обзоре языка программирования Java, данном в Главе 2. Полное описание будет включено в следующего выпуск Спецификация языка JavaTM. До тех пор сошлитесь на документацию относительно всемирной паутины в http://java.sun.com/products/jdk/1.1/docs/guide/innerclasses.


Глава 9 Исходной Удаленной Спецификации

Глава 9, "Оптимизация," из исходной спецификации, задокументированной, метод оптимизации используется в современной реализации виртуальной машины Java Sun. Исходная спецификация была четкой, что эта глава и метод, который это описало, не были частью спецификации виртуальной машины Java. Однако, глава, обеспеченная пример гибкости, которую спецификация виртуальной машины Java намеревается дать конструкторам. Эту информацию о реализации Sun также считали возможно полезной для писателей инструментов, таких как отладчики.

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


Другие Проблемы


Содержание | Предыдущий | Следующий | Индекс

Спецификация Виртуальной машины JavaTM
Авторское право © Sun Microsystems, Inc 1999 года. Все права защищены
Пожалуйста, отправьте любые комментарии или исправления к jvm@java.sun.com

free hit counter