F # специальные кавычки?(##) - PullRequest
12 голосов
/ 04 мая 2011

Я только что столкнулся http://frankniemeyer.blogspot.com/2010/04/minimalistic-native-64-bit-array.html Который содержит строку

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

Я полагаю, что техническая фраза "какого чёрта?" Я никогда не сталкивался с программированием на F # (~ 8 месяцев), что-то похожее на это ...

FSI говорит мне что-то о устаревших конструкциях, используемых только для F # libs ...

И Google с (# делает э-э ... ну, не очень

Есть ли какое-либо направление в этом?

Ответы [ 3 ]

8 голосов
/ 04 мая 2011

Это обозначение для встроенной эмиссии IL. Раньше это была более заметная особенность в ранние годы F #, но она устарела. Джентльмен по имени Брайан из команды F # указал, что в настоящее время он используется главным образом для начальной загрузки компилятора F #, и что команда намеревалась пометить эту конструкцию как ошибку, а не просто как предупреждение.

См. Его пост здесь для полной истории.

4 голосов
/ 04 мая 2011

Это встроенный код IL (промежуточный язык).Эта конструкция используется командой F # для реализации битов базовой библиотеки F #, которую вы просто не можете сделать другим способом.Этот код допускает предупреждение о том, что его не следует использовать нигде, кроме библиотек ядра F #, поэтому вам, вероятно, не нужно слишком беспокоиться об этом, так как он никогда не должен появляться в рабочем коде.

3 голосов
/ 05 мая 2011

Захватывающий. Но я думаю, что 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)))
...