Rust&#x27;s lambdas are structs containing (references to) exactly the data from the parent scope that their bodies refer to, no more, no less. It&#x27;s fine for that set to be empty, resulting in an empty, zero-sized value. As we discussed[1] recently, unique types + monomorphisation means that many&#x2F;most calls of closures (i.e. even ones that capture variables) can compile down to an inlineable static function call. If there&#x27;s no references to external data in the body, this function call is exactly what you want with a function pointer, except better, because it is not a virtual call. That is, the scheme that Rust and C++11 use for closures automatically gives a better result than passing pointers. (Passing a function value is the same, they have unique types just like closures, but with the ability to be coerced to C-style function pointers.)<p>By the way, function pointers have been able to be passed directly where closures, both the new and old forms, are expected since at least 0.13.<p>[1]: <a href="https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=11054890" rel="nofollow">https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=11054890</a>