Хотите паззлер?
Вешают на меня ишуй, говорят: вот, смотри, тест зависает намертво, копай. Я смотрю: ишуй старый, месяц назад и правда зависал тест. Проверяю на ночной сборке - все работает!
Смотрю в асм (да, я сразу смотрю в асм), за месяц изменилось по факту одно место.
Было:
Стало:
На этой ноте я говорю "ах ты сука", начинаю смеяться и зову компиляторщиков посмотреть на их труды.
Ваши идеи, в чем здесь проблема? Почему тест зависал? Почему перестал зависать? Подсказка: тест на некотором managed языке.
Вечером напишу разгадку, кто догадается быстрее и напишет в коментах, тому респект и лайки.
P.S. наши, кто уже видел описание ишуя или просто мой смех гиены в офисе, молчим.
#дух_машины
Вешают на меня ишуй, говорят: вот, смотри, тест зависает намертво, копай. Я смотрю: ишуй старый, месяц назад и правда зависал тест. Проверяю на ночной сборке - все работает!
Смотрю в асм (да, я сразу смотрю в асм), за месяц изменилось по факту одно место.
Было:
mov QWORD PTR [rbp+0x10],r14
mov QWORD PTR [rbp+0x18],0x0
Стало:
mov QWORD PTR [rcx+0x10],r14
mov r14d,0x0
mov QWORD PTR [rcx+0x18],r14
На этой ноте я говорю "ах ты сука", начинаю смеяться и зову компиляторщиков посмотреть на их труды.
Ваши идеи, в чем здесь проблема? Почему тест зависал? Почему перестал зависать? Подсказка: тест на некотором managed языке.
Вечером напишу разгадку, кто догадается быстрее и напишет в коментах, тому респект и лайки.
P.S. наши, кто уже видел описание ишуя или просто мой смех гиены в офисе, молчим.
#дух_машины
🤪9❤1👍1🤡1👀1
Алло, это отладочная?
Хотите паззлер? Вешают на меня ишуй, говорят: вот, смотри, тест зависает намертво, копай. Я смотрю: ишуй старый, месяц назад и правда зависал тест. Проверяю на ночной сборке - все работает! Смотрю в асм (да, я сразу смотрю в асм), за месяц изменилось по…
Разгадка на самом деле очень простая.
Что за тест:
К сожалению это был один из тех откровенно ублюдочных тестов, которые проверяют, что объект, который стал недостижим, будет собран GC.
Работает по очень простой схеме: создаем объект с финализатором, записываем единственную ссылку на него в локал => перетираем эту ссылку каким-нибудь другим значением => крутимся в цикле и ждем, пока финализатор сработает.
—
Почему тест ублюдочный:
Не существует никаких гарантий, что недостижимый объект будет собран. Про GC вообще почти ничего не говорится в спеке, например, языка Java. Это такое секретное внутреннее знание, что трассирующие GC вот так должны работать, но бывают исключения.
Например: обычно во время своей работы GC находит множество корневых объектов, используя информацию от компилятора. Дескать вот здесь, в этой точке на
Но иногда GC может строить корневое множество поконсервативнее: смотреть на все регистры и слоты стека, находить там что-то похожее на ссылки и соответствующие объекты якорить. Это не очень надежно (как мы увидим чуть ниже), но все еще корректно.
Именно в этом методе была такая ситуация: корневое множество строилось консервативно.
—
Что произошло (почему зависало):
На
Дальше крутимся в цикле, ждем срабатывание финализатора, а его все нет (GC раз за разом признает объект живым из-за этой протухшей ссылки на
Что произошло (почему перестало зависать):
За этот месяц в компиляторе проделали большую работу, которая к сожалению в том числе привела к появлению ненужной пересылки. Вместо того, чтобы записать
Это, конечно, пессимизация чистой воды, которую надо чинить. Но нашу то проблему это полечило! Ведь больше в
—
Что было дальше:
Посмеялся, показал компиляторщикам, они очень возмутились, говорят, что надо срочно чинить! А я отвечаю: зачем, отличная работа, вы же баг починили 😂
Ну это шутка, на самом деле нужно здесь гасить консерватизм, мы это сделаем (он вообще случайно здесь вылез). Это то, конечно, просто плохой тест, но такое и в реальных приложениях может сослужить плохую службу и привести к неограниченному потреблению памяти. Рассказывал про это, например, вот здесь.
—
Паззлер первым разгадал @sergey_kachkin, респект!
#дух_машины
Что за тест:
К сожалению это был один из тех откровенно ублюдочных тестов, которые проверяют, что объект, который стал недостижим, будет собран GC.
Работает по очень простой схеме: создаем объект с финализатором, записываем единственную ссылку на него в локал => перетираем эту ссылку каким-нибудь другим значением => крутимся в цикле и ждем, пока финализатор сработает.
—
Почему тест ублюдочный:
Не существует никаких гарантий, что недостижимый объект будет собран. Про GC вообще почти ничего не говорится в спеке, например, языка Java. Это такое секретное внутреннее знание, что трассирующие GC вот так должны работать, но бывают исключения.
Например: обычно во время своей работы GC находит множество корневых объектов, используя информацию от компилятора. Дескать вот здесь, в этой точке на
r14
лежит живая ссылка на объект, значит ты этот объект добавляй в корневое множество и размечай. Но иногда GC может строить корневое множество поконсервативнее: смотреть на все регистры и слоты стека, находить там что-то похожее на ссылки и соответствующие объекты якорить. Это не очень надежно (как мы увидим чуть ниже), но все еще корректно.
Именно в этом методе была такая ситуация: корневое множество строилось консервативно.
—
Что произошло (почему зависало):
На
r14
оставалась ссылка на объект, который на самом деле уже помер. Это мы в исходном коде перетерли ссылку на него, далеко не факт, что после всех оптимизация, она моментально ушла и из r14
.Дальше крутимся в цикле, ждем срабатывание финализатора, а его все нет (GC раз за разом признает объект живым из-за этой протухшей ссылки на
r14
). Вот вам и зависание.Что произошло (почему перестало зависать):
За этот месяц в компиляторе проделали большую работу, которая к сожалению в том числе привела к появлению ненужной пересылки. Вместо того, чтобы записать
0
сразу в [rbp+0x18]
, компилятор сначала услужливо сохранил его на r14
. Имеет право, ведь r14
уже не используется, объект то мертв!Это, конечно, пессимизация чистой воды, которую надо чинить. Но нашу то проблему это полечило! Ведь больше в
r14
нет ссылки на мертвый объект, там нолик. Так что GC объект собирает, финализатор срабатывает, тест проходит.—
Что было дальше:
Посмеялся, показал компиляторщикам, они очень возмутились, говорят, что надо срочно чинить! А я отвечаю: зачем, отличная работа, вы же баг починили 😂
Ну это шутка, на самом деле нужно здесь гасить консерватизм, мы это сделаем (он вообще случайно здесь вылез). Это то, конечно, просто плохой тест, но такое и в реальных приложениях может сослужить плохую службу и привести к неограниченному потреблению памяти. Рассказывал про это, например, вот здесь.
—
Паззлер первым разгадал @sergey_kachkin, респект!
#дух_машины
YouTube
Иван Углянский - Ходячие объекты-мертвецы, или GC всегда прав
Автоматическое управление памятью — одна из основных особенностей Java и других managed языков. При этом в спецификации про GC написано очень мало: как именно собирать мусор каждой конкретной реализации JVM, предлагается решать самостоятельно. В результате…
😈10👍4🔥2
- Пойдешь ко мне в штат?
- Кем?
- Криэйтором.
- Это типа творцом? Если перевести?
- Криэйтором, Вава, криэйтором, — сказал он. — Творцы нам тут нахуй не нужны.
—
Я вот раньше всячески повторял это Пелевенскую цитату, подразумевая, что нужно быть готовым на работе заниматься не только интересными творческими делами, но еще и скучной рутиной.
И в целом то все так, но со временем я стал гораздо больше ценить именно "творцов". Да, с ними бывает сложно; да, иногда чувствуешь себя воспитателем в детском садике; да, скучную рутину все еще нужно кому-то разбирать и да, их бывает трудно на это уговорить.
Зато какие-же крутые вещи они могут сделать, если им дать определенную степень свободы и хорошенько подтолкнуть в правильную сторону! Разве это менее ценно, чем монотонное закрытие мелких тасков по расписанию?
Понятно, что всем творцами не быть, кому-то и приземленные фичи надо криэйтить, но что тут скажешь, для того нам и дано разделение труда.
💯13❤4
Forwarded from Во всём виноват Конвор
Привет!
Меня зовут Конвор, писать в ВК стало как-то больно, поэтому я теперь здесь, и буду писать про:
1) Программирование. Пишу компиляторы, специализируюсь в оптимизирующей генерации машинного кода. Работал в компании Excelsior, принимал участие в создании Excelsior JET JVM, последние 6 лет - в команде Excelsior в компании Huawei. Писать о работе вряд ли буду из-за NDA, но мысли о программировании без контекста точно будут.
2) Преподавание программирования. Это хобби растянулось уже почти на 20 лет, занимался со школьниками и студентами, сейчас веду на СисПро ММФ НГУ курс по языку Си с уклоном в системное программирование и курс по созданию прототипов операционных систем. Мыслей о том, что хорошо и плохо в образовании, накопилось предостаточно, буду ими делиться и хвастаться студентами, конечно.
3) Любой гедонизм - приготовление еды, употребление еды, путешествия, прогулки с ребёнком, посиделки в барах, прочитанные книги и так далее. По опыту прошлых соцсетей, это мне обычно интереснее описывать, чем профессиональные темы.
4) Политика, история, экономика. Придерживаюсь очень радикальных взглядов, близких к либертарианству, и не стесняюсь применять их по каждому сраному поводу) Также люблю поспорить, и готов терпеть оппонента до последнего.
---
Цензуры нет и никогда не будет, ни на маты, ни на мнения в комментариях. Банить буду только за рекламу, оскорбления и всякие штуки, за которые меня посадить могут.
Погнали!
Меня зовут Конвор, писать в ВК стало как-то больно, поэтому я теперь здесь, и буду писать про:
1) Программирование. Пишу компиляторы, специализируюсь в оптимизирующей генерации машинного кода. Работал в компании Excelsior, принимал участие в создании Excelsior JET JVM, последние 6 лет - в команде Excelsior в компании Huawei. Писать о работе вряд ли буду из-за NDA, но мысли о программировании без контекста точно будут.
2) Преподавание программирования. Это хобби растянулось уже почти на 20 лет, занимался со школьниками и студентами, сейчас веду на СисПро ММФ НГУ курс по языку Си с уклоном в системное программирование и курс по созданию прототипов операционных систем. Мыслей о том, что хорошо и плохо в образовании, накопилось предостаточно, буду ими делиться и хвастаться студентами, конечно.
3) Любой гедонизм - приготовление еды, употребление еды, путешествия, прогулки с ребёнком, посиделки в барах, прочитанные книги и так далее. По опыту прошлых соцсетей, это мне обычно интереснее описывать, чем профессиональные темы.
4) Политика, история, экономика. Придерживаюсь очень радикальных взглядов, близких к либертарианству, и не стесняюсь применять их по каждому сраному поводу) Также люблю поспорить, и готов терпеть оппонента до последнего.
---
Цензуры нет и никогда не будет, ни на маты, ни на мнения в комментариях. Банить буду только за рекламу, оскорбления и всякие штуки, за которые меня посадить могут.
Погнали!
👍3🔥2👎1🤡1
Забавно, конечно, что с моим расписанием напиться в говно в баре можно только в тот же день, когда утром я бегаю небольшой кросс.
😢17🍾6
This media is not supported in your browser
VIEW IN TELEGRAM
Как же хорошо, что я теперь редко езжу по городу, т.к. сижу в Академе)
Здесь люди называют пробкой то, что в городе называется светофором.
Здесь люди называют пробкой то, что в городе называется светофором.
😁22❤10
Февраль-март для меня время (моих) конференций, расскажу по этому поводу постыдную историю, как меня как-то осрамили наши HR-ы в Ху.
---
В Ху работает много крутых ребят, кто-то из них мог бы стать отличным докладчиком, многие другие рады были бы ходить на конференции, как посетители. Но чтобы это сработало, мне нужна какая-то точка входа в корпорацию: человек в Ху, которому можно закинуть информацию о конференции, а он бы тебе и спикеров предложил, и бюджет на билеты для сотрудников выбил (и купил), да и стенд бы поставил на выставку. В современной айтишке такихрешал людей чаще всего называют деврелами (не спрашивайте, что это значит на самом деле и как расшифровывается, нужные мне качества я описал выше).
И вот решил я как-то подойти к вопросу поиска решалы основательно: написал нашим HR-ам (русским), говорю: а кто у нас деврел? Они очень испугались, говорят: пиши китайцам, у нас нет полномочий такое обсуждать.
Написал знакомой китайской девочке HR, спрашиваю: родная, а кто у нас деврел? Она отвечает: хм, какое интересное слово, а объясни, кто это хоть такой то? Ну я объяснил, она вроде поняла, ушла узнавать выше по инстанциям.
Через два часа вернулась и говорит: я все узнала! Наш DevRel – это ты 🙈
Говорить такое в лицо инженеру вообще-то довольно оскорбительно, но откуда же ей, бедняжке, это знать, она абсолютно искренне хотела помочь. Хотя, кажется, все-таки даже она почувствовала иронию ситуации.
---
Так вот и получается, что своей команде на свою конференцию билеты я согласую и покупаю сам (чаще всего за свои, а потом возвращаю через контору). Спасибо, что хоть стенд организовывать не надо, хотя консультирую я их про это с завидным постоянством.
Такие дела.
---
В Ху работает много крутых ребят, кто-то из них мог бы стать отличным докладчиком, многие другие рады были бы ходить на конференции, как посетители. Но чтобы это сработало, мне нужна какая-то точка входа в корпорацию: человек в Ху, которому можно закинуть информацию о конференции, а он бы тебе и спикеров предложил, и бюджет на билеты для сотрудников выбил (и купил), да и стенд бы поставил на выставку. В современной айтишке таких
И вот решил я как-то подойти к вопросу поиска решалы основательно: написал нашим HR-ам (русским), говорю: а кто у нас деврел? Они очень испугались, говорят: пиши китайцам, у нас нет полномочий такое обсуждать.
Написал знакомой китайской девочке HR, спрашиваю: родная, а кто у нас деврел? Она отвечает: хм, какое интересное слово, а объясни, кто это хоть такой то? Ну я объяснил, она вроде поняла, ушла узнавать выше по инстанциям.
Через два часа вернулась и говорит: я все узнала! Наш DevRel – это ты 🙈
Говорить такое в лицо инженеру вообще-то довольно оскорбительно, но откуда же ей, бедняжке, это знать, она абсолютно искренне хотела помочь. Хотя, кажется, все-таки даже она почувствовала иронию ситуации.
---
Так вот и получается, что своей команде на свою конференцию билеты я согласую и покупаю сам (чаще всего за свои, а потом возвращаю через контору). Спасибо, что хоть стенд организовывать не надо, хотя консультирую я их про это с завидным постоянством.
Такие дела.
😁21🤷♂5🔥1
Для меня матлог всегда был пожалуй самым интересным предметом на чистом ММФ. Ох, даже скучаю по нему!
💯12👎6
Forwarded from Системное программирование ММФ НГУ
На математической логике изучают доказательство логических высказываний, но есть одно но…
❤13👍3