如何用AOT编译的语言实现匿名函数
How are anonymous functions implemented in AOT-compiled languages?
我的理解是,在诸如C#/java之类的托管语言中,匿名函数是由编译器在运行时生成的,然后将JIT编译到程序中。
在Rust和C 等非托管语言中呢?这些语言如何在运行时创建函数?实施Lambda表达式的较低级别的细节是什么?
int y = 3;
auto f = [y](int x) { return x*y; };
这是C 11 lambda。合并器(基本上(将其转换为:
struct __anonymous_name__ {
int operator()(int x) const { return x*y; }
int y;
};
__anonymous_name__ f = {y};
实际上并未命名使用__
的所有内容,只有出于展示目的的名称。
在运行时,一切都有固定的类型,没有生成代码。
std::function<int(int)>
可以存储上面的f
的副本,但是使用类型的擦除机制,该机制超出了该问题的范围。但是请注意,f
不是与std::function<int(int)>
相关的类型对象。C 具有多种多态性。
我也严重怀疑java/c#lambdas比您的其余代码更加jit。
相关文章:
- 在命名空间内部还是外部实现 c++ 函数?
- 如何在C++中实现函数(f)(x)(y, z)(g)(r)
- 如何在C++中实现函数上的二叉搜索?
- 键按下事件错误 Qt 实现函数时
- 在子类之外实现函数导致未知错误
- 通过模板滥用实现函数式C++
- C++,实现函数"int next(std::string param)"时出现奇怪的编译器错误
- 我正在尝试创建自己的 strcat() 函数,而不是使用库实现函数<cstring>
- 如果未实现函数,则在链接时启用错误
- 用函数参数实现c++函数指针
- 如何在Android SDK中调用和实现C++函数
- 在 C++ RCPP 中实现 R 函数
- 实现函数模板填充多维对象
- 类的层次结构,试图在基本级别实现函数
- 用c++实现函数对象的自动检测类型
- 用shared_ptrs实现函数模板的C++实例化
- 在类中实现函数导致错误:成员引用基类型'ifstream (string)'不是结构或联合
- 用c++实现S函数.生成错误
- 引用可以用于实现函数重写吗
- 如何在c++中实现函数超时