Size: a a a

2020 August 24

RM

Romian Makhline in JUG NN
Чем тебе пепе не угодил? А насчёт политики - это оффтоп и должны соблюдаться разумные пределы
источник

RM

Romian Makhline in JUG NN
источник

SK

Sergey Kapralov in JUG NN
Romian Makhline
Чем тебе пепе не угодил? А насчёт политики - это оффтоп и должны соблюдаться разумные пределы
Ну, как там выше было? Кому нужно - пусть видит, мне - не нужно? Для меня он - бородатый мем, который изначально то не особо доставлял, но его продолжают пихать везде снова и снова и снова.

Но не суть. Я не за цензуру, по крайней мере - не здесь.
источник
2020 August 25

SS

Sergey Smyshlyaev in JUG NN
Обновлённая версия
источник

SS

Sergey Smyshlyaev in JUG NN
источник

K

Keanor in JUG NN
пару месяцев назад пробовал fx приложение запаковать, утонул в непонятных ошибках сишного компилятора :(
источник

SK

Sergey Kapralov in JUG NN
Хм. Седня прям день граальВМа какой то, буквально утром доклад смотрел: https://www.youtube.com/watch?v=gmfM_pAbBdU
YouTube
Как мы пытались внедрить GraalVM и немного приуныли
Роман Гребенников (http://deeprefactoring.ru/speakers/roman-grebennikov)
Слайды: https://dfdx.me/slides/scalaconf19_graalvm/#/

О GraalVM не слышал только ленивый: новые оптимизации, интеграция с Python/Ruby/JS и AOT-компиляция в нативный код. На любой JVM-конференции из каждого утюга рассказывают, как изменится наша жизнь к лучшему с приходом коммунизма^W этой технологии. Но вот о чем обычно не рассказывают — так это об ограничениях и особенностях этой технологии, с которыми вы наверняка столкнетесь, если попытаетесь пойти хоть немного дальше hello-world.

В этом докладе мы попытаемся выяснить, ради чего это может понадобиться на практике и какие проблемы могут возникнуть при попытке протащить GraalVM в свой java/scala проект

- AOT-компиляция не компилирует
- АОТ-компиляция таки иногда компилирует, но код почему-то тормозит
- Reflection не рефлексирует
- в тридесятой транзитивной зависимости нашелся хитрый неподдерживаемый MethodHandle и у вас все развалилось
- у вас Akka или какая-нибудь другая напасть.

источник

K

Keanor in JUG NN
именно во всяких fx и swing, native image будет популярен когда для его создания ненужно будет знать что такое линковка :)
источник
2020 August 27

SK

Sergey Kapralov in JUG NN
Народ, возможно не самый умный вопрос задам, но все же: есть у concurrent hash map одна не самая приятная особенность - https://www.javacodegeeks.com/2015/05/puzzler-nested-computeifabsent.html. Вопрос - если тредсейфети нужно, нэстить compute if absent чревато, а менять мапу на concurrent skip list map - не вариант, как бы вы стали убирать этот дедлок, если б впоролись в такое?
источник

RM

Romian Makhline in JUG NN
что то я вопрос не понял, если честно, ты внутри функции вычисления аргумента для мапы модифицируешь эту же мапу?
источник

RM

Romian Makhline in JUG NN
и ты спрашиваешь что нужно делать?
источник

RM

Romian Makhline in JUG NN
если сложилась такая ситуация, что если в мапе нету элемента надо не только этот элемент положить, но и еще какой то - это явно лучше написать скажем так без лямбд. вообще модифицировать внешний мир из лямбды спорный момент как минимум. могу предложить только написать на обычных локах и синхронайзах корректную проверку и упаковку значений без компута
источник

RM

Romian Makhline in JUG NN
            
map.computeIfAbsent(Key.Hello, s -> {
               map.computeIfAbsent(Key.Hello, t -> 1);
               return 2;
           });

как вообще так можно было изначально написать?
источник

RM

Romian Makhline in JUG NN
то есть ты сначала одно скомпутил, потом другое на тот же ключ и ожидаешь какого то адекватного поведения - нужен кейс в студию, иначе не ясно
источник

SK

Sergey Kapralov in JUG NN
Изначальная история не настолько прямолинейна. Я её упростил малясь. Ты спрашиваешь - как так вышло? Представь что две этих лямбды - это некие вычисления, которые должны быть мемоизированны. В спринге для целей кеширования есть контракт Cache с методом get(ключ, лямбда). Лямбда вызывается если по ключу в кеше ничего нет. Одна из имплементаций этого кеша - Concurrentmapcache, по умолчанию использующая concurrenthashmap в качестве стореджа. Ну а представить себе две вложенные друг в друга и кешируемые лямбды не так и сложно.

И чтоб впороться, ключ необязательно должен быть одинаковым. Достаточно того, чтоб два ключа залочились на одном бакете.
источник

RM

Romian Makhline in JUG NN
Sergey Kapralov
Изначальная история не настолько прямолинейна. Я её упростил малясь. Ты спрашиваешь - как так вышло? Представь что две этих лямбды - это некие вычисления, которые должны быть мемоизированны. В спринге для целей кеширования есть контракт Cache с методом get(ключ, лямбда). Лямбда вызывается если по ключу в кеше ничего нет. Одна из имплементаций этого кеша - Concurrentmapcache, по умолчанию использующая concurrenthashmap в качестве стореджа. Ну а представить себе две вложенные друг в друга и кешируемые лямбды не так и сложно.

И чтоб впороться, ключ необязательно должен быть одинаковым. Достаточно того, чтоб два ключа залочились на одном бакете.
все еще не понял. если нет одного ключа ты пытаешься еще и другой ключ заодно вычислить?
источник

RM

Romian Makhline in JUG NN
если очень хочется вычислять сразу все на свете - помогает внешний объект контейнер с несколькими полями нужного типа. вместо кампут иф абсент - гет ор дефолт, результат в контейнер, в конце делаешь пут
источник

RM

Romian Makhline in JUG NN
раз хочется писать странные вещи
источник

SK

Sergey Kapralov in JUG NN
Romian Makhline
все еще не понял. если нет одного ключа ты пытаешься еще и другой ключ заодно вычислить?
Есть одна лямбда, ей нужен результат другой лямбды. Обе лямбды нужно мемоизировать, при этом доступ к лямбдам конкурентный, и инициализация кеша должна происходить не больше одного раза.
источник

RM

Romian Makhline in JUG NN
вот так задача уже звучит не так безумно
источник