@dlangru

Страница 446 из 719
Evgeny
11.03.2018
06:09:14
во всяком случае я незнаю как еще

Denis
11.03.2018
06:09:42
> но как только он встроенные хэши Щито?

Evgeny
11.03.2018
06:09:43
некоторые выявил просто сделав соответствующие урезанные тесткейсы

Google
Evgeny
11.03.2018
06:09:55
> но как только он встроенные хэши Щито?
ага, у нас тоже челюсти отвисли

Denis
11.03.2018
06:10:06
Вообще не понял о чём ты)

toHash?

Evgeny
11.03.2018
06:10:23
Вообще не понял о чём ты)
не, я коряво выразился

он в программе заменил один из встроенных ассоциативных масивов на обертку вокруг std.container.rbtree

Denis
11.03.2018
06:11:35
Аа

олдфажное название "хэш" для ассоциативных массивов

раньше тоже так говорил но никто меня не понимал)

Evgeny
11.03.2018
06:13:00
и это существенно

Denis
11.03.2018
06:13:28
когда только-только появился шаблон такой в С++ кажетя то все стали так их называть

ну и от этого путаница пошла

Evgeny
11.03.2018
06:14:59
когда только-только появился шаблон такой в С++ кажетя то все стали так их называть
ну я не из-за этого стал так называть, просто в D ассоциативный массив и правда хэш-таблица, причем это зафиксировано в доках

Google
Evgeny
11.03.2018
06:15:35
а плюсовой std::map - не хэш-таблица, а бинарное дерево

Denis
11.03.2018
06:16:22
ну ок

когда потом появилась криптография и хэши начали массово применяться меня постоянно это путало, запомнилось.

читаешь такой текст а там из-за этих хэшей ничего не понятно.

(о вреде неправильных определений, короч)

Evgeny
11.03.2018
06:18:03
есть такое

Denis
11.03.2018
06:43:35
если оставить наподольше то явно будет видно что же там навыделялось в таких объёмах

Evgeny
11.03.2018
06:45:24
если оставить наподольше то явно будет видно что же там навыделялось в таких объёмах
К сожалению не возможно понять убранно ли выделенное в таких объемах или продолжает висеть в памяти.

Denis
11.03.2018
06:45:49
а, действительно, в логе только количество выделений

почему-то

могли бы и количество уничтожений добавить

Evgeny
11.03.2018
06:46:03
допустим я увидел в первой строке, что у меня миллион раз выделился объект A. Значит ли это что течет этот объект? А вот нихрена.

Denis
11.03.2018
06:48:57
интересно, с чем связано то, что лог именно такой, без количества уничтожений

нелогично как-то

а, цель другая! профилировка - она про скорость

т.е. важно количество и объёмы, а то что оно не удаляется это пофиг. и в конце GC всё равно всё удалит при завершении, так что статистика сойдётся.

нужно иметь возможность снимать какой-то "мгновенный дамп"

нужно какой-то специальный аллокатор написать который всё сможет подсчитать и выдать

Igor
11.03.2018
06:52:40
Есть аллокатор который ведет статистику по другим аллокаторам stat или что-то в этом роде.

Google
Evgeny
11.03.2018
06:54:00
а, цель другая! профилировка - она про скорость
именно, я же об этом сразу написал: "он выдает количество аллокаций, позволяет выявить узкие места, как и положено профайлингу, но вот поймать утечки я не смог даже валгриндом"

Denis
11.03.2018
06:54:20
да не, я про причину рассуждал просто. логично же добавить было бы 2 столбик

Evgeny
11.03.2018
06:55:11
да не, я про причину рассуждал просто. логично же добавить было бы 2 столбик
не добавили видимо, потому что место аллокации в коде известно, а вот деаллокация недетерминированна

Denis
11.03.2018
06:58:05
https://forum.dlang.org/thread/pjbughflpznzdsamlqbx@forum.dlang.org поднял некропостом

Dark
11.03.2018
09:54:31
https://habrahabr.ru/post/350844/
Некропостинг, но... С одной стороны такой подход мощный и позволяет творить магию в компайл-тайм, с другой стороны, все это превращается в зубодробительные конструкции, которые может прочитать только автор

Pavel
11.03.2018
09:59:24
По сути то всё - давно известное конфигурирование сборки.

Может, более объектное и удобное.

А может и менее, смотря как сделать)

Dark
11.03.2018
10:05:30
Да не, я не спорю, что на С макросоми это будет тот ещё хоррор. Но легко написать теплейт, которой будешь понимать только ты, в первую очередь из-за того, что best practices нигде не закреплены

Pavel
11.03.2018
10:07:55
Мне даже кажется, при таком подходе ответветственность за поведение класса выносится за пределы класса.

Dark
11.03.2018
10:10:17
Не всегда это хорошо

Dmitry
11.03.2018
10:10:27
Денис, а почему может быть так что GC что то не освобождает?

Pavel
11.03.2018
10:12:29
Не всегда это хорошо
Обычно это плохо.

