看过第一章,继续第二章,由于有了Erlang的基础知识,这里就简略的翻一遍,作为完整的补充,不过,几位有经验的作者还是讲了不少我原来没留意过的地方,也值得记录一下,这里就只列出来我原来没注意过的觉得还不错的地方,就不做对于基础部分的详细罗列了。
比较实用的有一个是CTRL+G这个功能,可以通常通过两个节点来互相连接控制,比如一个是实际的运行系统的结点,通过这个功能可以达到远程连接控制的目的,不过我在Ubuntu上自带的Erlang上总是出错,普通的Erlang代码上好像没问题,现在想想估计是Ubuntu自带的Erlang省略了一些基本的功能的原因。正常的Erlang代码应该没问题的,因为毕竟公司的Erlang只是对标准Erlang做了几个很小的修改,就可以有那个功能了。
binary要学会使用,很好用,也很有实际的用处,atom注意的就是永远不会garbage回收,所以,注意点使用,别无限创造出来很关键。tuple的元素访问是constant时间的,所以,用tuple会比list访问的时候有效率,所以array库是用tuple来模拟实现的,其实内部多种集合类的数据结构都是用tuple底层实现的,当然了,常用的是record不过本质上是一样的就对了。
list注意连接的顺序,涉及内存构造,小的在左边,千万别++的连个巨大无比的,很慢。一个小的debug的技巧就是前边加个0省得就成了字符串了。
相等,分为严格相等的,和一般相等,不过,重点在于,有经验的人很少用相等,都去用pattern matching了。
函数,不仅名字,还有arity才决定了一个函数,原先不太留意这个概念,写一个抽取函数的函数的时候,只拿名字做参数,结果到后来恍然发现,arity也得参数丢进去,才又把接口通通从get_fun(FunName) 变成了get_fun({FunName, Arity})的形式,第一次的时候是有点忽略了。另外符号的比如++也是函数实现,跟Haskell有点相似的感觉。
shell的编译不同于普通的erlc的编译,很慢很慢,所以不要用shell里的作为时间方面的测量,好像犯过这个毛病,只怪那时候不太知道,所以,测量的话,可以丢入一个module当中,再去做同样的工作就可以了。
变量的命名,也不是越长越好,这点应该后续加以注意,可以参考比如代码大全,里边特意提到变量命名了,也应该参考公司大牛的代码,包括Erlang本身标准库,都是命名,简短清晰很关键,别老像我似的,每次的名字好几个单词长,注意一下。
list的匹配,可以前边几个值单独列出来,就挨个匹配了,简单的例子比如common test匹配_SUITE结尾名字,就那么用的。
确定前边排除了true的时候,后边只有false的时候,也应该显式的标记出来false便于清晰,也便于日后修改的,更明显,而且,不是true的话,防止漏网过去,早出错,早crash便于调试也。
higher order function涉及丢过来的函数不同,就能达到不同的效果,经典的对比可以比较比如strategy pattern就在head first design pattern第一章讲的,无非在OO里就是复合个对象进来达到变化,functional里直接想做什么,就把那个操作作为函数传入,就能够相应的变化了,十分方便,也是更OO的区别和联系的地方了。
预处理的所做,包括了几件事情,比如EUnit就是在预处理的时候插入了需要export的函数,还是有点意思的,可以带上p选项的编译,还能看到预处理之后的结果,更能实际的感受到,毕竟具体的生成出来的代码,比抽象的概念好的多。
process的dictionay简单概括就是不要用,要用后续的可以用ETS存储,不到20个可以list超过20个就ETS划算了,所以ETS也是应该常用的一个实用的工具。
函数的参数不同,形成了不同的函数,这样,简单的参数可以做前端,后边套入复杂的函数,加入一些默认的参数,这个是OTP里常用的技巧,也能帮助达到尾递归的目的,这里对尾递归还是做了相当详细的解释,可以好好看看。当然了,对于企业来说,还是清晰快速,最重要的是能工作就好,毕竟值得优化的地方,少之又少,而且优化一处,可能胜过别处很多小的优化,当然尾递归很重要,别把系统内存耗光才是主要的。
分享到:
相关推荐
erlang otp in action 代码
erlang otp25 win安装包
Erlang and OTP in Action Martin Logan, Eric Merritt, and Richard Carlsson MEAP Began: August 2008 Softbound print: May 2010 (est.) | 500 pages ISBN: 1933988789 Part One: Getting Past Pure Erlang; ...
总的来说,"erlang-otp-win64位 25.3版本"的安装是部署RabbitMQ等基于Erlang OTP技术的应用的第一步。理解Erlang OTP的特性和RabbitMQ的工作原理,能够帮助开发者更好地利用这些工具构建高效、可靠的系统。在实际...
Erlang OTP(Open Telephony Platform)是一种开源的编程语言和框架,专为构建高度并发、分布式和容错系统而设计。"Erlang otp_win64_21.2.exe" 是Erlang OTP在Windows 64位平台上的一个特定版本,编号为21.2。这个...
Erlang OTP (Open Telephony Platform) 是一种高级并发编程语言和框架,主要由瑞典电信设备制造商Ericsson开发,用于构建高度可靠、可扩展和实时的分布式系统。Erlang OTP 25.0是该平台的一个版本,特别针对Windows ...
Erlang/OTP 26.2.1,Erlang,OTP,26.2.1
Erlang OTP是Erlang编程语言的核心组成部分,它提供了分布式计算、并发处理、热代码升级和容错恢复等一系列强大的功能。在安装RabbitMQ,一个广泛使用的开源消息代理和队列服务器之前,通常需要先安装Erlang环境。...
erlang otp学习文档 学习还不错的
[Manning Publications] Erlang and OTP in Action (E-Book) ☆ 出版信息:☆ [作者信息] Martin Logan, Eric Merritt, Richard Carlsson [出版机构] Manning Publications [出版日期] 2010年12月05日 [图书...
Erlang OTP 20.3 是一个针对Linux CentOS系统的软件包,主要为开发者提供了一个强大的并发和分布式计算环境。Erlang是一种静态类型的、函数式的编程语言,它以其在处理高并发、容错和实时系统方面的优秀表现而闻名。...
Erlang/OTP Application完整例子,含代码和二进制,对于学习Erlang/OTP Application很有帮助。 配套文章http://blog.csdn.net/mycwq/article/details/12610677
读书笔记:ErlangOTP设计原则中文文档
Erlang OTP (Open Telephony Platform) 是一个用于构建高度并发、分布式和容错系统的软件框架,由瑞典的Ericsson公司开发。OTP提供了一个强大的编程环境,特别适合于实时通信系统和大规模网络应用。在本场景中,"otp...
Erlang OTP(Open Telephony Platform)是一种由Ericsson开发的开源软件框架,主要用于构建高度可扩展、容错性强的分布式系统。OTP 21.3是Erlang的一个特定版本,它包含了Erlang虚拟机(BEAM)、标准库和其他相关...
在Windows 64位平台上,Erlang OTP提供了exe安装程序,如"otp_win64_21.3.exe"和"otp_win64_22.exe",分别代表Erlang OTP的21.3和22两个版本。 1. **Erlang语言特性** - **并发性**:Erlang采用轻量级进程模型,每...