正在加载视频...

视频加载失败

My thoughts on Closures and Lambdas

37,014 次观看 • 1 年前 •via X (Twitter)

5 条评论

Dmitry /Undefined Behavior/ Sviridkin 的头像
Dmitry /Undefined Behavior/ Sviridkin1 年前

There's another argument in favour of using a fn pointer + context parameter rather than Rust closure: Rust closure cannot safely return reference to the captured data. With a fn pointer you can do whatever you want

Sasha Krassovsky 的头像
Sasha Krassovsky1 年前

I think usually the captures are heap-allocated (but with small object optimization), so a big reason to prefer not allowing closures is to avoid hidden heap allocations.

kantmissevershot 的头像
kantmissevershot1 年前

The benefit to actual closures (and also to directly passing around function items) is that closures don't have to pass around the actual function pointer. This is only a small performance benefit but it's worth talking about.

Adam Rezich 的头像
Adam Rezich1 年前

#import "Basic"; //Jai foo :: (f: (int, T) -> int, arg: $T) -> int { return f(69, arg); } main :: () { y := 2; print("%\n", foo((x, y) => x*y, y)); //lambda z := "hi"; print("%\n", foo((x: int, s: string) -> int { //anon print("%\n", s); return x*x; }, z)); }

İsmail Keskin 的头像
İsmail Keskin1 年前

Closures are also used for capturing things that will outlive their normal lifetime and in the most generic sense will require heap allocation if compiler can't prove lifetimes statically.

相关视频