Подтвердить что ты не робот

Специальные предложения 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... ну, не так много

Любое направление в этом?

4b9b3361

Ответ 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)))