Size: a a a

2021 February 23

AV

Alexey Veselovsky in Ada
поясни за лексику
источник

AV

Alexey Veselovsky in Ada
что и как ты бы хотел захватывать?
источник

AV

Alexey Veselovsky in Ada
ну, понятно, что не хочется за лайфтаймами следить самостоятельно, но это без GC не делается
источник

AV

Alexey Veselovsky in Ada
то есть чем тут захват хуже, чем в каком-нибудь Go?
источник

ЮВ

Юра В 🦄 in Ada
Alexey Veselovsky
что и как ты бы хотел захватывать?
не понял, где. я спросил, как в с++ захватывает, оказалось, что никак, просто из области видимости либо альясит то, что видит, либо копирует. в аде такое тоже без проблем сделать можно, но это будет просто сахар к

declare
  type PLambda is access procedure ... ;
  procedure .... ..
  begin
  end;
  lambda : PLambda := ..
begin
  --  тут лямбду используешь и все такое
  ......

end;
источник

AV

Alexey Veselovsky in Ada
лямбду можно сохранять куда хочешь
источник

AV

Alexey Veselovsky in Ada
вместе с захваченным
источник

AV

Alexey Veselovsky in Ada
иначе - определи что такое есть захват с твоей точки зрения
источник

AV

Alexey Veselovsky in Ada
захваты во всех остальных языках, где они есть точно такие же - тоже создается просто ссылка. только там эта ссылка -- сильная, то есть не дает умереть объекту пока жив ссылающийся. всё
источник

ЮВ

Юра В 🦄 in Ada
Alexey Veselovsky
вместе с захваченным
ну так это функтор, хочешь, копируй, хочешь, передавай по ссылке
источник

ЮВ

Юра В 🦄 in Ada
Alexey Veselovsky
захваты во всех остальных языках, где они есть точно такие же - тоже создается просто ссылка. только там эта ссылка -- сильная, то есть не дает умереть объекту пока жив ссылающийся. всё
ну, блин, говорить что в с++ захваты такие же это лукавство.
давай, unique_ptr захвати )
источник

ЮВ

Юра В 🦄 in Ada
дальше, как какой-нибудь член класса захватить? в жабе без проблем, там неявно еще и this объекта прихватит
источник

ЮВ

Юра В 🦄 in Ada
вот поэтому я и говорю, что тут лексический захват - поднимаемся по областям видимости вверх, и те объекты, которые обладают storage, можем либо скопировать в свой функтор (если есть копирование), либо ссылки на них неявные в функторе создать (с таким же лексическим именем)
источник

AV

Alexey Veselovsky in Ada
Юра В 🦄
дальше, как какой-нибудь член класса захватить? в жабе без проблем, там неявно еще и this объекта прихватит
так же? тут же нет никакой разницы что именно хватать в с++
источник

ЮВ

Юра В 🦄 in Ada
Alexey Veselovsky
так же? тут же нет никакой разницы что именно хватать в с++
я чот уже спать пойду) завтра поиграю с членами класса
источник

AV

Alexey Veselovsky in Ada
кроме того, их можно и переименовывать

auto make(int i)
{
   int j;
   return [j=i]() {return j;};
}
источник

AV

Alexey Veselovsky in Ada
Юра В 🦄
я чот уже спать пойду) завтра поиграю с членами класса
там ничего интересного. с++ глубоко пофигу где именно в памяти расположен кусок захватываемой памяти (грубо говоря, нюансы есть, но мелкие)
источник

AV

Alexey Veselovsky in Ada
Юра В 🦄
я чот уже спать пойду) завтра поиграю с членами класса
спокойной ночи 🙂
источник

ЮВ

Юра В 🦄 in Ada
Alexey Veselovsky
там ничего интересного. с++ глубоко пофигу где именно в памяти расположен кусок захватываемой памяти (грубо говоря, нюансы есть, но мелкие)
ну, вон уже UB увидели, когда время жизни кончилось раньше
источник

AV

Alexey Veselovsky in Ada
ну да. у с++ много ub разных. не уследил за временем жизни -- сам дурак
источник