Краткое руководство о том, как играть самому с помощью сборок раннего доступа Project Valhalla и IntelliJ
Несколько дней назад проект Valhalla выпустил сборку в раннем доступе. Я начал экспериментировать с инструментами командной строки, но когда я попытался настроить IntelliJ, я обнаружил, что это намного проще, чем я ожидал. Поэтому я делюсь инструкциями здесь на случай, если они могут быть полезны кому-то еще.
Прежде всего, что такое Project Valhalla и L-World? Вероятно, это будет самое серьезное изменение в Java в ближайшем будущем. Изменение размером с лямбды или модульную систему: введение типов значений.
Это лучшее описание, которое я нашел:
Типы значений предназначены для того, чтобы быть третьей формой типа данных, доступной в некоторых будущих версиях Java, в дополнение к двум существующим в настоящее время: примитивным типам и ссылкам на объекты. Чаще всего используется фраза о том, что типы значений Java должны кодировать как класс, работать как int. Это означает, что они должны быть составным типом данных (код, подобный классу), но не иметь идентичности и не оплачивать стоимость заголовка объекта, если это вообще возможно (работать как int).
Бен Эванс (@ kittylyst)
В Интернете есть много ресурсов по этому поводу, и очень интересно иметь возможность следить за проектом от первых обсуждений до текущих повседневных деталей реализации в списках рассылки и обсуждениях.
Но поскольку нам надоедают длинные объяснения, перейдем непосредственно к инструкциям.
Сначала вам нужно посетить официальный сайт и загрузить модифицированный jdk для J11:
Щелкните свою архитектуру и загрузите 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 действительно работает (я полагаю, что не будет).
В любом случае действительно здорово иметь возможность уже поиграть с этим!