问题
A lot of array boundary checking slows down the speed, this is especially true to 2D arrays. Is there a way to write unsafe code blocks in F#?
回答1:
I'm not a F# programmer but as far as I can see it doesn't seem to have the unsafe keyword.
You could possibly get a performance boost by transforming the 2D array to an one-dimensional array.
Advice 5: Until we get this right, I would suggest that .NET users do what many C++ numerical programmers do: write a class to implement your n-dimensional array. This would be represented as a 1-dimensional array, and the relevant accessors would convert n indices into 1 via appropriate multiplications. We almost certainly wouldn’t eliminate the bounds check into the 1-d array, but at least we’d only do one check!
Array Bounds Check Elimination in the CLR
回答2:
See here for some ways to get the compiler to remove boundary checking for you. Basically, you need to write your loops in such a way that the compiler knows your indexes will be in bounds. If it knows it will be in bounds, then when you run in release mode without debugging, the JIT compiler will remove the bounds checks for you.
回答3:
I have not used it to know if/how it applies, but do check out the NativePtr module.
回答4:
Not in this version and I doubt they'll ever add it.
来源:https://stackoverflow.com/questions/3650067/does-f-have-equivalent-syntax-to-cs-unsafe-block