阅读Array2D模块的源代码,我在许多核心函数的实现中偶然发现了这个有趣的结构,例如:
[<CompiledName("Get")>]
let get (array: 'T[,]) (n:int) (m:int) = (# "ldelem.multi 2 !0" type ('T) array n m : 'T #)
Run Code Online (Sandbox Code Playgroud)
我只能假设这是内联CIL的语法,这里使用它显然是为了获得性能优势.但是,当我尝试在程序中使用此语法时,出现错误:
warning FS0042: This construct is deprecated: it is only for use in the F# library
Run Code Online (Sandbox Code Playgroud)
究竟是什么?有没有详细的文件?
Joh*_*mer 20
我认为这有两个目的:
Add
高性能方式定义多态函数的一些额外技巧,这对于F#类型系统来说很难.您实际上可以使用它,但您必须在代码中指定--compiling-fslib
(未记录的)和--standalone
标志.
我在usenet档案中找到了一些细节:http://osdir.com/ml/lang.fsharp.general/2008-01/msg00009.html
在F#代码中嵌入IL.是否正式支持此功能
并不是的.此功能的99.9%用于FSharp.Core.dll中定义的操作(在1.9.2.9及之前称为fslib.dll).
从历史上看,允许最终用户嵌入IL以便访问F#库或使用自己的嵌入式IL的语言结构无法访问的.NET IL功能是非常有用的.由于F#库已经成熟了一些,因此对此的需求变得越来越罕见,实际上几乎不存在.我们希望情况继续如此.我们甚至有可能在F#的"产品"版本中将其作为仅限库的功能,尽管我们尚未在这方面做出最终决定.
这是来自Don Syme的消息,日期为2008年1月.
归档时间: |
|
查看次数: |
1415 次 |
最近记录: |