Size: a a a

2018 September 08
javawatch
С новой фичей lazy ещё одна проблема есть. Вы наверное, думали, что можете из своего треда инициализировать их. А вот хуй. Только с помощью специальных "инициализаторов".  

Ваш код, запрашивающий значение переменной, и инициализатор - это вообще две разных сущности.

Ну это я для тех говорю, кто тоже поленился прочитать. Я вот весь джеп прочитал, но поленился понять.

Так вот, вызывающий клиентский код, который просит чтение переменной - очевидно должен быть блокирующим, если переменная ни разу не инициализировалась. Как только есть значение, он продолжается. Тормоза будут только один раз. Это неинтересная часть.

Интересно то, что вот инициализаторы-то могут, и скорей всего будут, выполняться не под локом, а под CAS-ом. "Lazy implies synchronized" не работает для инициализаторов.

Значит, существует ситуация, когда может запуститься сто пятьсот инициализаторов, а выиграет только один. Тот, которого выберет JVM. Способ выбора может быть любой, на откуп разработчиков конкретной реализации JVM (это то, что в C++ принято называть unspecified behavior - не описано в стандарте, да и разработчики не обязаны в своей документации уточнять).

Значит, в ленивый инициализатор нельзя положить никакие действительно важные данные. Например, нельзя положить туда коннект с БД, если у тебя по лицензии ограничение на количество коннекшенов - десять штук.

И тут можно сказать - а давайте сделаем как в Скале. Просто ебанем внутри инициализатора синхронизующий блок. "Lazy implies synchronized"  своими руками, так сказать. А ВОТ ХУЙ. Потому что там же по спеке предлагается заставить JVM запретить любые сайд-эффекты до полной инициализации переменной. Точней, сайд-эффекты не должны быть видны никому, кроме создавшего их треда, и очевидно, синхронизованный блок к таковым не относится.

То есть, это какая-то очень не для всех фича.

Или может быть, нужно добросить больше модификаторов? Сделать synchronized lazy поле. А что - слово synchronized уже есть, в контексте поля раньше не имело смысла, почему бы не вставить туда?

В общем, какая-то ебанина с этим джепом. Очень интересно. Ебанина - это всегда очень интересно. Интересней может быть только Серьезная Ебанина, но о ней мы поговорим в следующих постах.
источник
javawatch
Вот глядите как это работает в Скале,

class Foo { def foo = "foo"; lazy val lazyVal = foo }
источник
javawatch
источник
javawatch
источник
javawatch
java ужать файл вдвое
источник
javawatch
источник
javawatch
источник
2018 September 09
javawatch
источник
javawatch
источник
javawatch
Эволюция C++
источник
javawatch
источник
javawatch
Продолжая историю Дмитрия Иртегова про аттестацию качества образования в его вузе.

Знатоки. Внимание, вопрос!

7. Какому принципу ООП удовлетворяет обоняние собаки если: «Собака чует кошку - она лает, собака чует пищу - она бежит к миске»?
а) Наследование,
б) Инкапсуляция,
в) Полиморфизм.

Попробуйте сфорумлировать проблемы автора данного вопроса. Являющегося, на минуточку, частью "фонда оценочных средств федерального стандарта". Являются ли они психическими отклонениями или просто следствием специфического взгляда на жизнь? Как это вообще пропустили в фонд?

Время пошло.
источник
javawatch
Предыдущий вопрос в картинках
источник
javawatch
Вообще, ребятки, а вы бы взяли и помогли.

Сааамый ад, разбор вопросов, которыми пытаются тестировать ВУЗ.
Находится вот по этой ссылке: http://bit.ly/2M8V7Rn

Если начальство Дмитрия решит дать делу официальный ход, будет полезна помощь зала. А именно, подписи от представителей индустрии, не связанных трудовыми отношениями с НГУ, и желательно на позициях от senior developer и выше.

Исходный пост в фейсбуке вот здесь: https://bit.ly/2CD7i9p
источник
javawatch
источник
2018 September 10
javawatch
Как понять различия в культуре платформ на примере сборки JDK?

BSD - это история о свободе и возможностях выбора:

# Compiler warnings are treated as errors
ifneq ($(COMPILER_WARNINGS_FATAL),false)
 WARNINGS_ARE_ERRORS = -Werror
endif

GNU/Linux - это авторитарный режим пуристов:

# Compiler warnings are treated as errors
WARNINGS_ARE_ERRORS = -Werror

Причем само OpenJDK - это история о раздолбайстве, потому что уже сто лет висит тикет, в котором черным по белому: "configure --with-extra-cxxflags doesn't affect hotspot".
Наиважнейший флаг сборки не работает, но всем, в общем-то, насрать.
(https://bugs.openjdk.java.net/browse/JDK-8156967)

Ну ничего, зато лишние коммиты в опенсорц не помешают :)
(главное потом не рассказывать, чем ты там занимался, а то посоны не поймут, когда окажется, что там дело было в корявом мейкфайле)
источник
javawatch
НОВАЯ СТАТЬЯ (о вчерашних событиях)

https://habr.com/company/jugru/blog/422861/
источник
2018 September 11
javawatch
Ребятки, я тут написал первую НОРМАЛЬНУЮ статью за долгое время.
Ну то есть такую, которая проходит по моим собственным стандартам качества.
Вэлкам чисать и плюсовать. Плюсы - это важно!

https://habr.com/company/jugru/blog/422519/
источник
javawatch
Напоминаю о необходимости посмотреть сегодняшнюю статью :)
(https://habr.com/company/jugru/blog/422519/)
источник
2018 September 12
javawatch
источник