代码之家  ›  专栏  ›  技术社区  ›  Joan Venge

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

  •  2
  • Joan Venge  · 技术社区  · 15 年前

    当我读到f的时候,他们在谈论内联方法,但是我认为.net没有向程序员公开这个功能。如果它暴露了,那么它一定在IL里?那么C也能利用它吗?

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

    3 回复  |  直到 12 年前
        1
  •  6
  •   Tomas Petricek    15 年前

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

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

    • 在IL->程序集级别 -这完全由jitter(.net即时编译器)控制,后者将il(中间语言)编译为实际的可执行程序集代码。这是完全自动完成的,因此您不能指定应该在此级别内联某些内容。但是,jitter也会内联一些简单的调用(例如对属性getter和setter的调用)。

        2
  •  6
  •   Brian    15 年前

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

        3
  •  4
  •   Tanzelax    15 年前

    我想我会贴出答案…我真的不想这么做,因为除了基本知识之外,我对F一无所知。P

    http://msdn.microsoft.com/en-us/library/dd548047%28VS.100%29.aspx