@dlangru

Страница 447 из 719
Denis
11.03.2018
13:43:15
короче, рантайм НЕ знает тип

Evgeny
11.03.2018
13:48:20
короче, рантайм НЕ знает тип
ты имеешь в виду, что он не знает тип, но знает как финализировать объект или элементы массива?

может и так, я внутренности рантайма почти не знаю.

Pavel
11.03.2018
14:01:29
Google
Dark
11.03.2018
14:01:29
Интересный вопрос, а деструкторы вызываются при удалении объекта из памяти или нет?

Зато его все боятся) Запомним.
Сборщика мусора или циклических ссылок?

Evgeny
11.03.2018
14:02:50
Сборщика мусора или циклических ссылок?
Сборщика конечно. Потому что он циклических ссылок не боится, он вообще ничего не боится, только вот работает не идеально :)

Dark
11.03.2018
14:04:13
Скорее, вроде работает, но никто не может объянить, за счет чего

Evgeny
11.03.2018
14:11:12
Зато его все боятся) Запомним.
Ну он на самом деле чистит... обычно... когда звезды правильно расположены... Пруф https://glot.io/snippets/ez2ji2cmzh

Dark
11.03.2018
14:14:57
Техномагия

Evgeny
11.03.2018
14:15:39
Dark
11.03.2018
14:15:54
Я про твой код

Evgeny
11.03.2018
14:16:02
ты про очистку стека?

Dark
11.03.2018
14:16:11
Ага

Вообще, навеяло эту статью http://lurkmore.to/%D0%A4%D0%B0%D0%B7%D0%B0_%D0%9B%D1%83%D0%BD%D1%8B

Igor
11.03.2018
14:24:47
короче, рантайм НЕ знает тип
не знаю какой рантайм имеется ввиду, но если посмотреть код core/memory.d он содержит куски типа * ti = TypeInfo to describe the full memory block. The GC might use * this information to improve scanning for pointers or to * call finalizers.

Google
Igor
11.03.2018
14:25:20
и ссылки на TypeInfo в https://github.com/dlang/druntime/blob/master/src/gc/impl/conservative/gc.d

Denis
11.03.2018
14:26:36
TypeInfo это точно тип? может там несколько видов смещений для деструкторов лежит и всё?

Dark
11.03.2018
14:29:09
https://github.com/dlang/druntime/blob/633976f1b2619974e8b3b415e0052b38d1a8e2fb/src/rt/util/typeinfo.d

Evgeny
11.03.2018
14:29:26
а вот в BlkAttr и BlkInfo я не нашел никакой инфы о типах

Dark
11.03.2018
14:29:56
Это где ты увидел?

Evgeny
11.03.2018
14:30:06
копался в исходниках

Denis
11.03.2018
14:31:30
думаю оно там для другого и не вкомпиливается в релизный код если не юзать это в коде своём

Evgeny
11.03.2018
14:32:39
Dark
11.03.2018
14:33:34
https://github.com/dlang/druntime/blob/2f4ed262b2bc28190685f3347cc2e083bf05d4f7/src/core/memory.d#L133 Даже меньше

Evgeny
11.03.2018
14:33:42
https://github.com/dlang/druntime/blob/master/src/core/memory.d#L225

Dark
11.03.2018
14:36:03
NO_MOVE интересный атрибут

Получается, GC действительно двигает блоки, что бы они были теснее?

Denis
11.03.2018
14:39:25
на практике нет, но может в теории

не должна ли функциональность GC быть реализована на уровне ОС?

Dark
11.03.2018
14:40:58
В каком смысле?

В ядре или в стандартных библиотеках?

Denis
11.03.2018
14:41:29
деструктор в конце отмечает блок как свободный - а дальше пусть уже ОС этим занимается

Google
Denis
11.03.2018
14:42:26
да это понятно, тут же о другом. GC работает после деструктора

Dark
11.03.2018
14:42:49
А что от ОС требуется тут?

Denis
11.03.2018
14:43:04
побыстрее выдавать новые блоки

Dark
11.03.2018
14:43:27
Ээээ

Я вообще не понимаю, что ты от ОС хочешь

Denis
11.03.2018
14:44:35
зачем нужен GC?

Dark
11.03.2018
14:46:18
По факту, в задаче "убрать память" в GC только два пункта: 1. Вызвать деструктор, если надо 2. Пометить блок как свободный в своих таблицах или вообще убрать его Что, в данном случае требуется переложить на ОС?

Denis
11.03.2018
14:49:26
> По факту, в задаче "убрать память" в GC только два пункта Задача так не стоит вообще

