Size: a a a

2021 January 22

Т

Тающий звук... in dlang.ru
Может надо разработчикам сообщить, вдруг это недоработка
источник

И

Игорь in dlang.ru
ну в общем очевидно что контекст один и даже в общем-то понятно почему. непонятно хорошо это или плохо
источник

МВ

Макс Воробьев... in dlang.ru
источник

МВ

Макс Воробьев... in dlang.ru
import std;

struct TestIter {
   int opApply(scope int delegate(int) dg) {
       for (int k=1; k<=3; ++k) {
           dg(k);
       }
       return 1;
   }
}

void main() {
   alias func = void delegate();
   func[] cbs;
   foreach (int k; TestIter()) {
       cbs ~= () => k.writeln;
       
   }
   foreach(d; cbs) d();
}
источник

МВ

Макс Воробьев... in dlang.ru
1 2 3
источник

МВ

Макс Воробьев... in dlang.ru
по моему это называется UB)
источник

МВ

Макс Воробьев... in dlang.ru
Dark Hole
А если тот же пример на структурах?
.
источник

И

Игорь in dlang.ru
что является контесктом в простом случае?
источник

И

Игорь in dlang.ru
который захватывается
источник

МВ

Макс Воробьев... in dlang.ru
Игорь
который захватывается
    alias func = void delegate();
   func[] cbs;
   foreach (int k; 0..3) {
       cbs ~= () => k.writeln;
   }
   foreach(d; cbs) d();
контекст - переменная k, которая одна для всех лямбд
источник

И

Игорь in dlang.ru
нет, контекст это стек
источник

И

Игорь in dlang.ru
и он один
источник

МВ

Макс Воробьев... in dlang.ru
тогда k у нас на стеке уже нет
источник

МВ

Макс Воробьев... in dlang.ru
    alias func = void delegate();
   func[] cbs;
   foreach (int k; 0..3) {
       int t = k;
       cbs ~= () => t.writeln;
   }
   foreach(d; cbs) d();
t тут на стеке нет темболее
источник

И

Игорь in dlang.ru
ну а где t хранится?
источник

И

Игорь in dlang.ru
в куче?
источник

МВ

Макс Воробьев... in dlang.ru
import std;

struct RaiiStruct {
   int value;
   ~this() {
       writeln("destroyed ", value);
   }
}

void main() {
   alias func = void delegate();
   func[] cbs;
   foreach (int k; 0..3) {
       RaiiStruct str;
       str.value = k;
       cbs ~= () => str.value.writeln;
   }
   foreach(d; cbs) d();
}
источник

МВ

Макс Воробьев... in dlang.ru
destroyed 0
destroyed 1
destroyed 2
2
2
2
источник

Т

Тающий звук... in dlang.ru
Игорь
нет, контекст это стек
Стек - это внутренняя реализация
источник

И

Игорь in dlang.ru
Тающий звук
Стек - это внутренняя реализация
Йо
источник