Erlang-China

erlang 中文社区

Erlang Gtalk 讨论群10月份聊天记录


Erlang Gtalk 群 10 月份聊天记录整理


一场 yufeng 与 TrustNo1 的对话


2007.10.29,知名人士TrustNo1和yufeng在Gtalk中就Erlang进行了短暂的聊天,现在将聊天记录进行整理后发表。粗体部分为本小编根据话题的侧重点所制定的主题。

人物介绍:
TrustNo1:又名T1,Erlang的早期推动者,在《程序员》杂志上发表了《一场茶杯里的风暴》一文,使得Erlang在国内开始为人所知。目前正在与Erlang-China站长jackyz共同翻译《Programming Erlang》一书。
yufeng:一名从事高性能网络服务器开发多年的“老程序员”,对Erlang的底层研究非常透彻,国内Erlang社区的领军人物之一,Blog地址为 http://mryufeng.javaeye.com/ 。

为何看好Erlang

Yufeng: erlang你主要看好它什么?这个对erlang的定位决定了 erlang的使用领域

T1: 实际上,对于erlang我觉得你了解的应该比我深入很多.实际上我对erlang的原始兴趣并非是concurrent.而是基于语言理论,从我的视角来看,我觉得是lambda calculus在并发上是有先天优势的.打个不好听的比方,java和C++在并发上的区别实际是猴子和猩猩的区别,而erlang和C++的区别是,人和猩猩的区别.

Yufeng: en,我非常赞同你的比喻。。其实 我之前做过软交换系统 c++的 用的也是和erlang一样的思想,只不过 erlang是个成型的系统 而我们自己的东西是个工具,所以规模和稳定都不如人家。不过国内的fp教育好像还没有展开 就看大侠你了

Erlang 正处于转型期

T1: 我觉得也不尽然,erlang是一个很特殊的语言.大多数的语言的目标都是general language.而erlang可以说是一种domain language.他的本源应该就是像你自己的电信开发库一样是一组工具,现在已经进化成了一个语言。现在的erlang处于一个转型期,从一个domain language向general languge转变,这是以往的语言从来没有经历过的。

Yufeng: 现在erlang是在转型 想易用性和通用性在靠拢。erlang的社区开发参与力度还是不够 开发的速度很慢,eep才刚出来几个月

T1: 我觉得这也难怪了,本来就是一个相对封闭的社区

Yufeng: 连svn 或者cvs 都不开放 搞不清楚他们想什么

T1: 而且负责人的都是专著电信领域的人,对于易用型和通用性的理解是和外界有很大差别的

Yufeng: 恩 是这样的 活跃的用户都是这个电信的 要不就是搞大型服务如网游的

T1: 比如那个record语法,十几个版本下来了,还是那么罗嗦,而且一直都是低优先级的

Yufeng: record是比较啰嗦 而且是预处理的

T1: 在他们的心里,可能SMP之类的事情更重要

Yufeng: 很不爽的样子 估计是怕改动太大 不用投入时间和精力改。smp是最直接的利益,R12B里面就对lock作了很大的抽象和调整

T1: 所以啊,他们和ruby那些人的观念完全颠倒过来的

Yufeng: dist方面基本已经稳定了。恩 主要现在还是ericission的那帮人在主持开发,社区力量还不壮大 还不能影响开发的决策

T1: 不过大致上来说已经非常不错了,很多东西都可以绕开

Erlang拥有强大的工具

Yufeng: 用起来开发对口的领域还是蛮爽的 开发 部署 维护的 工具都比较齐备。其他平台 很少有这个特性

T1: 是的,

Yufeng: 我看好它是 更看好开发 部署 维护的 工具 省了好多功夫

T1: 这一点是毋庸置疑的

Yufeng: 以前自己亲手打磨这些工具 累死了,总算解放了 呵呵。我想p2p方面的应用 erlang其实也是不错的 erlang的核心够小,p2p主要是节点间通讯和管理,这个erlang已经非常强大了,奇怪的是为什么没有人尝试

T1: 但是有些东西也是可以看到的,比如说软件服务。一个web的字处理软件,如何在服务器端进行搜索,全文比对?

Yufeng: 这个还得发明些分布和并发的算法才好用

一门基于服务的语言

