Re[2]: Замыкания и Reference Counting
От: vdimas Россия  
Дата: 18.11.24 21:33
Оценка:
Здравствуйте, vsb, Вы писали:

vsb>С замыканиями очень просто создать циклическую ссылку.


Не проще, чем с любыми другими объектами, т.е. в те же минимум два действия — сначала сохраняем некий ref-count объект в замыкании, а потом полученное замыкание сохраняем в поле захваченного объекта.

Т.е., тут нет никакого доп. способа "автоматического" создания ref-count ссылок.


vsb>Reference counting будет работать, но нужно не забывать руками рвать циклы. С GC это всё, конечно, намного проще.


Это несильно отличается от явного вызова Dispose() в том же дотнете.
Re[3]: Замыкания и Reference Counting
От: vsb Казахстан  
Дата: 18.11.24 23:50
Оценка:
Здравствуйте, vdimas, Вы писали:

vsb>>Reference counting будет работать, но нужно не забывать руками рвать циклы. С GC это всё, конечно, намного проще.


V>Это несильно отличается от явного вызова Dispose() в том же дотнете.


Что такое Dispose? Я так понимаю, аналог close в Java для закрытия ресурсов вроде файлов?

Тогда — это сильно отличается. Потому, что динамическая память — она везде, она в каждой функции практически. Во многих местах неявно, создали замыкание, оно забрало переменные в кучу. И очень часто происходит ситуация, когда создаётся объект в одном месте, а становится доступен для удаления — в другом (причём зачастую это вообще статически не определяется).

С файлами и подобными ресурсами всё по-другому. Они действительно практически всегда открывается и закрываются в одном методе. И для них этот паттерн прекрасно работает.

Поэтому одно другому не мешает. Нужна и сборка мусора, нужен и try-finally или его аналог.
Re[4]: Замыкания и Reference Counting
От: vdimas Россия  
Дата: 19.11.24 01:51
Оценка:
Здравствуйте, vsb, Вы писали:

vsb>>>Reference counting будет работать, но нужно не забывать руками рвать циклы. С GC это всё, конечно, намного проще.

V>>Это несильно отличается от явного вызова Dispose() в том же дотнете.
vsb>Что такое Dispose? Я так понимаю, аналог close в Java для закрытия ресурсов вроде файлов?

Что-то типа, но только оно максимально распространено в дизайне.
Более того, в C# введены ср-ва RAII (через ключевое слово using), которые доказали свою мега-удобность еще в плюсах.

Т.е., язык C# "знает в лицо" конкретный интерфейс IDisposable() или даже просто метод Dispose() у ref-структур, которые не могут реализовывать интерфейсы.


vsb>Тогда — это сильно отличается. Потому, что динамическая память — она везде, она в каждой функции практически. Во многих местах неявно, создали замыкание, оно забрало переменные в кучу. И очень часто происходит ситуация, когда создаётся объект в одном месте, а становится доступен для удаления — в другом (причём зачастую это вообще статически не определяется).


И в чём печаль? ))
Разумеется, задачи бывают разные — иногда жизненный цикл объектов отследить просто (через граф владения), а иногда сложно (расшаренное владение, в т.ч. по потокам исполнения).

Не зря же, что в Джаве, что в Шарпе в некоторых задачах не стесняются использовать подсчёт ссылок.
Да и сам грешен на Шарпе этим порой. ))
И вот как раз через паттерн Dispose() удобно обыгрывается подсчёт ссылок, когда задача это диктует.


vsb>С файлами и подобными ресурсами всё по-другому. Они действительно практически всегда открывается и закрываются в одном методе. И для них этот паттерн прекрасно работает.


Ресурсом может быть не только файл.
Сейчас всё такое сетецентрическое...
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.