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 推出
CEAN Packaged Applications 那里可以提供5种应用
- Erlang/OTP Full
- Erlang/OTP Light
- Ejabberd XMPP Server
- Yaws Web Server
- Erlyweb Framework
一个简单的列表操作性能测试
Note:首先要了解,Erlang里面的列表,比如 [1,2,3,4],其实是这样的方式来存储 [1,[2,[3,[4]]]],因此在头部插入一个元素,很简单,但是在尾部插入就比较困难了。
闲来对Erlang中的2个列表操作进行了测试,先上代码:
- -module(test_list).
- -compile(export_all).
- main() ->
- test_concat(),
- test_flatten(),
- test_append_tail(),
- test_append_header().
- test_concat() ->
- statistics(wall_clock),
- test_concat(1000000).
- test_concat(0) ->
- {_, Duration} = statistics(wall_clock),
- io:format("Concat Duration ~pms~n", [Duration]),
- ok;
- test_concat(N) ->
- "<title>" ++ integer_to_list(N) ++ "</title>",
- test_concat(N-1).
- test_flatten() ->
- statistics(wall_clock),
- test_flatten(1000000).
- test_flatten(0) ->
- {_, Duration} = statistics(wall_clock),
- io:format("Flatten Duration ~pms~n", [Duration]),
- ok;
- test_flatten(N) ->
- lists:flatten(["<title>",integer_to_list(N),"</title>"]),
- test_flatten(N-1).
- test_append_tail() ->
- statistics(wall_clock),
- test_append_tail(100000).
- test_append_tail(0) ->
- {_, Duration} = statistics(wall_clock),
- io:format("Append tail Duration ~pms~n", [Duration]),
- ok;
- test_append_tail(N) ->
- append_last([], 97, 122),
- test_append_tail(N-1).
- append_last(List, N, N) ->
- List ++ [N];
- append_last(List, Curr, N) ->
- append_last(List ++ [Curr], Curr+1, N).
- test_append_header() ->
- statistics(wall_clock),
- test_append_header(100000).
- test_append_header(0) ->
- {_, Duration} = statistics(wall_clock),
- io:format("Append header Duration ~pms~n", [Duration]),
- ok;
- test_append_header(N) ->
- append_header_and_reverse([], 97, 122),
- test_append_header(N-1).
- append_header_and_reverse(List, N, N) ->
- lists:reverse([N|List]);
- append_header_and_reverse(List, Curr, N) ->
- 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> c(test_list).
- {ok,test_list}
- 2> test_list:main().
- Concat Duration 1637ms
- Flatten Duration 6743ms
- Append tail Duration 2144ms
- Append header Duration 624ms
- ok
- 3> c(test_list, [native]).
- {ok,test_list}
- 4> test_list:main().
- Concat Duration 863ms
- Flatten Duration 6084ms
- Append tail Duration 1974ms
- Append header Duration 362ms
- ok
可见,使用 ++ 合并列表,比使用 lists:flatten() 高效;而使用[H|T]再lists:reverse()的方式比 ++ 高效。使用HIPE编译后,++操作和[H|T]操作的性能也得到了较大的提高。
经常在Erlang的程序代码里面看到类似
- foo([], List) ->
- lists:reverse(List);
- foo([H|T], List) ->
- ...
- 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的模版,加上它?


Recent Comments