相关疑难解决方法(0)

在F#中使用`inline`

inline在我看来,F#中的关键字与我在例如C中使用的目的有些不同.例如,它似乎影响函数的类型(什么是"静态解析的类型参数"?不是所有的F#类型静态解决?)

inline什么时候应该使用功能?

f# types inline

64
推荐指数
4
解决办法
7509
查看次数

C#/ F#性能比较

Web上是否有可用的C#/ F#性能比较来显示新F#语言的正确用法?

.net c# performance f#

54
推荐指数
3
解决办法
3万
查看次数

FSharp运行我的算法比Python慢

几年前,我通过动态编程解决了一个问题:

https://www.thanassis.space/fillupDVD.html

解决方案是用Python编写的.

作为拓展视野的一部分,我最近开始学习OCaml/F#.有什么更好的方法来测试水域,而不是直接将我用Python编写的命令式代码移植到F# - 并从那里开始,逐步向功能性编程解决方案迈进.

第一个直接端口的结果令人不安:

在Python下:

  bash$ time python fitToSize.py
  ....
  real    0m1.482s
  user    0m1.413s
  sys     0m0.067s
Run Code Online (Sandbox Code Playgroud)

在FSharp下:

  bash$ time mono ./fitToSize.exe
  ....
  real    0m2.235s
  user    0m2.427s
  sys     0m0.063s
Run Code Online (Sandbox Code Playgroud)

(如果您注意到上面的"mono":我在Windows下测试过,使用Visual Studio - 速度相同).

至少可以说,我......感到困惑.Python比F#运行代码更快?使用.NET运行时编译的二进制文件运行SLOWER而不是Python的解释代码?!?!

我知道VM的启动成本(在这种情况下为单声道)以及JIT如何改进Python等语言的东西,但仍然......我期望加速,而不是减速!

我也做错了吗?

我在这里上传了代码:

https://www.thanassis.space/fsharp.slower.than.python.tar.gz

请注意,F#代码或多或少是Python代码的直接逐行转换.

PS当然还有其他的好处,例如F#提供的静态类型安全性 - 但如果在F#下强制算法的结果速度更差......至少可以说,我很失望.

编辑:根据评论中的要求直接访问:

Python代码:https: //gist.github.com/950697

FSharp代码:https: //gist.github.com/950699

python algorithm performance f# dynamic-programming

40
推荐指数
3
解决办法
9301
查看次数

F#似乎比其他语言慢......我能做些什么来加快速度?

我喜欢F#; 我真的,真的.被"函数式编程"咬了之后,我强迫自己在有机会的时候使用它.事实上,我最近使用它(在一个星期的休假期间)来编写一个很好的AI算法.

但是,我尝试到目前为止(见与我第一次尝试一个SO问题在这里)似乎表明,虽然无疑是美丽的...... F#有我用过的所有语言中最慢的执行速度.

我在代码中做错了吗?

我在博客文章中详细解释了我的所作所为,在我的实验中,我看到OCaml和其他组的运行速度比F#快5到35倍.

我是唯一一个有这种经历的人吗?我觉得令人沮丧的是,我最喜欢的语言也是最慢的 - 有时到目前为止......

编辑:直接GitHub链接,代码以各种语言形式存在...

编辑2:感谢托马斯和丹尼尔,速度大大提高:

  • 最大的速度提升:从"参考"转变为"可变"提供了高达30%的速度.
  • 删除异常并使用while/flagChecks给了另外16%.
  • 从歧视的工会转向枚举,又增加了5%.
  • "内联"给出了0.5-1%

编辑3:Jon Harrop博士加入了战斗:60%的加速,使得ScoreBoard直接在"枚举"版本的数据上运行.现在,F#的命令版本运行速度比C++慢3-4倍,这对于基于VM的运行时来说是一个很好的结果.我认为问题解决了 - 谢谢你们!

EDIT4:在合并所有优化之后,这些就是结果(F#以命令式的方式达到C# - 现在,如果我只能做一些关于功能风格的话!)

  • 真正的0m0.221s:那是C++
  • 真正的0m0.676s:那是C#(命令式,C++镜像)
  • 真正的0m0.704s:那是F#(命令式,C++镜像)
  • 真正的0m0.753s:那是OCaml(命令式,C++镜像)
  • 真正的0m0.989s:那是OCaml(功能)
  • 真正的0m1.064s:那是Java(势在必行)
  • 真正的0m1.955s:那是F#(功能)

performance benchmarking f#

27
推荐指数
2
解决办法
3945
查看次数