• Стал известен первый 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 и перечислил его проблемы.