задача стоит "управление памятью", чтобы она не фрагментировалась (большие объекты чтоб влазили) и чтобы можно было быстро находить свободные места

Pavel
11.03.2018
14:50:32
не должна ли функциональность GC быть реализована на уровне ОС?
я тоже думал над этим, но ведь механизм действия гц, подсчета ссылок и зания о внутренностях очень сильно специфичны для каждого языка поэтому ос не сможет всем этим управлять.

Denis
11.03.2018
14:50:53
Зато можно было бы от виртуальной памяти избавиться

Denis
11.03.2018
14:51:59
ОС могла бы выделять "реальную" память

бОльшими кусками. раз уж она её коллектит

Dark
11.03.2018
14:52:13
Грубо говоря, в ОС есть механизмы управления памятью, которые работаю на манер GC. Но они на уровне процессов

Denis
11.03.2018
14:52:47
> Грубо говоря, в ОС есть механизмы управления памятью Не в ОС а в процессоре

А в чем плюсы?
минус одна конвертация адресов из виртуальных в реальные

да фигня, конечно. память нужна мелкими кусками а ОС сможет только крупные давать

Google
Dark
11.03.2018
14:54:56
> Грубо говоря, в ОС есть механизмы управления памятью Не в ОС а в процессоре
В процессоре есть возможность отображать память. Выделением памяти для процесса занимается ОС. Там очень много мозгоебли с сегментами, страницами и т.п., так что я могу ошибаться.

Pavel
11.03.2018
14:56:10
минус одна конвертация адресов из виртуальных в реальные
то что ты щас описываешь чем то похоже на то как это делает(раньше делал) прекрасный php))

Denis
11.03.2018
14:56:36
Угу. Это специфично для распространённых процессоров, которые внезапно бывают разные.

Pavel
11.03.2018
14:56:56
там никакой мусор не собирался, скрипт отработал, умер - вся память от него почистилась разом.

Так что если хочешь опробовать действительно крутой, гибкий, эффективный, элегантный и популярный язык - добро пожаловать в PHP!

?

Dark
11.03.2018
14:58:04
минус одна конвертация адресов из виртуальных в реальные
Тут есть очень хороший "подвох". Допустим, мы взяли адрес на объект, попали в своп и были выгружены на диск. А потом нам надо вернуть страницу обратно и внезапно нас загрузили в память вместо другой страницы.

Решение?

Denis
11.03.2018
14:58:41
страницы ненужны будут

загрузили тебя в адрес х - там и сиди

Admin
ERROR: S client not available

Dark
11.03.2018
14:58:57
А своп?

Даа

Denis
11.03.2018
14:59:14
а что своп?

Dark
11.03.2018
14:59:36
Ну, как ты собираешься в таком раскладе делать выгрузку на диск?

Denis
11.03.2018
14:59:45
а как она сейчас делается? ровно так же

Dark
11.03.2018
15:00:13
А она сейчас работает за счет того, что страницы выгружаются-загружаются

Denis
11.03.2018
15:00:37
а будет работать за счёт того что загружаются-выгружаются другие блобы

Dark
11.03.2018
15:00:59
Процессы целиком, что ли?

Denis
11.03.2018
15:01:27
любую систкему деления на куски можно использовать же

Google
Dark
11.03.2018
15:01:36
Можно

Но

Как бы сказать

Мы не можем двигать процессы с реального адреса

Не, не так

Denis
11.03.2018
15:04:05
Dark
11.03.2018
15:04:09
Допустим, у нас есть частоиспользуемый блоб А и нечастоиспользуемый блоб Б

Denis
11.03.2018
15:04:16
а, понял - маппинг так и так остаётся

ну да, верно

так что тут два в одном

Dark
11.03.2018
15:05:18
Что два в одном?

Denis
11.03.2018
15:06:02
ну маппинг всё равно ведь не девается никуда - памяти реальной меньше чем потребляют все загруженные софтины

так что да

https://stackoverflow.com/questions/26325759/why-doesnt-the-os-have-a-garbage-collector

Microsoft Windows DCOM is OS provided distributed reference counting garbage collector.

Dark
11.03.2018
15:07:50
Интересно, как он считает ссылки?

Или это требуется от ЯПа?

Denis
11.03.2018
15:09:27
в явовский ассемблер недавно глядел - там есть прямо вызовы типа "создать класс"

и всё, машина их создаёт и ессно считает ссылки

Dark
11.03.2018
15:10:18
Дык там байткод

Denis
11.03.2018
15:10:33
а в шарпе не?

Dark
11.03.2018
15:10:43
В шарпе IL

А что делать тем, кто не на нем?

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