Предварительное слово к изданию Java SE 8
В 1996 году Джеймс Гослинг, Билл Джой и Гай Стил написали для первого издания Спецификации языка Java®:
"Мы считаем, что язык программирования Java – это зрелый язык, готовый к широкому применению. Тем не менее, мы ожидаем дальнейшего развития языка в ближайшие годы. Мы намерены управлять этим развитием таким образом, чтобы оно было полностью совместимо с существующими приложениями."
Java SE 8 представляет собой самое значительное развитие языка Java за всю его историю. Относительно небольшое число функций – лямбда-выражения, ссылки на методы и функциональные интерфейсы – объединяются, чтобы предложить модель программирования, которая объединяет объектно-ориентированный и функциональный стили. Под руководством Брайана Гоца это слияние было достигнуто таким образом, что поощряются лучшие практики – неизменяемость, отсутствие состояния, композиционность – сохраняя при этом «ощущение Java» – удобочитаемость, простоту, универсальность.
Существенно, что библиотеки платформы Java SE развивались параллельно с языком Java. Это означает, что использование лямбда-выражений и ссылок на методы для представления поведения – например, операции, которая должна применяться к каждому элементу в списке – продуктивно и эффективно «из коробки». Аналогичным образом, виртуальная машина Java развивалась параллельно с языком Java, чтобы гарантировать, что методы по умолчанию поддерживают эволюцию библиотек максимально согласованно во время компиляции и выполнения, учитывая ограничения отдельной компиляции.
Инициативы по добавлению функций первого класса в язык Java существуют с 1990-х годов. Предложения BGGA и CICE примерно в 2007 году привнесли новую энергию в эту тему, в то время как создание проекта Project Lambda в OpenJDK примерно в 2009 году вызвало беспрецедентный уровень интереса. Добавление обработчиков методов в JVM в Java SE 7 открыло путь к новым методам реализации, сохраняя при этом «написано один раз, работает везде». Со временем изменения в языке контролировались JSR 335, Лямбда-выражения для языка программирования Java, экспертная группа которого состояла из Джошуа Блока, Кевина Буриллиона, Андрея Бреслава, Реми Форакса, Дэна Хайдинга, Дуга Ли, Боба Ли, Дэвида Ллойда, Сама Пуллары, Шриканта Санкара и Владимира Захарова.
Проектирование языка программирования обычно включает в себя борьбу со степенями сложности, которые полностью скрыты от пользователей языка. (По этой причине его часто сравнивают с айсбергом: 90% его скрыты от глаз.) В JSR 335 наибольшая сложность скрывалась во взаимодействии неявно типизированных лямбда-выражений с разрешением перегрузки. В этой и многих других областях Дан Смит из Oracle проделал выдающуюся работу по подробному определению желаемого поведения. Его слова встречаются на протяжении всей этой спецификации, включая совершенно новую главу по выводу типов.
Еще одной инициативой в Java SE 8 было повышение полезности аннотаций – одной из самых популярных функций языка Java. Во-первых, грамматика Java была расширена, чтобы разрешить аннотации типов во многих конструкциях языка, создавая основу для новых инструментов статического анализа, таких как Checker Framework. Эта функция была специфицирована JSR 308, Аннотации на типах Java, под руководством Майкла Эрнста с экспертной группой из меня, Дуга Ли и Шриканта Санкара. Изменения, связанные с этой спецификацией, были широкомасштабными, и неустанные усилия Майкла Эрнста и Вернера Дидля на протяжении многих лет тепло признаются. Во-вторых, аннотации могут быть «повторены» на конструкции языка, что очень полезно для API, которые моделируют конфигурацию предметной области с типами аннотаций. Майкл Кит и Билл Шэннон в Java EE инициировали и направляли эту функцию.
Многие коллеги из группы Java Platform в Oracle оказали ценную поддержку этой спецификации: Леонид Арбузов, Мэнди Чун, Джо Дарси, Роберт Филд, Йоэль Борггрен-Франк, Сонали Гоэль, Джон Гиббонс, Жаннетт Хун, Стюарт Маркс, Эрик МакКоркл, Матерей Нуньес, Марк Рейнольд, Висенте Ромеро, Джон Роуз, Жорж Сааб, Стив Сайдс, Бернард Траверсат и Мишель Трудо.
Возможно, наибольшую благодарность заслуживают инженеры-компиляторы, которые превращают спецификацию в реальное программное обеспечение. Маурицио Чимадаморе из Oracle с самого начала самоотверженно работал над разработкой лямбда-выражений и их реализацией в javac. Поддержка функций Java SE 8 в Eclipse была внесена Джеяпракашем Артанаресвараном, Шанхой Баннерджи, Анирбаном Чакроборти, Эндрю Клементом, Штефаном Херманном, Маркусом Келлер, Джеспером Мёллером, Маножем Палатом, Шрикант Санкаран и Оливье Томанном; а в IntelliJ – Анной Козловой, Алексеем Кудрявцевым и Романом Шевченко. Они заслуживают благодарности всего сообщества Java.
Java SE 8 – это возрождение для языка Java. В то время как некоторые ищут «следующий великий язык», мы считаем, что программирование на Java более увлекательно и продуктивно, чем когда-либо. Мы надеемся, что оно будет служить вам долго и надежно.
© Oracle and/or its affiliates. All rights reserved.
Licensed under the Oracle Technology Network License Agreement.