Предварительное слово ко второму изданию
Платформа Java SE 5.0 представляет собой наибольший набор изменений в истории языка программирования Java. Генераторы, аннотации, автоупаковка и распаковка, типы перечисления, циклы foreach, методы с переменным числом аргументов и статические импорты — все это нововведения с осени 2004 года.
Это Третье издание спецификации языка программирования Java отражает эти изменения. Оно объединяет все изменения, внесенные в язык программирования Java с момента публикации Второго издания в 2000 году, включая утверждения из J2SE 1.4.
Язык программирования Java значительно вырос за эти четыре года. К сожалению, нереально уменьшить коммерчески успешный язык программирования, — только чтобы он рос все больше и больше. Задача управления этим ростом в рамках ограничений совместимости и противоречивых требований широкого спектра применений и пользователей — нетривиальна. Я только надеюсь, что мы успешно справились с этой задачей с помощью данной спецификации; время покажет.
Эта спецификация опирается на усилия многих людей, как в Sun Microsystems, так и за ее пределами.
Наиболее важный вклад внесли люди, которые фактически превращают спецификацию в реальное программное обеспечение. К числу ведущих из них относятся разработчики javac, эталонного компилятора для языка программирования Java.
Ниал Гафер был «мистером javac» в критический период, в котором были интегрированы и поставлены в производство значительные изменения, описанные здесь. Преданность и производительность Ниала можно честно охарактеризовать как героические. Без него мы фактически не смогли бы завершить эту задачу. Кроме того, его проницательность и мастерство внесли огромный вклад в разработку новых функций языка.
Ниал перешёл к новым задачам, и ему на смену пришёл Петер фон дер Ахе, который продолжает совершенствовать и укреплять реализацию. До участия Ниала Билл Мэддокс отвечал за javac при завершении предыдущего издания и курировал такие функции, как генераторы и утверждения на ранних этапах.
Ещё один человек, заслуживающий особого упоминания, — это Джошуа Блок. Джош участвовал в бесконечных дискуссиях по разработке языка, возглавлял несколько экспертных групп и был ключевым участником платформы Java. Можно с уверенностью сказать, что Джош и Ниал заботятся об этой книге больше, чем я сам!
Различные части спецификации были разработаны различными экспертными группами в рамках процесса Java Community Process.
Наиболее широко распространённые изменения языка являются результатом JSR 14, Добавление генераторов в язык программирования Java. Членами экспертной группы JSR 14 были Норман Коэн, Кристиан Кемпер, Мартин Одерски, Крёстен Краб Торруп, Филип Вадлер и я сам. На ранних этапах членами также были Свен-Эрик Паниц и Стив Маркс. Все заслуживают благодарности за их участие.
JSR 14 представляет собой беспрецедентную попытку существенно расширить систему типов широко используемого языка программирования в соответствии с очень жёсткими требованиями к совместимости. Длительный и сложный процесс проектирования и реализации привел нас к текущему расширению языка. Задолго до запуска JSR по генераторам Мартин Одерски и Филип Вадлер создали экспериментальный язык под названием Pizza для изучения связанных идей. Весной 1998 года я и Дэвид Стоутамир начали сотрудничество с Мартином и Филипом на основе этих идей, что привело к GJ. Когда была создана экспертная группа JSR 14, GJ был выбран в качестве основы для расширения языка программирования Java. Мартин Одерски реализовал компилятор GJ, и его реализация стала основой javac (начав с JDK 1.3, даже несмотря на то, что генераторы были отключены до 1.5).
Теоретическая основа ядра системы типов генераторов обязана знаниям Мартина Одерски и Филипа Вадлера. Позже система была расширена с помощью универсальных параметров. Они были основаны на работах Ацуси Игараси и Мирко Вироли, которые, в свою очередь, опирались на более раннюю работу Крёстена Торрупа и Мадса Торгёрсена. Универсальные параметры были изначально спроектированы и реализованы в рамках сотрудничества между Sun и Аархусским университетом. С нашей стороны в Sun участвовали Ниал Гафер и я сам, а Эрик Эрнст и Мадс Торгёрсен, совместно с Питером фон дер Ахе и Кристианом Плеснером-Хансеном, представляли Аархусский университет. Спасибо Оле Лерманну-Мадсену за возможность и поддержку этой работы.
Джо Дарси и Кен Расселл реализовали большую часть конкретной поддержки рефлексии генераторов. Ниал Гафер, Джош Блок и Марк Рейнхольд провели огромную работу по генерализации библиотек JDK.
Заслуживают упоминания люди, чьи комментарии к проектированию генераторов внесли значительный вклад. Алан Джеффри внес решающий вклад в JSR 14, указав на тонкие недостатки первоначальной системы типов. Боб Дин предложил синтаксис «? super T» для нижних ограниченных универсальных параметров.
JSR 201 включал ряд изменений: автоупаковку, перечисления, циклы foreach, методы с переменным числом аргументов и статический импорт. Членами экспертной группы JSR 201 были Седрик Беуст, Дэвид Бисак, Джошуа Блок (сопредседатель), Корки Картрайт, Джим дес Ривьерс, Дэвид Фланаган, Кристиан Кемпер, Дуг Ли, Чангшин Ли, Тим Пейерлс, Мишель Трудо и я (сопредседатель). Перечисления и цикл foreach были разработаны в основном Джошем Блоком и Ниалом Гафером. Методы с переменным числом аргументов никогда бы не попали в язык программирования Java без особых усилий Ниала по их разработке (не говоря уже о небольшой проблеме их реализации).
Джош Блок смело взял на себя ответственность за JSR 175, который добавлял аннотации в язык программирования Java. Членами экспертной группы JSR 175 были Седрик Беуст, Джошуа Блок (председатель), Тед Фэррелл, Майк Френч, Грегор Кицалес, Дуг Ли, Диптанджу Майджундер, Саймон Нэш, Тед Ньюард, Роли Перера, Манфред Шнайдер, Блейк Стоун и Джош Стрит. Как обычно, Ниал Гафер также внес большой вклад в этот вопрос.
Ещё одно изменение в этом издании — полная переработка модели памяти Java, осуществлённая в рамках JSR 133. Членами экспертной группы JSR 133 были Ханс Бойм, Дуг Ли, Тим Линдхольм (сопредседатель), Билл Пуг (сопредседатель), Мартин Тротер и Джери Шварц. Основные технические авторы модели памяти — Сарита Адве, Джерри Мансон и Билл Пуг. Глава о модели памяти Java в этой книге фактически почти полностью принадлежит их работе, с лишь редакционными правками. Джозеф Боубир, Дэвид Холмс, Виктор Лучанго и Ян-Виллем Маессен также внесли значительный вклад. Ключевые разделы, касающиеся финализации в главе 12, также во многом обязаны этой работе, и особенно Дугу Ли.
Многие люди предоставили ценные комментарии к этому изданию.
Я хотел бы выразить свою благодарность Арчибальду Путту за его проницательность и поддержку. Его произведения всегда вдохновляют. Ещё раз спасибо Джо Дарси за то, что он нас познакомил, а также за много полезных комментариев и его конкретный вклад в вопросы чисел и разработку шестнадцатеричных литералов.
Многие коллеги в Sun (прошлого или нынешнего) предоставили полезные отзывы и дискуссии, и помогли создать эту работу различными способами: Эндрю Беннетт, Мартин Бюхольц, Джери Дрисколл, Роберт Филд, Джонатан Гиббонс, Грэм Гамильтон, Мими Хиллс, Джим Холмлунд, Джет Коэниг, Джефф Нортон, Скотт Селлигман, Вэй Тао и Дэвид Унгар.
Особая благодарность Лори Толсон, моему руководителю, за поддержку на протяжении всего длительного процесса разработки этих спецификаций.
Следующие люди предоставили много ценных комментариев, которые внесли вклад в эту спецификацию: Скотт Аннаниан, Мартин Бравенбоер, Брюс Чэпмен, Лоуренс Гонсалвес, Тим Хансон, Дэвид Холмс, Ангелика Лангер, Пат Лаварр, Филипп Муле и Кэл Варнсон.
Энн Селлерс, Грег Доенч и Джон Фуллер из Addison-Wesley проявили невероятное терпение и позаботились о том, чтобы книга была издана, несмотря на многочисленные пропущенные сроки для этого текста.
Как всегда, я благодарю мою жену Вэйхонг и моего сына Теву за их поддержку и сотрудничество.
© Oracle and/or its affiliates. All rights reserved.
Licensed under the Oracle Technology Network License Agreement.