当我阅读F#的东西时,他们正在谈论内联方法,但我认为.NET并没有向程序员公开这个功能。如果它暴露,那么它必须在IL? C#也可以使用它吗?F#确实允许指定哪些函数在代码中内联?
只是想知道这件事是否与C++内联功能相同。
当我阅读F#的东西时,他们正在谈论内联方法,但我认为.NET并没有向程序员公开这个功能。如果它暴露,那么它必须在IL? C#也可以使用它吗?F#确实允许指定哪些函数在代码中内联?
只是想知道这件事是否与C++内联功能相同。
它实际上更加复杂是当相比于C++内联,因为F#工作在.NET,其具有IL作为中间语言的顶部,所以实际上存在两个层,其中一些内联可以做到:
在F# - > IL级别 - 关键字inline
允许您指定在生成.NET IL代码时应该内联F#函数。在这种情况下,函数的IL指令将被放置在代表方法调用的IL指令的位置。
在IL - >装配水平 - 这是通过抖动完全控制(.NET刚刚在时间编译器),其编译IL(中间语言),以实际的可执行的汇编代码。这是完全自动完成的,所以你不能指定在这个级别应该内联某些东西。但是,JITter也会嵌入一些简单的调用(例如调用属性获取器和设置器)。
假设向F#代码添加[
猜猜我会发布一个答案......并不是真的想这样做,因为我不知道任何有关F#的基础知识。 :P
http://msdn.microsoft.com/en-us/library/dd548047%28VS.100%29.aspx
要回答你的一些具体问题,inline
是F#特异的结构,它与两个类型的系统(例如静态成员约束)和代码生成(内嵌为了优化代码)进行交互。 F#编译器处理这些事情,并且有关内联的信息存储在程序集中的特定于F#的元数据中,从而使函数能够跨F#程序集边界内联。
http://msdn.microsoft.com/en-us/library/dd548047%28VS.100%29.aspx表明它大部分与C++内联功能相同,但由于键入更重要在功能世界中。 – Tanzelax 2010-02-10 00:44:00
现在感谢了。如果你愿意,你应该发表一个答案。 – 2010-02-10 00:45:37