《Learn You Some Erlang for Great Good!》的学习笔记(一)

前言:

       最近研究推送和XMPP服务器框架时,意外发现了mongooseIM和jabber两款XMPP框架,它们的高并发支持比较吸引我,同时也发现,这两款服务器都是采用Erlang语言来实现的,稍微查了一下,发现国内的相关论坛和资料都不多,普遍的反应也是这个语言的入门难度比较大。最近正好也对函数式编程比较感兴趣,心想着把这个难啃的骨头给搞定之后也许就能一路畅通了。但是,个人比较讨厌看书,一直喜欢边实践边学习,所以一开始的时候也就直接跳过书籍,开始使用cowboy框架实现一些简单的http服务器,但是刚实现了一个hello world就开始力不从心了,看来对付这门语言,没有理论支持,实践还是太困难了。在cowboy的官网上,我找到这本《Learn You Some Erlang for Great Good!》,看介绍来说应该还是比较生动的,另外也好久不更新博客了,本着分享精神,边翻译边记录,希望能对大家有所帮助。

------------------------------------------------------------------

       学习一门新的语言,不仅仅是学习表面上的语法,特别是对于从面向对象编程转向函数式编程,更重要的是学习一种新的思考方式。

       也许i++这样的表达方式对你来说很平常,但是这种表达方式在erlang中是不允许的,因为erlang中的变量只允许被赋值一次。这对第一次接触的人来说很奇怪,但是如果你从数学的角度来考虑,也就不难理解了,你从来没有见过如:x=x+2这样的数学表达式吧。这样实现的好处个人觉得倒是可以使程序语义更加明确,调试起来也更加方便(相信大家之前也经常遇到通过单步调试来确定变量到底在哪一步的值发生了变化);但是,对于我们这些已经习惯了“变量”的“变”的人来说,这也无疑是个灾难性的消息。

       只要提到erlang当然也少不了并发和可靠两个优点,而根本的原因在于erlang使用了Actor模式,每一个actor在单独的进程中运行,如果你就是erlang世界中的一个actor,那么你将注定是一个单身屌丝,你整天工作在一个没有窗户的密室中,而你的工作之一就是收信和发信,当然,你也可以任性地把看不懂的信给扔掉。信件将是actor之间通信的唯一方式,你再也不用考虑什么共享内存、互斥、锁等一系列让人头疼的事情。

       在安全方面,你也应该了解Erlang的一个基本准则:随它崩溃(Letit crash),你应该避免出错,但是不用覆盖全部的类型检查和错误情况,erlang可以高效地从错误中恢复、重新组织代码。

       erlang语言虽然如此强大,但是还是应该避免一些误区的:

       1.erlang的主要特点就在于它的进程够轻,可以同时存在成千上万个进程。但是,这并不意味着你可以滥用进程,比如一个射击游戏,如果你让每一件事物甚至一颗子弹都拥有自己的actor,那么你终将射到自己的脚。因为即使发送消息的消耗很小,但是你将任务划分得过细的话也会造成巨大消耗导致程序变慢;

       2.erlang不是万能的,有些时候,你并不需要使用erlang语言去解决问题,这个需要你自己去判断,可以提供的信息是,erlang在图像、信号处理、设备驱动等方面的表现并不怎么样,而在网络服务器、队列中间件、实时系统和分布式数据库实现方面较有优势。

       说完了简单的概念,差不多就该正式开始了。erlang的安装就不多说了,相信对大家来说都没什么难度。至于编辑器方面,这个就见仁见智了,就我个人而言,使用的是intellij idea,现在已经有erlang的插件,安装一下就可以使用啦!


发布了42 篇原创文章 · 获赞 9 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/jjxojm/article/details/50551050