1. 前言
新项目采用Erlang进行开发,从学习到开发功能已经有两个月,在此写下自己对这门语言的一些使用感受
2. 优点
①. 由于天生支持分布式,不同Erlang进程间的同步异步通信非常方便,而且数据不需要做任何转换.
②. 自带的数据结构简单,掌握list,dict,tuple,record即可满足开发. 而且list和dict提供了比较主要的api函数,基本可以实现大部分需求.
③. 代码热更新很方便.
3. 缺点
①. 语言不提供return和break语义,导致函数和循环无法中途返回,当然这个可以用catch + throw解决.
②. 报错信息太不直观,一般报错信息只会提示出错的名称和行号,这个行号有时还不一定准确,如果是函数调用出错(function clause)还会有出错时实际参数的打印,出错之后,目前我更多是要靠自己经验到出错位置的上下文去寻找原因, 关于堆栈信息的打印有待进一步了解,而对现阶段的报错信息也需要自己进一步实践和总结。
③. 为一个功能写了复杂的修改数据结构代码后,需要写同样复杂的保存代码,这是因为函数式编程变量不可变导致的。
4. 项目实践做法
这里的做法仅是我个人总结出来的,仅供大家参考
①. 一个mod单独新建一个文件夹,文件根据内容可划分为
mod_rpc: 处理客户端数协议请求
mod_util: 辅助工具函数
mod_valid: 验证函数
mod_init: 数据初始化
mod_pack: 协议数据打包.
②. 如果有call和cast远程进程,有时候会需要修改目标进程的State,可以再添加两个接口,分别为state_call, state_cast以支持这种做法.
③. 一个玩家连接开辟一个logic process和一个socket process,玩家数据存储在进程字典, 定时对有修改的数据进行回写。
④. 需要落地的数据不要以record的形式直接存储,否则在record进行修改后,db数据加载到Erlang内存时会badmatch。 应该是自行编写数据转换函数,转换成简单的tuple或list形式后再存储。
⑤. 链式操作对象. 如果需要对一个对象进行连续的修改或访问操作,则函数调用入口传入对象,然后返回新的对象。
5. 总结
其实Erlang的优缺点很明显,天生支持分布式,为开发者编写分布式应用提供极大的方便,架构是其最大的优点; 而函数式编程所具备的特点,会令很多刚上手的同学无所适从,甚至觉得是个很大的缺点。 其实正是应用了函数式编程,Erlang才可以完美支持并发编程。 因为有架构上的先天优势,所以我觉得Erlang还是一门很好的语言,至于提到的一些缺点和不适用的地方,还是需要结合项目,自己编写一些工具去更好完善Erlang这一块的不足。
网友评论