阅读Array2D模块的来源,我在许多核心功能的实现中偶然发现了这个有趣的结构,例如:
[<CompiledName("Get")>]
let get (array: 'T[,]) (n:int) (m:int) = (# "ldelem.multi 2 !0" type ('T) array n m : 'T #)
我只能假设这是内联CIL的语法,这里使用它显然是为了获得性能优势。但是,当我尝试在程序中使用此语法时,出现错误:
warning FS0042: This construct is deprecated: it is only for use in the F# library
这是什么意思?有没有详细的文件?
答案 0 :(得分:20)
我认为这有两个目的:
Add
函数以获得一些额外的技巧,这对于F#类型系统来说很难。您实际上可以使用此功能,但您必须在代码中指定--compiling-fslib
(未记录的)和--standalone
标记。
答案 1 :(得分:8)
我在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#库无法访问的.NET IL功能 语言构造使用自己的嵌入式IL。对此的需求是 变得更加罕见,实际上几乎不存在,现在F# 图书馆已经成熟了一点。我们预计这将继续成为 案件。我们甚至有可能将其作为仅限库的功能 在F#的“产品”版本中,虽然我们尚未做出决定 这方面的决定。
这是来自Don Syme的消息,日期为2008年1月。