Tag: ocaml

编程语言中的堆栈性能

只是为了好玩,我试图比较使用朴素递归算法计算Fibonacci系列的几种编程语言的堆栈性能。 代码在所有语言中都是相同的,我将发布一个java版本: public class Fib { public static int fib(int n) { if (n < 2) return 1; return fib(n-1) + fib(n-2); } public static void main(String[] args) { System.out.println(fib(Integer.valueOf(args[0]))); } } 好的,重点是使用输入40的算法我得到了这些时间: C: 2.796s Ocaml: 2.372s Python: 106.407s Java: 1.336s C#(mono): 2.956s 它们是在Ubuntu 10.04机器中使用官方存储库中可用的每种语言的版本,在双核英特尔机器上。 我知道像ocaml这样的函数式语言会因为将函数视为一阶公民而减速,并且没有问题来解释CPython的运行时间,因为它是这个测试中唯一的解释语言,但我对java运行印象深刻时间是同一算法的c的一半! 你会把它归因于JIT编译吗? 你会如何解释这些结果? 编辑:谢谢你的回复! 我认识到这不是一个合适的基准(从来没有说过:P)也许我可以做一个更好的基准,并根据我们讨论的内容下次发布给你 编辑2:我使用优化编译器ocamlopt更新了ocaml实现的运行时。 我还在https://github.com/hoheinzollern/fib-test上发布了测试平台。 如果你想要随意添加它:)