Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
F# 标准库实现中的(#…#)语法是什么?_F#_Cil - Fatal编程技术网

F# 标准库实现中的(#…#)语法是什么?

F# 标准库实现中的(#…#)语法是什么?,f#,cil,F#,Cil,在阅读Array2D模块的源代码时,我在实现许多核心功能时偶然发现了这个有趣的结构,例如: [<CompiledName("Get")>] let get (array: 'T[,]) (n:int) (m:int) = (# "ldelem.multi 2 !0" type ('T) array n m : 'T #) 这到底是什么?有详细的文档吗?我认为这有两个目的: 这些函数可以精确编译成1条CIL指令,这些指令必须在某个地方进行编码,因此在源代码处进行编码似乎是最好的

在阅读Array2D模块的源代码时,我在实现许多核心功能时偶然发现了这个有趣的结构,例如:

[<CompiledName("Get")>]
let get (array: 'T[,]) (n:int) (m:int) =  (# "ldelem.multi 2 !0" type ('T) array n m : 'T #)  

这到底是什么?有详细的文档吗?

我认为这有两个目的:

  • 这些函数可以精确编译成1条CIL指令,这些指令必须在某个地方进行编码,因此在源代码处进行编码似乎是最好的
  • 它允许一些额外的技巧,以高性能的方式定义多态
    Add
    函数,这在F#type系统中很难实现

  • 实际上,您可以使用它,但必须在代码中指定
    --编译fslib
    (未记录)和
    --standalone
    标志。

    我在usenet存档中找到了一些详细信息:

    在F#代码中嵌入IL。官方支持此功能吗

    不是真的。此功能的99.9%用于定义的操作 在FSharp.Core.dll中(在1.9.2.9及之前的版本中称为fslib.dll)

    历史上,允许最终用户按顺序嵌入IL是很有用的 访问F#库或服务器无法访问的.NET IL功能 语言构造使用自己的嵌入式IL。这是必要的 现在F# 图书馆已经成熟了一点。我们预计这将继续是最重要的 案例甚至有可能,我们将使它成为一个库唯一的功能 在F#的“产品”版本中,尽管我们尚未做出最终决定 这方面的决定


    这是Don Syme于2008年1月发来的一条消息。

    看起来像是一张困惑的脸,我理解好奇,但我认为这条警告只在F#library中使用,这是一个信号,我们任何人都不需要使用:-)你可能想把你发现的作为答案,而不是编辑成问题。酷,我已经编辑了这个问题,并将该部分移到了答案中。@OnorioCatenacci我想忽略它,但简单的现实是F#IntelliSense说我的一些let表达式具有这种类型。这似乎发生在我写的时候:
    let(a,b,c)=……
    太棒了!你在哪里找到了这些编译器选项?@e-i-s-有一个源文件,它把它们都放在了某个地方-虽然不太确定在哪里-在源代码中搜索
    独立的
    可能会有所帮助。这个答案并不能解释为什么某些VS2019 IntelliSense推断类型签名有
    (#a->单位)*float*SomeType list)
    -如果我遗漏了一些我应该从答案中推断出来的东西,我表示歉意。我想我已经弄明白了-#a是一个灵活的类型-接受a的任何子类型。这个答案不能解释为什么某些VS2019 IntelliSense推断类型签名有
    (#a->unit)*float*SomeType list)
    -如果我遗漏了一些我应该从答案中推断出来的东西,我表示歉意。我想我发现了-#a是一种灵活的类型-接受a的任何子类型。
    warning FS0042: This construct is deprecated: it is only for use in the F# library