Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# F#真的允许在代码中内联哪些函数吗?_C#_Performance_F#_Inline - Fatal编程技术网

C# F#真的允许在代码中内联哪些函数吗?

C# F#真的允许在代码中内联哪些函数吗?,c#,performance,f#,inline,C#,Performance,F#,Inline,当我阅读F#stuff时,他们在谈论内联方法,但我认为.NET没有向程序员公开这个功能。如果它暴露了,那么它必须在IL中?C#也能利用它吗 只是想知道这个东西是否与C++内联函数相同。< /P> < P>猜我会把答案作为…我真的不想这样做,因为除了基本知识之外,我对F一无所知p 为了回答您的一些特定问题,内联是一种特定于F#的构造,它与类型系统(例如静态成员约束)和代码生成(内联代码用于优化)交互。C++编译器处理这些事情,内联的信息被存储在程序集中的Fux-特定元数据中,这使得函数可以在F-组

当我阅读F#stuff时,他们在谈论内联方法,但我认为.NET没有向程序员公开这个功能。如果它暴露了,那么它必须在IL中?C#也能利用它吗


只是想知道这个东西是否与C++内联函数相同。< /P> < P>猜我会把答案作为…我真的不想这样做,因为除了基本知识之外,我对F一无所知p


为了回答您的一些特定问题,
内联
是一种特定于F#的构造,它与类型系统(例如静态成员约束)和代码生成(内联代码用于优化)交互。C++编译器处理这些事情,内联的信息被存储在程序集中的Fux-特定元数据中,这使得函数可以在F-组件边界上被内联。

与C++内联相比,实际上更复杂,因为F.*工作在.NET的顶部,IL作为中间语言,因此,实际上有两个层可以进行一些内联:

  • 在F#->IL级别-
    内联
    关键字允许您指定在生成.NET IL代码时应内联F#函数。在这种情况下,函数的IL指令将取代表示方法调用的IL指令

  • 在IL->汇编级别-这完全由JITter(.NET即时编译器)控制,它将IL(中间语言)编译为实际的可执行汇编代码。这是完全自动完成的,因此不能指定在此级别内联某些内容。但是,JITter还内联了一些简单调用(例如对属性getter和setter的调用)


表明它与C++内联功能基本相同,但由于在功能世界中键入,这一点更重要。谢谢。如果你想的话,你应该发布一个答案。假设在F#代码中添加一个[]属性仍然会阻止JIT编译器进行内联?