T1: 现在的软件服务只能管理客户的存储资源,但是根本无法解决如何管理客户的计算资源

Yufeng: 恩 是这样的 都还比较低级阶段。google搞了这么多年 才起步

T1: 我交了每月60块钱,要执行一个搜索任务能够获得几个并行thread的效率?这些问题在其他的语言里面都无法解决的

Yufeng: 是呀 这个是erlang的卖点。资源如何使用是可以精确估计的 和实施的,这个和elrang出身电信应用 有很大关系

T1: 是的

Yufeng: 读其代码就知道 erlang的很多代码都是为了统计 分析 诊断 而写的附加代码,其他的语言和系统就没有这么重视。电信应用还是嵌入式的 比较资源受限,他们就的算计比较清楚

T1: en,基于服务的语言

关于推广和需求

Yufeng: 你现在有在作基于erlang的应用码?

T1: 没有,公司情况不允许

Yufeng: 恩 没有看的见的成功案例 大工程一般老板都不敢贸然尝试

T1: 说服周围人也很难

Yufeng: 所以要靠出书 把社区搞大 说服力大些

T1: 主要还是需求不足吧

Yufeng: 感觉需求还是可以的 就是有需求的人在观望

T1: 怎么说

Yufeng: 还要就是还没有熟悉到很够驾驭erlang。在观望 就是看别人的successful story

T1: 你说需求还可以怎么说

Yufeng: 其实这么人多服务器程序 如果用erlang写都是几百行的事情。其实只要和网络相关的公司 都用的到各种各样的服务器的

T1: 趋势是这个趋势。但是很多应用还不是非到用erlang不可的底部

Yufeng: 你只要易用性和宣传够的花 他们自然就会用。那倒是 python 什么的挺好,但是用的人一多 自然就会影响别人的判断,而且erlang写出来的服务器程序 比一般人费心费力用c, c++ 写的运行效率都高很多,开发效率也高 感觉在这方面的流行是迟早的事情 这是我的个人理解

T1: 恩,我也这么看,但是不一定所有的程序都要用牛刀

Yufeng: 恩 只求说大家认识到好 有需要懂的用就OK了


Erlang Gtalk 讨论群9月份聊天记录


9月份聊天记录,全2000多行,杀猫慎入:)


Erlang Gtalk 讨论群8月份聊天记录


Gtalk 讨论群上面都是比较活跃的,大家的讨论也不乏亮点,现在整理出技术讨论的部分,方便大伙


CEAN 1.3 推出


http://cean.process-one.net

CEAN Packaged Applications 那里可以提供5种应用

  1. Erlang/OTP Full
  2. Erlang/OTP Light
  3. Ejabberd XMPP Server
  4. Yaws Web Server
  5. Erlyweb Framework

一个简单的列表操作性能测试


Note:首先要了解,Erlang里面的列表,比如 [1,2,3,4],其实是这样的方式来存储 [1,[2,[3,[4]]]],因此在头部插入一个元素,很简单,但是在尾部插入就比较困难了。

