LINUX.ORG.RU

История изменений

Исправление dave, (текущая версия) :

В Си++ замыкания и std::function - разные вещи. Как я понял (а могу ошибаться), замыкания создаются на стеке. А вот при боксинге превращаются в std::function, для которых обычно действует жесткое ограничение, скажем, не более 32 байт на стеке. Если не умещаются, то «добро пожаловать в кучу».

Понятное дело, что это специфика Си++. В том же Rust это, скорее всего, сделано немного по-другому.

Замыкания там тоже создаются на стеке, но вот на счет FnOnce/Fn/FnMut/FnBox я сильно не уверен, что они при боксинге сразу не помещаются в кучу (это будет некий аналог std::function).

Ведь тебя интересуют языки без GC

Исходная версия dave, :

В Си++ замыкания и лямбды - разные вещи. Как я понял (а могу ошибаться), замыкания создаются на стеке. А вот лямбды превращаются в std::function, для которых обычно действует жесткое ограничение, скажем, не более 32 байт на стеке. Если не умещаются, то «добро пожаловать в кучу».

Понятное дело, что это специфика Си++. В том же Rust это, скорее всего, сделано немного по-другому.

Замыкания там тоже создаются на стеке, но вот на счет FnOnce/Fn/FnMut/FnBox я сильно не уверен, что они при боксинге сразу не помещаются в кучу (это будет некий аналог std::function).

Ведь тебя интересуют языки без GC