Java Language Architect Brian Goetz о том, как может развиваться Java

Архитектор Java Language Брайан Гетц выступил на саммите JVM в прошлом месяце, выступив с выступлением, которое выглядело в будущее Java.

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

Короче говоря, Гетц объяснил, как он видит, как развивается язык Java.

«Я провел много времени, глядя на то, что сделали другие языки, — сказал Гетц, — и мы чувствуем, что теперь мы пришли к точке, когда у нас есть довольно хорошее представление о том, какой способ мы хотим пойти с этим».

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

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

Философия «выращиваемого» языка

Начиная его разговора, Гетц подчеркнул, что он не говорил о «функциях, которые мы планируем немедленно доставить». Вместо этого он будет смотреть на «более мотивационные примеры» на долгосрочную перспективу. Гетц назвал свой разговор «выращивание языка на яве» — и по душевной причине. Гетц помнит знаменитую газету 1998 года (и разговоры) Sun Microsystems Computer Scientist Guy Steele под названием «выращивание языка».

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

В то время как многие языки позволяют пользователям расширять «словарный запас» через созданные пользователем библиотеки, Стил отметил, что это сложнее, если этот новый словарь не выглядит так же, как и собственные «примитивы» языка. Гетц сказал: «Во многих отношениях эта статья была своего рода стартовым оружием для проекта Valhalla» — проект OpenJDK, начатый в 2014 году, для инкубации новых языковых функций Java, который возглавляет Goetz.

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

«И вот как мы знаем, что мы… прямо посередине».

Представление «свидетелей»: новая концепция для Java

Так какая новая идея? Интерфейсы Java, определяющие метод, назывались «чертежи поведения». Гетц предположил, что теперь «мы хотим делать все, что делают интерфейсы — взять набор именованных поведений и объединить их в названный пакет, что вы можете утверждать, что этот тип соответствует, или эта группа типов соответствует (и позволяет компилятору вводить это)».

Так что есть важная разница. Команда языкового дизайна Java хочет, чтобы это было о типах, а не случаях типов.

«Вместо этого мы хотим перенести это поведение в сторонний объект свидетелей»,-объясняет один слайд.

Предлагается простое, простое ключевое слово — буквальное свидетельство (наряду со способностью «вызвать» свидетеля, говорит Гетц, «просто произнося его тип»).

Так…

Общественный статический окончательный компаратор компаратор =

становится…

Public Static Final Final Sidse Comporator Comporator =

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

Почему бы просто не определить интерфейсы со всеми желаемыми методами, а затем позволить классам реализовать этот интерфейс? Оказывается, это не всегда полезное место для абстракции, сказал Гетц, сталкиваясь с языковыми дизайнерами с множеством хитрых угловых чехлов и «Gotchas».

Следующий слайд Гетца объяснил, что это «действительно использует неправильный инструмент».

«Нам нужно что -то похожее, но не совсем то же самое, что и интерфейсы». Haskell имеет классы типов (которые «абстрактно над типами, а не поведение типов»), в то время как C# и Kotlin «оба проходят через свой собственный набор исследований этого». Сообщество C предложило что -то подобное, называемые формами и расширениями.

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

Возможности роста: потенциальные новые функции Java

Гетц говорит, что эта идея прошла много итераций, но «мы как бы перевели ее на что -то, что вписывается в Java гораздо более чисто, чем некоторые из наших предыдущих идей».

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

  • Новые числовые классы, Но «с поведением во время выполнения примитивов»-как 16-битные номера плавания.
  • Математические операторы. По словам Гетца, использование стандартного знака плюс для ваших переменных float16 «было бы действительно хорошим», а не иметь отдельных методов. Другие языки попытались сделать это так называемое «перегрузка оператора», связывающую символ с несколькими операциями, в зависимости от типа задействованных переменных. Гетц говорит, что это «что -то вроде лингвистического минного поля… ряд языков вылупили различные ароматы бедствий с перегрузкой оператора».
  • Выражения коллекции «Для создания последовательности, похожей на структуру», аналогично тому, что доступно в C#. «Это на уровне« почему бы вам не просто ». Но это кажется жизнеспособным пути, чтобы добраться туда, так как предложение обратно в Java 7 дней не было жизнеспособным путем, чтобы добраться туда».
  • Творческие выражения. При создании массива сегодня значение по умолчанию для его элементов всегда «нулевое» или ноль. Что если бы был свидетель, который мог бы указать, когда есть (и нет) действительное «пустое» значение? В Project Valhalla, говорит Гетц, добавляя проверку достоверности при инициализации массива « — это функция, о которой мы были как бы неуверены», потому что они не хотели добавлять его в виртуальную машину Java (VM). Но «это способ сохранить эту функцию на языке, но позвольте данному классу участвовать в функции, основанной на том, сделали ли они дополнительную работу или нет. Поэтому это означает, что мы можем поставить это поведение в нужном месте, что является хорошим чувством».

Многоцелевое дополнение к языку не без прецедента. Гетц представил два более ранних «заметных примеров языковых функций, предназначенных для расширения библиотеками» — петля Foreach и попытка. Разработчики могут использовать функцию Foreach, просто реализуя итерабильный класс. (Гетц говорит, что разработчики JDK «пошли и модернизировали кучу классов для реализации итерационных»-как и другие разработчики Java.) Но самое главное, это просто «выглядело так, как будто он был встроен».

Гетц был рад, что Java не просто ограничила эту функцию просто несколько очевидных вариантов использования (например, список, карта и установка). «Я действительно рад, что кто -то встал и сказал:« Нет, нет, это действительно важно для других классов, кроме этих нескольких классов магии, чтобы иметь возможность участвовать в этом ».

Гетц сказал, что хочет продолжить эту традицию.

Будущая дорожная карта для эволюции Java

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

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

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

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

Позже комментатор Reddit добавил, что «это был хороший интересный разговор. Я надеюсь, что эти функции приземляются». Но один из последних слайдов Гетца четко объяснил, где мы стоим. «Примерами на предыдущих слайдах являются не дизайны, это идеи».

Тем не менее, в другом комментарии Reddit, Гетц сказал, что дизайнерская команда Java теперь имеет историю, с которой они «удобны», «Так что мы были готовы поделиться ею. Но обратите внимание, это все еще история, и есть много других вещей Valhalla, которые должны произойти первым».

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

Ответ Гетца? «Шш, не говори им!»

Trending Stories youtube.com/thenewstack Tech движется быстро, не пропустите эпизод. Подпишитесь на наш канал YouTube, чтобы транслировать все наши подкасты, интервью, демонстрации и многое другое. Группа подпишитесь с эскизом. Дэвид Кассель — гордый житель района залива Сан -Франциско, где он освещал технологические новости более двух десятилетий. За эти годы его статьи появлялись повсюду от CNN, MSNBC и The Wall Street Journal Interactive … Подробнее от Дэвида Касселя

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *