Erlang编程时如何选用写法?何种写法更消耗资源?在线文档中《The Eight Myths of Erlang Performance》对其中一些用法做出澄清。
1 Myth: 函数调用方法fun()会比较慢:
2 Myth: List comprehension很慢
Truth:List comprehension内部使用递归函数处理,速度并不慢,但是比尾递归要略慢
3 Myth:尾递归一定快于递归
Truth:尾递归一般情况下是会快于普通递归的,但是这也取决于递归时使用栈的情况,在大多数情况下,普通递归在栈中分配的资源会多于尾递归时在堆中分配的资源,这就造 成了垃圾回收器更重的负担。但是在R12B之后的版本中,这个问题已经解决。
现在在solaris/sparc上,普通递归要更快些。 而在x86架构上,尾递归会快30%左右。
4 Myth:++是不良用法
Truth:++在使用时会拷贝左边的变量,所以左边尽量保持小的数据规模。
[H|Acc] 比 [H] ++ Acc 要快一些,因为节省了一次list的构造。 而Acc ++[H]的用法就更慢了。
5 Myth: String比较慢
Truth: 如果使用不当,就会慢。(但是如何算是使用不当呢?)
使用正则表达式的时候,应使用re而不是regexp。
6 Myth: 修复Dets文件很慢
Truth:这取决于文件中的数据项的多少
7 Myth: BEAM是基于栈和字节的虚拟机(因此会慢)
Truth:BEAM是基于寄存器的虚拟机
8:Myth: 如果变量未使用过,采用'_'的方式可以提升速度
Truth: R6B之前是的,之后编译器可以自己判断是否是未使用的变量了.