Специальные предложения F #? (##)
Я просто натолкнулся
http://frankniemeyer.blogspot.com/2010/04/minimalistic-native-64-bit-array.html
Которая содержит строку
(# "sizeof !0" type('T) : nativeint #)
Я считаю, что техническая фраза - "что, черт возьми?" Я никогда в своем (~ 8 месяцев) программирования F # не перебегал к чему-то даже напоминающему это...
FSI сообщает мне что-то об устаревших конструкциях, используемых только для F # libs...
И google с (# does uh... ну, не так много
Любое направление в этом?
Ответы
Ответ 1
Это обозначение для inline IL-излучения. Раньше это была более заметная особенность в предыдущие годы F #, но она устарела. Джентльмен по имени Брайан из команды F # указал, что в настоящее время он используется главным образом для загрузки компилятора F # и что команда намеревалась маркировать эту конструкцию как ошибку, а не просто предупреждение.
Смотрите его сообщение здесь для полной истории.
Ответ 2
Это встроенный код IL (промежуточный язык). Эта конструкция используется внутри команды F # для реализации бит базовой библиотеки F #, которую вы просто не можете сделать другим способом. Этот код допустит предупреждение, в котором говорится, что он не должен использоваться ни в каких других местах, кроме основных библиотек F #, поэтому вам, вероятно, не придется слишком беспокоиться об этом, поскольку он никогда не должен появляться в производственном коде.
Ответ 3
Захватывающий. Но я думаю, что F # уже дает нам операции преобразования (для этой конкретной операции!), Вам нужно, не прибегая к ИЛ.
[<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)))