当前的语言特征
Fail-fast(中文译为速错),即尽可能快的暴露程序中的错误。
面向并发的编程(COP concurrency-oriented programming)
函数式编程
动态类型
脚本语言
计算密集和图形密集任务用Java,高并发用Erlang
还有一个需要特别注意的是,erlang根本没有赋值的概念,只有匹配和绑定.erlang中的 =
号不要理解为赋值,在erlang中,=
的意思是匹配,就是=的左值和右值是相匹配的,不匹配就会报错,所以true =
assertA()就是true表达式值匹配assertA()表达式的值.如果assertA()求值结果不是true,那么自然匹配失败.http://www.javaeye.com/wiki/erlang
http://baike.baidu.com/view/2008440.htm
Erlang并发编程:http://svn.liancheng.info/cpie-cn/trunk/.build/html/part-i/index.html
http://developer.51cto.com/art/200811/97437.htm
http://www.builder.com.cn/2009/0219/1346244.shtml
http://erlide.sourceforge.net/update
那么为何Erlang在并发、分布式编程中如此受推崇?我认为因为它本身是并发和并行在语义、处理上的一致,所以它编写此类程序更加方便。同时,它提供的是一个关于并发、并行以及分布式的统一的解决方案,而不仅仅是高并发。它的目的是构建有容错能力、有伸缩性的可靠系统,同时又能最简化编程工作。这就是它的真正的优势。
同时Erlang还可以表示Ericsson Language
排名21到50的编程语言,排名第29位的Erlang语言以并发和多核计算擅长,在提倡云计算的今天值得我们关注。
目前,随着网络应用的兴起,对高并发、分布部署、持续服务的需求增多,Erlang的特性刚好满足这些需求,于是Erlang开始得到更多人的关注
目前,随着网络应用的兴起,对高并发、分布部署、持续服务的需求增多,Erlang的特性刚好满足这些需求,于是Erlang开始得到更多人的关注
Erlang是一个结构化,动态类型编程语言,内建并行计算支持。最初是由爱立信专门为通信应用设计的,比如控制交换机或者变换协议等,因此非常适合于构建分布式,实时软并行计算系统。
使用Erlang编写出的应用运行时通常由成千上万个轻量级进程组成,并通过消息传递相互通讯。进程间上下文切换对于Erlang来说仅仅只是一两个环节,比起C程序的线程切换要高效得多得多了。
使用Erlang来编写分布式应用要简单的多,因为它的分布式机制是透明的:对于程序来说并不知道自己是在分布式运行。
Erlang运行时环境是一个虚拟机,有点像Java虚拟机,这样代码一经编译,同样可以随处运行。它的运行时系统甚至允许代码在不被中断的情况下更新。另外如果你需要更高效的话,字节代码也可以编译成本地代码运行。
Erlang特性:
● 并发性 - Erlang支持超大量级的并发线程,并且不需要操作系统具有并发机制。
● 分布式 -
一个分布式Erlang系统是多个Erlang节点组成的网络(通常每个处理器被作为一个节点)
● 健壮性 -
Erlang具有多种基本的错误检测能力,它们能够用于构建容错系统。
● 软实时性-
Erlang支持可编程的“软”实时系统,使用了递增式垃圾收集技术。
●
热代码升级-Erlang允许程序代码在运行系统中被修改。旧代码能被逐步淘汰而后被新代码替换。在此过渡期间,新旧代码是共存的。
●外部接口-Erlang进程与外部世界之间的通讯使用和在Erlang进程之间相同的消息传送机制。
《Erlang
程序设计》主要涵盖顺序型编程、异常处理、编译和运行代码、并发编程、并发编程中的错误处理、分布式编程、多核编程等内容。本书将帮助读者在消息传递的基础上构建分布式的并发系统,免去锁与互斥技术的羁绊,使程序在多核CPU
上高效运行。本书讲述的各种设计方法和行为将成为为设计容错与分布式系统中的利器。
附录:Erlang资料
Erlang官方网站,建议订阅其邮件列表
分布式、并行计算语言Erlang 学习笔记
http://computebank.spaces.live.com/blog/cns!955689A6CF175077!326.entry
http://computebank.spaces.live.com/blog/cns!955689A6CF175077!356.entry
http://computebank.spaces.live.com/blog/cns!955689A6CF175077!439.entry
Erlang论坛
http://groups.google.com/group/erlang-china
Yariv's Blog: Adventures in Open Source Erlang
Erlang + Yaws vs. Ruby on Rails
http://yarivsblog.com/articles/2006/07/11/erlang-yaws-vs-ruby-on-rails
Erlang写的服务器Yaws,据说并发能是apache的15倍
Jabber: Open Instant Messaging and a Whole Lot More, Powered by
XMPP
一个Erlang的Jabber服务器实现
实际上有些算法从根本上来说是无法并行计算的。好在对于交易系统,我们可以对不同的策略用不同的进程来计算,这样象Erlang这种可以充分利用多核CPU的语言就可以弥补计算性能的不足。比如神经网络集群或者神经网络+遗传算法,蚁群算法等这些先天可以并行并相互通信的算法,Erlang也许特别适合。等我手头的项目差不多,我会做一些测试,比较Java,
Erlang在多核的情况下性能提升的情况,第一个例子可能会是神经网络集群,
对于交易系统中算法、神经网络的应用,我当然不会去走别人已经走过的不通的路,工具还是那个工具,但对市场本质的认识决定了使用工具的效果。