F#是否真的允许指定在代码中内联哪些函数?

Joa*_*nge 2 c# performance f# inline

当我在阅读F#的东西时,他们正在谈论内联方法,但我认为.NET没有向程序员公开这个功能.如果它被暴露,那么它必须在IL?那么C#也可以使用它吗?

只是想知道这个东西是否与C++内联功能相同.

Bri*_*ian 6

为了回答您的一些具体问题,inline是一个F#特定的构造,它与类型系统(例如静态成员约束)和代码生成(用于优化目的的内联代码)交互.F#编译器处理这些事情,有关内联的信息存储在程序集中的F#特定元数据中,这使得函数可以跨F#程序集边界内联.


Tom*_*cek 6

与C++内联相比,它实际上更复杂,因为F#在.NET之上工作,它有IL作为中间语言,因此实际上有两个层可以完成一些内联:

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

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