Новости Java #2

• Стал известен первый JEP, который попадёт в Java 17. Это JEP 356: Enhanced Pseudo-Random Number Generators. В рамках этого JEP'а будет добавлен интерфейс RandomGenerator с четырьмя его специализациями: SplittableRandomGenerator, JumpableRandomGenerator, LeapableRandomGenerator и ArbitrarilyJumpableRandomGenerator. Кроме того, будет добавлен класс RandomGeneratorFactory, который будет возвращать конкретные реализации RandomGenerator. Старые классы Random, ThreadLocalRandom и SplittableRandom будут отрефакторены и станут одними из реализаций RandomGenerator. Также будут реализованы новые алгоритмы генерации псевдослучайных чисел.

• Брайан Гетц опубликовал новый документ «Паттерн-матчинг в объектной модели Java». В нём описывается возможный подход внедрения паттерн-матчинга в язык. Документ довольно большой, поэтому попробуем выделить основные моменты:

– Если язык предоставляет возможноть агрегации посредством конструкторов/фабричных методов, то он должен предоставлять и обратный механизм деконструкции:

Object x = new Foo(a, b); // конструкция
case Foo(var a, var b): ... // деконструкция

– Если конструирование объекта поддерживает композицию, то и деконструирование тоже должно её поддерживать:

Optional.of(Shape.redBall(1));
case Optional.of(Shape.redBall(var size)): ...

– Паттерны деконструкции являются точно такими же членами класса, как и конструкторы/методы. Паттерны имеют тело, в котором описывается всё необходимое поведение.

– Раз паттерны являются членами класса, то они поддерживают все их атрибуты: модификаторы доступа, перегрузка, переопределение, static/instance, параметрический полиморфизм, делегирование к другим паттернам, varargs и т.д.

– Паттерны также имеют дополнительные уникальные атрибуты: наличие целевого операнда, тип которого должен быть совместим с целевым типом, полнота/частичность, исчерпываемость, разделение аргументов на входные и выходные.

– В конце документа описываются также другие идеи вроде комбинирования паттернов с помощью булевых операторов (AND/OR), структурные паттерны и т.д.

• Также Брайн Гетц предложил в рассылке Amber несколько идей относительно паттерн-матчинга:

Оператор алмаза в паттернах:

// Было:
if (m instanceof EnumMap<K, ? extends V> em) { ... }

// Стало:
if (m instanceof EnumMap<> em) { ... }

Паттерны массивов:

if (arr instanceof String[] { var a, var b }) { ... }

Охранные паттерны:

case P(var x) __AND true(x > 0) __AND Q(var y):

• Джонатан Гиббонс (Oracle) предложил добавить в JDK утилиту apidiff для сравнения нескольких версий API. Утилита сможет анализировать class-файлы, исходные файлы Java и файлы документации и генерировать HTML-отчёт о различиях в API. Внутри она будет использовать фронтенд javac и модули java.compiler/jdk.compiler для чтения исходных и класс-файлов, а значит не будет проблем с поддержкой в утилите последних языковых изменений. Джонатан пишет, что у него уже есть продвинутый прототип утилиты и он надеется в скором времени опубликовать его на GitHub.

• Американские новостные агентства написали о взломе нескольких министерств США через программное обеспечение компании SolarWinds и о возможной организации этих кибератак хакерами, связанными с Россией. В статьях написано, что хакеры могли это сделать, получив доступ к билд-серверу TeamCity, развёрнутому в компании для сборки ПО. Далее сообщается, что американские спецслужбы и специалисты по кибербезопасности начали исследование возможной роли JetBrains в атаке.

При этом авторы не объясняют, почему такой негативный акцент в статьях сделан именно на JetBrains, ведь кроме TeamCity в SolarWinds должно использоваться множество других программ и инструментов для разработки. New York Times вообще назвал JetBrains «obscure software company» («тёмная», «неясная»), но позже изменил эту фразу в статье на «widely used software company», и вообще в течение последующих дней множество раз изменял статью, постоянно внося туда правки и уточнения. Многие программисты в Твиттере довольно резко отреагировали на твит редактора New York Times и одной из авторов статьи, делая ретвиты с саркастическими шутками.

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

• Брюс Эккель, автор «Философия Java» и многих других книг о Java, C++ и JVM языках, написал пост «The Problem with Gradle», где рассказал свою историю использования Gradle и перечислил его проблемы.

Вышел Gradle 6.8.

Подписывайтесь на канал в Telegram, чтобы не пропускать новости.

Все материалы на этом сайте выложены под лицензией CC BY-SA 4.0
© Евгений Козлов, 2017-2021
Feed