闲来对Erlang中的2个列表操作进行了测试,先上代码:

  1. -module(test_list).
  2. -compile(export_all).
  3.  
  4. main() ->
  5. test_concat(),
  6. test_flatten(),
  7. test_append_tail(),
  8. test_append_header().
  9.  
  10. test_concat() ->
  11. statistics(wall_clock),
  12. test_concat(1000000).
  13.  
  14. test_concat(0) ->
  15. {_, Duration} = statistics(wall_clock),
  16. io:format("Concat Duration ~pms~n", [Duration]),
  17. ok;
  18. test_concat(N) ->
  19. "<title>" ++ integer_to_list(N) ++ "</title>",
  20. test_concat(N-1).
  21.  
  22. test_flatten() ->
  23. statistics(wall_clock),
  24. test_flatten(1000000).
  25.  
  26. test_flatten(0) ->
  27. {_, Duration} = statistics(wall_clock),
  28. io:format("Flatten Duration ~pms~n", [Duration]),
  29. ok;
  30. test_flatten(N) ->
  31. lists:flatten(["<title>",integer_to_list(N),"</title>"]),
  32. test_flatten(N-1).
  33.  
  34. test_append_tail() ->
  35. statistics(wall_clock),
  36. test_append_tail(100000).
  37.  
  38. test_append_tail(0) ->
  39. {_, Duration} = statistics(wall_clock),
  40. io:format("Append tail Duration ~pms~n", [Duration]),
  41. ok;
  42. test_append_tail(N) ->
  43. append_last([], 97, 122),
  44. test_append_tail(N-1).
  45.  
  46. append_last(List, N, N) ->
  47. List ++ [N];
  48. append_last(List, Curr, N) ->
  49. append_last(List ++ [Curr], Curr+1, N).
  50.  
  51.  
  52. test_append_header() ->
  53. statistics(wall_clock),
  54. test_append_header(100000).
  55.  
  56. test_append_header(0) ->
  57. {_, Duration} = statistics(wall_clock),
  58. io:format("Append header Duration ~pms~n", [Duration]),
  59. ok;
  60. test_append_header(N) ->
  61. append_header_and_reverse([], 97, 122),
  62. test_append_header(N-1).
  63.  
  64. append_header_and_reverse(List, N, N) ->
  65. lists:reverse([N|List]);
  66. append_header_and_reverse(List, Curr, N) ->
  67. append_header_and_reverse([Curr|List], Curr+1, N).

test_concat() 和 test_flatten(),测试使用 ++ 构造一个 list,和使用 lists:flatten() 构造list的开销;test_append_tail() 和 test_append_header(), 测试使用 ++ 和 [H|T]再lists:reverse() 方式将大量字符构造成一个列表的开销。

  1. 1> c(test_list).
  2. {ok,test_list}
  3. 2> test_list:main().
  4. Concat Duration 1637ms
  5. Flatten Duration 6743ms
  6. Append tail Duration 2144ms
  7. Append header Duration 624ms
  8. ok
  9. 3> c(test_list, [native]).
  10. {ok,test_list}
  11. 4> test_list:main().
  12. Concat Duration 863ms
  13. Flatten Duration 6084ms
  14. Append tail Duration 1974ms
  15. Append header Duration 362ms
  16. ok

可见,使用 ++ 合并列表,比使用 lists:flatten() 高效;而使用[H|T]再lists:reverse()的方式比 ++ 高效。使用HIPE编译后,++操作和[H|T]操作的性能也得到了较大的提高。

经常在Erlang的程序代码里面看到类似

  1. foo([], List) ->
  2. lists:reverse(List);
  3. foo([H|T], List) ->
  4. ...
  5. foo(T, [H|List])

这样的代码,里面就是使用了头部插入,然后反转列表的方式。


当Erlang遇上C++


既然上一篇八卦谈到了Erlang在爱立信里面的地位(C++至高,B教主满塞),这里就介绍一个PPT
《Comparing C++ and Erlang for Motorola Telecoms Software》http://www.erlang.se/euc/06/proceedings/1600Nystrom.ppt ,有兴趣的下载看看
里面以一个纯C++,一个纯Erlang和一个C++ Erlang混杂的系统进行对比和测量,有丰富的图表

RQ4: Performance
*Time:
Max. throughput at 100% QoS:
Pure Erlang DM is twice as fast as C++ DM
Erlang/C is ½ as fast as C++ DM , but still exceeds throughput requirements
Roundtrip times
Pure Erlang DM is three times as fast as C++ DM
Erlang/C is between 26% and 50% slower as C++ DM
*Space:
Pure Erlang and Erlang/C both have 170% greater memory residency due to (fixed size) 5Mb runtime system


【转】Erlang大全


http://www.cbel.com/erlang_programming_language/
这个站点里面提供了众多Erlang相关的资源索引


【转】探索 Erlang Abstract Form


Potian的Blog上面,有一系列对Erlang Abstract Form的深入研究。由于版权原因,这里只贴出地址。
源地址:agileprogrammer.blogspot.com
最近貌似blogspot被ban了,可以使用这个地址取代访问
www.pkblogs.com/agileprogrammer

p.s,如今对Erlang底层分析的文章还是相当的少啊,大部分都是一些Paper。


Erlang Search Engine


http://google.com/coop/cse?cx=010191726936039894090%3Aqfrt1ypt5ey
Jackz 能否编辑这个blog的模版,加上它?