sun.misc.Unsafe
в Java 9. Очень негативно подобное решение может сказаться на всей экосистеме. Кто не в теме, можете почитать об этом звере. Если вкратце, то это приватное API использовалось для низкоуровневого программирования: напрямую работать с памятью и т.п.Чтоб оценить размах, можно глянуть список проектов, которые используют unsafe:
- Netty
- Hazelcast
- Cassandra
- Mockito / EasyMock / JMock / PowerMock
- Scala Specs
- Spock
- Robolectric
- Grails
- Neo4j
- Spring Framework
- Akka
- Apache Kafka
- Apache Wink
- Apache Storm
- Apache Hadoop
- Apache Continuum
Небольшой комментарий из переписки:
Let me be blunt — sun.misc.Unsafe must die in a fire. It is — wait for it — Unsafe. It must go. Ignore any kind of theoretical rope and
start the path to righteousness
Аргументация удаления сводится по большей части к тому, что они хотят убрать возможность «выстрелить себе в ногу».
Из предложений (взамен полного удаления пакета) можно выделить:
- Задокументировать это API вместо полного выпиливания. А так же сделать публичным.
- В то же время Oracle должны сделать публичную альтернативу Unsafe с тем же функционалом, чтоб люди потихоньку переходили на него. В таком случае люди автоматически откажутся от Unsafe и переведут постепенно проекты на новое API.
Что-то подобное было с bytecode verifier в Java 7.
СЕО Hazelcast Greg Luck предлагает, если всё же API будет выпилено, оставаться на Java 8 и не переходить на девятку (которая предположительно выдйте в 2016).
Комментарии (19)
chabapok
29.07.2015 14:38Если они не предложат ничего взамен, то скорей всего полностью не уберут. Потому что безопасность-безапосностью — но работать тоже ведь как-то надо.
Когда-то, например, они обещали задепрекейтить в 7 и совсем убрать в 8 метод sun.reflect.Reflection.getCallerClass(int) — а этот метод используется логгерами. Сейчас проверил с 1.8.0-45 — этот метод помечен deprecated, но все еще есть.
vladimir_dolzhenko
29.07.2015 14:52+7Черт бы вас всех побрал — хватит истерить уже — никто не планирует его выбрасывать! Не надо поднимать панику, не разобравшись в вопросе.
Suvitruf Автор
29.07.2015 14:55-3Много профильных сайтов об этом сообщало. Если у вас есть достоверная информация на этот счёт, с радостью добавлю в статью.
vladimir_dolzhenko
29.07.2015 15:03+2Могу отправить на twitter Леши Шипилева и ко. — потом еще вопрос всплывал в Разборе полетов: Прогулки по минным полям — там вроде и ссылки были куда дальше — словом можно при желании покопать и найти, если есть желание выдавать не истерические вопли, а по делу.
vladimir_dolzhenko
29.07.2015 15:00Пожалуй стоит развернуть чуть подробней:
— в java 9 таки введут модульность, и все private API станут доступны только изнутри corelib — как это было задумано изначально — однако изначально нельзя было это реализовать технически в виду отсутствия той самой модульности — и получить просто так Unsafe нельзя даже сейчас — нужно делать 3 приседания с reflection.
— public api для таких низкоуровневых вопросов давно уже напрашивался — и в общем-то не удивительно, что за него взялись и товарищи из Hazelcast, Peter Lawrey и прочие шаманы — в конце концов вариантов еще допилить в OpenJDK н-р через какие-нибудь intrinsic-и java классы типа ByteBuffer никто не запрещал
— хватит истерить уже! Вопрос далеко не вчера возник и даже не в этом году — почему только сейчас все об этом вспомнили?
Suvitruf Автор
29.07.2015 15:09Вопрос про unsafe да. Но лента у меня полна статьями про это последние пару дней. Если не всё так плохо, то это радует.
msd
29.07.2015 15:20к примеру, вот презентация за 2014 год — www.oracle.com/technetwork/java/jvmls2014sandoz-2265216.pdf и там уже говорится, что sun.misc.Unsafe (is going away) will be made in accessible.
vladimir_dolzhenko
29.07.2015 15:25It is not a commitment to deliver any
material, code, or functionality, and should not
be relied upon in making purchasing
decisions. The development, release, and
timing of any features or functionality
described for Oracle’s products remains at
the sole discretion of Oracle.msd
29.07.2015 15:31я о том, что об это реально говорят давно, а паника началась только сейчас почему-то :)
vladimir_dolzhenko
29.07.2015 15:34Согласен. Я к тому, что inaccessible может быть реализовано по разному — н-р и в java8 нельзя получить Unsafe через SecurityManager (привет апплеты).
vladimir_dolzhenko
29.07.2015 15:22Статьями типа мы все умрем или что-то более дельное? По твиттеру могу сказать, что это видимо уже не первая волна за последний месяц.
Suvitruf Автор
29.07.2015 15:26javaworld.com и т.п.
vladimir_dolzhenko
29.07.2015 15:29Читал — тот же истеричный тон, что у и одной изначальной статьи Removal of sun.misc.Unsafe in Java 9 — A disaster in the making.
Suvitruf Автор
29.07.2015 15:40-2То есть, это явная истерия, не более? Просто по вашим ссылкам наблюдаю рассуждения, но явного опровержения нет.
vladimir_dolzhenko
29.07.2015 15:52+1Опровержения чему?
— Unsafe таки еще больше закроют от посторонних глаз в Java9 — но будут и флажки, чтобы пока еще работать по старому — т.е. скорее стоит воспринимать java9 как вариант, где будет возможность чуть с большим приседанием, но таки получить тот самый Unsafe
— Идет работа над public API той функциональности, которая доступна из Unsafe — в идеале было бы хорошо, чтобы новый public API был уже в java9 — и можно было бы мигрировать на него
— Проблеме не первый месяц срок
freehome
29.07.2015 15:13+1Странная новость. Все зарубежные источники ссылаются на Google Docs-документ, созданный непонятно кем.
Envy
Ну да, нарушать основопологающий принцип джавы написано однажды — работает везде они нарушают, но в JVM объекты типов добавлять не хотят со структурками.
seregamorph
Этот принцип не распространяется на приватные API.