Erlang 的8个误区


Erlang编程时如何选用写法?何种写法更消耗资源?在线文档中《The Eight Myths of Erlang Performance》对其中一些用法做出澄清。

Myth: 函数调用方法fun()会比较慢:

  Truth:本地或者外部的函数调用是最快的 ( foo() m:foo() )
              apply方式的调用是前一种的3倍: ( apply(Fun, Args) )
              fun()方式调用与前一种速度近似
              外部apply方式最慢,大约6倍于第一种 ( apply(Mod, Fun, Args) )

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之前是的,之后编译器可以自己判断是否是未使用的变量了.



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值