Комментарии 21
Примитивные типы те, что нативно обрабатываются процессором. Так что комплексные не станут нативными. Вот SSE и тому подобное можно бы ввести в виде расширений языка. В Си такое есть, про Java не знаю.
есть. гугли 1BRC challenge
Векторный API уже доступен в Java начиная с 17 LTS (с 16 как preview).
Я то думал они хотят нативный AoT обеспечить.
То есть они хотят сделать аналог структур C# двадцатилетней давности?
Да, по смыслу похоже на это. Единственное что я не уверен, что в С# в ссылке на структуру не может быть null.
Плюс стереть границы между примитивными типами из коробки и тем, что пользователь может сделать сам. Плюс по-моему специализация дженериков там же прилагается.
It is not a goal to guarantee any particular optimization strategy or memory layout. This JEP enables many potential optimizations; only some will be implemented initially. Future JEPs will pursue optimizations related to
null
exclusion and generic specialization.
Пока не прилагается. Если мне не изменяет память, в предыдущей версии прилагалось (которая оказалась настолько сложной, что лично мне хотелось плакать, глядя на изменения в спецификациях).
По эффекту: да. Но путь совсем другой. Точнее первые десять лет потратили на то, чтобы сделать как в С#. К счастью, в результате поняли, что сова в процессе натяжения на глобус может лопнуть и сделали всё совсем с другой стороны.
Я так понимаю просто решили заимплементировать value-types из С#?
Стремление сохранить обратную совместимость любой ценой дорого обходится Java. И вопрос, так ли уж это нужно, в общем, внятного ответа не имеет. Или я его не вижу. Смысл тащить за собой атавизмы и родовые травмы первых версий?
Обратная совместимость, пожалуй, одна из главных причин успеха Java как платформы.
Думаю, что это уже давно не так. Сама Java может быть, и совместима (но это не точно, помню, была какая-то мелкая проблема несовместимости стандартной библиотеки с переходом с 7 на 8). Но самые популярные библиотеки и фреймворки регулярно депрекейтят и выпиливают/перепиливают функциональность. В итоге на обновлениях все равно нужно корректировать код. Практически все современные языки делают это, и чаще всего все более или менее довольны (хотя в истории с переходом Python с 2 на 3 реакция комьюнити вызвала у меня некоторое недоумение, хотя, в принципе, это объяснимо). Язык должен развиваться. И, если я правильно понимаю, Valhalla тянет за собой как изменения байт-кода, так и синтаксиса.
Спасибо за статью. Маленькое замечание
В результате ArrayList не может хранить int[] — приходится заворачивать числа в Integer[].
Технически, в ArrayList всегда создается Object[], т.к. невозможно создать массив по generic-типу.
Valhalla — эпичный рефакторинг Java. Часть 1: История проекта, сложности реализации и цели