Сообщение Re[3]: Замыкания и Reference Counting от 19.10.2024 18:32
Изменено 19.10.2024 18:34 vsb
Re[3]: Замыкания и Reference Counting
Здравствуйте, Worminator X, Вы писали:
vsb>>С замыканиями очень просто создать циклическую ссылку. Reference counting будет работать, но нужно не забывать руками рвать циклы. С GC это всё, конечно, намного проще.
WX>Обычно для этого захватываемые переменные (поля объекта-замыкания) делают неизменяемыми, например, такое долгое время было в Java.
В Java и сейчас так (та ещё дурость).
WX>В результате присвоить им значение функции с замыканиями нельзя, и циклические ссылки невозможны.
Да прям уж. Поле неизменяемое, а содержимое изменяемое.
WX>Там, где зачем-то возможны (сложно придумать такую задачу), скорее всего, без GC не обойтись.
Да это везде сплошь и рядом.
vsb>>С замыканиями очень просто создать циклическую ссылку. Reference counting будет работать, но нужно не забывать руками рвать циклы. С GC это всё, конечно, намного проще.
WX>Обычно для этого захватываемые переменные (поля объекта-замыкания) делают неизменяемыми, например, такое долгое время было в Java.
В Java и сейчас так (та ещё дурость).
WX>В результате присвоить им значение функции с замыканиями нельзя, и циклические ссылки невозможны.
Да прям уж. Поле неизменяемое, а содержимое изменяемое.
class Pointer {
Object value;
}
final var pointer = new Pointer();
Runnable runnable = () -> System.out.println(pointer.value);
pointer.value = runnable;
WX>Там, где зачем-то возможны (сложно придумать такую задачу), скорее всего, без GC не обойтись.
Да это везде сплошь и рядом.
Re[3]: Замыкания и Reference Counting
Здравствуйте, Worminator X, Вы писали:
vsb>>С замыканиями очень просто создать циклическую ссылку. Reference counting будет работать, но нужно не забывать руками рвать циклы. С GC это всё, конечно, намного проще.
WX>Обычно для этого захватываемые переменные (поля объекта-замыкания) делают неизменяемыми, например, такое долгое время было в Java.
В Java и сейчас так (та ещё дурость).
WX>В результате присвоить им значение функции с замыканиями нельзя, и циклические ссылки невозможны.
Да прям уж. Поле неизменяемое, а содержимое изменяемое.
WX>Там, где зачем-то возможны (сложно придумать такую задачу), скорее всего, без GC не обойтись.
Да это везде сплошь и рядом.
vsb>>С замыканиями очень просто создать циклическую ссылку. Reference counting будет работать, но нужно не забывать руками рвать циклы. С GC это всё, конечно, намного проще.
WX>Обычно для этого захватываемые переменные (поля объекта-замыкания) делают неизменяемыми, например, такое долгое время было в Java.
В Java и сейчас так (та ещё дурость).
WX>В результате присвоить им значение функции с замыканиями нельзя, и циклические ссылки невозможны.
Да прям уж. Поле неизменяемое, а содержимое изменяемое.
final var reference = new AtomicReference<>();
Runnable runnable = () -> System.out.println(reference.get());
reference.set(runnable);
WX>Там, где зачем-то возможны (сложно придумать такую задачу), скорее всего, без GC не обойтись.
Да это везде сплошь и рядом.