Dark
11.03.2018
10:13:27
Несовершенство механизмов сборки мусора, короче

Кстати, а в D есть аналоги WeakMap/WeakSet, которые позволяют GC собирать их содержимое?

Обычно это плохо.
Бывает полезно, но в целом, да, плохо

Denis
11.03.2018
11:08:55
Денис, а почему может быть так что GC что то не освобождает?
2 варианта: баг в GC или баг в нашем коде. Оба варианта надо иметь возможность дебажить

Dmitry
11.03.2018
12:05:32
интересно, с чем связано то, что лог именно такой, без количества уничтожений
Элементарно: при аллокации мы обычно знаем тип данных, под который выделяем память. А при освобождении уже чаще всего нет, GC видит лишь примерный размер куска памяти и все. (Не считая классов с финализаторами. Но для строк и многих других популярных типов финализатлров нет)

Pavel
11.03.2018
12:05:34
К сожалению не возможно понять убранно ли выделенное в таких объемах или продолжает висеть в памяти.
А не пробовали как-то постепенно отключать часть кода сервиса пока утечки не перестанут появляться?

Google
Dmitry
11.03.2018
12:06:56
Куда ты ее будешь тем же строкам прикреплять?

Dark
11.03.2018
12:08:25
К началу выделенной памяти, не?

Evgeny
11.03.2018
12:08:52
Может быть из-за взаимных ссылок?
Встроеный в D сборщик мусора не боится циклических ссылок.

Dmitry
11.03.2018
12:09:03
Если написать свою альтернативную реализацию GC, где иначе устроить кучу, тогда да, там можно будет хранить доп. инфу о типах.

Denis
11.03.2018
12:11:51
> при аллокации прикрепляем метку типа Подозреваю, это часть их "ассемблера"

Evgeny
11.03.2018
12:12:15
А не пробовали как-то постепенно отключать часть кода сервиса пока утечки не перестанут появляться?
Я пытался проделать нечто подобное на локальной версии. Но весьма проблемотично нагрузить сервис также как он грузится на проде, так как есть зависимость от сторонних глючащих сервисов.

Dmitry
11.03.2018
12:12:55
http://progcode.ru/2017/06/24/dconf-2017-под-капотом-мусорщика-ди-дмитрий-ол/

Admin
ERROR: S client not available

Dark
11.03.2018
12:13:08
О

Ща глянем

Ну так там таблицы и метаданные уже и так есть, не вижу огромных проблем добавить хотя бы байт на метку типа

Dmitry
11.03.2018
12:26:35
Байта маловато. Но да, я и говорю, если всю схему аллокации поменять, то можно.

Dark
11.03.2018
12:27:08
А почему сразу же - всю схему?

Dmitry
11.03.2018
12:28:21
Ну сравни как сейчас char[] хранится и как будет.

Igor
11.03.2018
12:32:37
Только размер
А как тогда вызывать деструктор?

Google
Dark
11.03.2018
12:33:03
А как тогда вызывать деструктор?
А вот об этом я не подумал

Igor
11.03.2018
12:50:43
gc имеет указатель на typeinfo

Dark
11.03.2018
12:59:01
А почему тогда нельзя запрофилировать деаллокацию?!

Dmitry
11.03.2018
13:07:39
указатель на ClassInfo есть в каждом объекте, он для вызова финализатора и используется. Но не каждый кусок данных в куче - объект класса.

Т.е. массив структур от простой строки GC уже не отличит.

Pavel
11.03.2018
13:11:39
Как вариант можно было бы сделать через version() профилирующие вставки, пусть они отжирают ресурсов но можно было бы сделать хорошую профилирующую сборку и быстро найти в чем проблема

Evgeny
11.03.2018
13:17:22
Т.е. массив структур от простой строки GC уже не отличит.
эм, вообще-то отличает. он же вызывает деструкторы, когда массив уничтожается

Igor
11.03.2018
13:27:23
А как gc узнаёт что он смотрит на структуру в куче не на класс?

Dark
11.03.2018
13:29:31
А GC это знать не нужно же

Не?

Evgeny
11.03.2018
13:33:10
А как gc узнаёт что он смотрит на структуру в куче не на класс?
не знаю, но оно работает - https://glot.io/snippets/ez2iguvjlg

и было бы странно если бы не работало

Igor
11.03.2018
13:34:35
Ну да, я и говорю что он видит информацию о типе

Не только классе

Но точного механизма я не знаю, поэтому могу врать

Evgeny
11.03.2018
13:36:26
а, ты видимо не мне отвечал

полагаю в TypeInfo масссива есть инфа о типе который он содержит

Denis
11.03.2018
13:37:22
где о типе? он просто запускает деструктор пофиг чего

Evgeny
11.03.2018
13:37:36
деструктор массива?

Denis
11.03.2018
13:39:16
элементов

на которые он ссылки хранит

и он знает тип элементов

Страница 446 из 719