F#是否与C#的“不安全”块具有相同的语法

时间:2010-09-06 08:41:53

标签: c# .net arrays f#

许多数组边界检查会降低速度,对于2D数组尤其如此。有没有办法在F#中编写不安全的代码块?

4 个答案:

答案 0 :(得分:9)

我不是F#程序员,但据我所知,它似乎没有unsafe关键字。

通过将2D数组转换为一维数组,可以提高性能。

  

建议5:在我们做到这一点之前,我   会建议.NET用户做什么   许多C ++数值程序员都这样做:   写一个班来实现你的   n维数组。这将是   表示为一维数组,   和相关的访问者会   将n个索引转换为1个通过   适当的乘法。我们   几乎肯定不会消除   边界检查1-d数组,   但至少我们只做一次检查!

Array Bounds Check Elimination in the CLR

答案 1 :(得分:3)

有关让编译器为您删除边界检查的一些方法,请参阅here。基本上,您需要以编译器知道您的索引将在边界内的方式编写循环。如果它知道它将在边界内,那么当你在没有调试的情况下在发布模式下运行时,JIT编译器将为你删除边界检查。

答案 2 :(得分:2)

我没有用它来知道它是否适用,但是请查看NativePtr module

答案 3 :(得分:1)

不在此版本中,我怀疑他们是否会添加它。