Domanda
Ho appena attraversatohttp://frankniemeyer.blogspot.com/2010/04/minimalistic-native-64-bit-array.htmlChe contiene la linea
(# "sizeof !0" type('T) : nativeint #)
Credo che la frase tecnica sia "Che diamine?" Non ho mai nei miei (~ 8 mesi) di programmazione F# attraversare qualcosa anche simile a quello ...
FSI mi dice qualcosa sui costrutti deprecati, usati solo per le libs ...
E Google con (# fa ... beh, non molto
Qualche direzione in questo?
Soluzione
Questa è la notazione per l'emissione di IL in linea. Era una caratteristica più importante durante gli anni precedenti di F#, ma è stata deprecata. Un gentiluomo di nome Brian del team F# ha indicato che è attualmente utilizzato principalmente per bootstrap il compilatore F# e che il team aveva intenzione di contrassegnare questo costrutto come un errore, non solo un avvertimento.
Vedere il suo post qui Per la storia completa.
Altri suggerimenti
È in linea il codice IL (lingua intermedia). Questo costrutto è utilizzato internamente dal team F# per implementare bit della biblioteca F# Core non puoi fare in nessun altro modo. Questo codice ammetterà un avvertimento che dice che non dovrebbe essere usato in alcun modo se non dalle librerie F# Core, quindi probabilmente non devi preoccuparti troppo in quanto non dovrebbe mai apparire nel codice di produzione.
Affascinante. Ma penso che F# ci dia già le operazioni di conversione (per questa particolare operazione!) È necessario senza ricorrere a 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)))