F#特别报价? (##)

时间:2011-05-04 18:27:26

标签: f# quotations

我刚跑过去 http://frankniemeyer.blogspot.com/2010/04/minimalistic-native-64-bit-array.html 其中包含

(# "sizeof !0" type('T) : nativeint #)

我相信技术短语是“什么事?”我从未在我的(约8个月)的F#编程中遇到过类似于......的事情......

FSI告诉我一些弃用的构造,仅用于F#libs ...

和谷歌一起(#呃呃......好吧,不多了

这方面的任何方向?

3 个答案:

答案 0 :(得分:8)

这是内联IL发射的符号。它曾经是F#早期的一个更突出的特点,但已被弃用。来自F#团队的一位名叫Brian的绅士表示,它目前主要用于引导F#编译器,并且该团队曾打算将此构造标记为错误,而不仅仅是警告。

查看他的帖子here了解完整的故事。

答案 1 :(得分:4)

它是内联IL(中间语言)代码。 F#团队在内部使用此构造来实现您不能以任何其他方式执行的F#核心库的位。此代码将接受警告,说它不应该在F#核心库以外的任何地方使用,因此您可能不必担心它太多,因为它永远不会出现在生产代码中。

答案 2 :(得分:3)

魅力。但我认为F#已经为我们提供了转换操作(对于这个特定的操作!),而不需要求助于IL。

[<Unverifiable>]
let inline ArrayOffset (itemSize:int64) (length:int64) (start:int64) (idx:int64) = 
    if idx < 0L || idx >= length then raise(IndexOutOfRangeException())
    NativePtr.ofNativeInt(nativeint(start + (idx * itemSize)))