ITKeyword,专注技术干货聚合推荐

注册 | 登录

使用过Erlang的感想

ITcombox 分享于 2014-01-03

推荐:erlang behaviour小结之gen_server OTP入门

首先清楚gen_server提供C/S架构中的服务端的实现,即定义了自己一套规范的服务器框架。                                         在以上基础上,具体学习下gen_

2020腾讯云共同战“疫”,助力复工(优惠前所未有!4核8G,5M带宽 1684元/3年),
地址https://cloud.tencent.com/act/cps/redirect?redirect=1054

2020阿里云最低价产品入口,含代金券(新老用户有优惠),
地址https://www.aliyun.com/minisite/goods

对于自己接触过的东西,总想写点什么总结一下。虽然没有那些技术资深的博主写的东西深,但我觉得挺喜欢这种写总结,能帮自己理清楚一些东西,或许以前还没有想到的东西会豁然开朗,对于其他的面向对象高级语言,写一门脚本语言我个人觉得还是有许多可以借鉴并实现的地方。

写erlang不久,才写过几个月,但总体感觉,一开始会很不习惯。一个月之后等熟悉后会非常喜欢这门强大的脚本语言。我都在想用erlang写端游的服务器也没什么不好,高并发处理的很好,效率也够高。

erlang第一印象,简洁,她没有数据类型,只有{}和[]的组合形式。{}元组,[]列表 对比一下C与erlang写一个数据结构: struct Point {

int nPointX;

int nPointY; }PointObject;

erlang:以英文句号结尾,不是分号 point = {10, 10} .简单明了,结合json的数据格式就容易理解了。也可以{point, 10, 10},这种就类似于了{key--Value}. person = {person, {name, ITcombox}, {age, 23}, {height, 1.70}, {footsize, 40}}.

另外一个就是列表[]:列表通常用于组合和解析一个复合形式的数据格式,{}和[]的组合精髓在于匹配。 X = [1,2,3,4,5]. Y = X. Y = [H | T],其中H代表列表的第一个元素,T代表剩下的所有元素,巧妙的使用H和T的关系就可以提取出想要的数据。 TeamMember = [{combox, {age, 23}, {height, 1.70}},{com, {age 20}, {height, 1.78}},{box, {age, 22}, {height, 1.88}}]. 如果有使用过json,或者使用过lua的应该很容易理解。应该大部分能写业务逻辑的脚本语言都是这样的数据结构。

其实,我被她吸引的第一件事是快速排序的实现,说到快速排序,一想到C里面就几十行。而erlang实现快速排序,严格来说只需要两行: qsort([Pivot|Rest]) -> qsort([ X || X <- Rest, X =< Pivot]) ++ [Pivot] ++ qsort([ Y || Y <- Rest, Y > Pivot]).

我对于erlang很好奇,但是一开始也觉得非常非常恶心。erlang的简洁来自于其自身的递归思想和使用 lamada表达式,来自于没有数据类型,只使用数据结构。但这也是 让开始看到erlang的代码没什么感觉的原因,而常常因为像写公式一样的语言而感觉倒恶心,常常她简单的几行代码可以处理很多很多事情。这样的要求是你在使用erlang 进行编程的时候一定要有高抽象的思维,你的脑袋的内存容量要足够大,要想到她能简洁的写出就尽量简洁。

erlang还有一个好处,就是养成不使用断点编程,打印RunLog来查看程序运行,这样可以逼着自己下手敲代码前一定要想好了,而且基本上代码写完了自己基本上就知道结果的形式是怎么样的,什么样子的数据结构可以和写出来的函数结果匹配成功,还有一点恶心的是,erlang没有return。、

往往会造成一种错觉,明明就是几句话,怎么就实现了这么多逻辑,如果你还想在使用面向对象语言一样写erlang的话,只能说明你水平不够,而且有点小小的污染erlang 的简洁,小小的侮辱。

erlang:ETS/gen_server模版结构/gen_server回调(这是erlang的重点学习的) 简洁,高效,不考虑内存,不考虑破坏性赋值。 没有类型,拿进程当作面向对象里面的类的对象来做业务处理,一切处理都基于进程,所以erlang的思想是OTP,面向进程编程。而且所有的数据传输都基于进程的通信,与客户端交互进程拿出要rpc的数据,通过TCP传输过去。 使用递归实现循环,使用尾递归实现无新增内存消耗无限递归调用。还有一个特别的重点:erlang的ETS数据表非常强大,lua也是如此,应该能处理业务的强大脚本语言的数据表都是这样。erlang的数据表支持其自身提供的API,已经能完成基本所有需求。但是对于游戏中的用户数据当然还是存储到SQLServer里面的。

当然还有一个,写的好的代码都是实现热代码替换,不过接触的只有顺序编程和并发编程,对于分布式编程/多核编程没有接触到。想想面向对象语言里面还是有很多可以借鉴并实现的地方,至少写过erlang后我对于C++的一些机制,如泛型编程,模版的处理的目的和好处有更深的理解,而且觉得写起来更顺手了许多。

推荐:Erlang OTP源码分析 – gen_server

博客原链接 非常感谢作者的博文:) 阅读OTP源码可以帮助你写出更好、更健壮的erlang程序.下面一系列文章就gen_server、gen_fsm、supervisor的源码进行分析, 从erl

对于自己接触过的东西,总想写点什么总结一下。虽然没有那些技术资深的博主写的东西深,但我觉得挺喜欢这种写总结,能帮自己理清楚一些东西,或许以前还没有想到的东西会豁然开朗,对于其他的面

相关阅读排行


相关内容推荐

最新文章

×

×

请激活账号

为了能正常使用评论、编辑功能及以后陆续为用户提供的其他产品,请激活账号。

您的注册邮箱: 修改

重新发送激活邮件 进入我的邮箱

如果您没有收到激活邮件,请注意检查垃圾箱。