12

我刚刚遇到 http://frankniemeyer.blogspot.com/2010/04/minimalistic-native-64-bit-array.html 其中包含该行

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

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

FSI 告诉我一些关于不推荐使用的构造,仅用于 F# 库......

和谷歌(#确实呃......好吧,不多

这有什么方向吗?

4

3 回答 3

8

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

有关完整故事,请参阅他的帖子

于 2011-05-04T19:00:25.067 回答
4

它是内联 IL(中间语言)代码。F# 团队内部使用此构造来实现 F# 核心库的某些部分,您无法以任何其他方式执行此操作。此代码将承认一条警告,指出它不应在 F# 核心库以外的任何地方使用,因此您可能不必太担心它,因为它永远不会出现在生产代码中。

于 2011-05-04T18:36:34.367 回答
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)))
于 2011-05-05T02:01:56.957 回答