Краткое руководство о том, как играть самому с помощью сборок раннего доступа Project Valhalla и IntelliJ

Несколько дней назад проект Valhalla выпустил сборку в раннем доступе. Я начал экспериментировать с инструментами командной строки, но когда я попытался настроить IntelliJ, я обнаружил, что это намного проще, чем я ожидал. Поэтому я делюсь инструкциями здесь на случай, если они могут быть полезны кому-то еще.

Прежде всего, что такое Project Valhalla и L-World? Вероятно, это будет самое серьезное изменение в Java в ближайшем будущем. Изменение размером с лямбды или модульную систему: введение типов значений.

Это лучшее описание, которое я нашел:

Типы значений предназначены для того, чтобы быть третьей формой типа данных, доступной в некоторых будущих версиях Java, в дополнение к двум существующим в настоящее время: примитивным типам и ссылкам на объекты. Чаще всего используется фраза о том, что типы значений Java должны кодировать как класс, работать как int. Это означает, что они должны быть составным типом данных (код, подобный классу), но не иметь идентичности и не оплачивать стоимость заголовка объекта, если это вообще возможно (работать как int).
Бен Эванс (@ kittylyst)

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

Но поскольку нам надоедают длинные объяснения, перейдем непосредственно к инструкциям.

Сначала вам нужно посетить официальный сайт и загрузить модифицированный jdk для J11:

Http://jdk.java.net/valhalla/

Щелкните свою архитектуру и загрузите tar.gz. Я провел тест на Linux-боксе с ubuntu 16.04 в качестве справки.

После того, как вы загрузите файл tar.gz, вы должны распаковать его в тот же каталог, что и другие JDK. Он получил невзрачное имя jdk-11, поэтому я переименовал его.

Поскольку вы это сделали, вы уже выполнили самую сложную часть, теперь вам нужно только открыть IntelliJ и создать новый проект командной строки Java. Нет необходимости устанавливать JAVA_HOME или другие переменные окружения.

В настройках проекта нажмите кнопку нового SDK и выберите каталог, который вы только что извлекли. В поле со списком должно быть указано «11».

Затем вы выбираете функции X-Experimental в качестве языкового уровня проекта.

Теперь вы можете создавать свои типы значений и использовать их в своем проекте!

Если хотите, можете скопировать мой код здесь

Https://github.com/uberto/testValueTypes

Это главное:

А это тип значения точки:

Хотя редактор показывает (временный) новый синтаксис красным цветом, он компилируется и запускается без проблем.

При объявлении типа значения необходимо указать модификатор __ByValue перед именем класса.

Обратите внимание, что для создания нового экземпляра типа значения следует использовать не ключевое слово new, а __MakeDefault и __WithField для возврата измененного экземпляра.

Для запуска кода не забудьте указать параметр -XX: + EnableValhalla VM следующим образом:

Другие возможные варианты перечислены здесь:
https://wiki.openjdk.java.net/display/valhalla

Теперь вы начинаете экспериментировать, я обновлю свои выводы в этом блоге.

Особенно интересно сравнить производительность выделения памяти и то, как работают массивы. В будущем для ValueTypes также появятся обобщенные дженерики.

Пока что меня удивляют две вещи: == не работает с типами значений (я полагаю, что в конечном итоге будет) и new действительно работает (я полагаю, что не будет).

В любом случае действительно здорово иметь возможность уже поиграть с этим!