我刚跑过去 http://frankniemeyer.blogspot.com/2010/04/minimalistic-native-64-bit-array.html 其中包含
行(# "sizeof !0" type('T) : nativeint #)
我相信技术短语是“什么事?”我从未在我的(约8个月)的F#编程中遇到过类似于......的事情......
FSI告诉我一些弃用的构造,仅用于F#libs ...
和谷歌一起(#呃呃......好吧,不多了
这方面的任何方向?
答案 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)))