Erlang学习笔记(一)

概述

=================================

前端时间学习cpp,感到有些疲惫,也感到了一些困惑,久思未解。 正好放松下自己,就拿起了erlang。

erlang是一个高并发的编程语言,而且支持热部署,适合做DB server。

虽然erlang的计算能力相对于他的并发能力要逊色很多,但是erlang同时也提供了port。可以让C,C++等计算效率高的语言来完成这部分功能

过程

=================================

看了orally的 《Erlang编程指南》 这本书,挺不错的。 正好适合像我这样,略懂一些函数式编程,但不是非常了解的人。

从几个我会的语言上来比较吧。

erlang相对于python还是有非常大的不同的。

python更趋向于面向对象编程,而erlang是纯粹的函数式编程。

所有的东西在erlang都可归结为表达式,这让老夫想起了高中时候的数学课。。。此处略去300字,痛苦的回忆。。。

其实学erlang的时候,更像是在学高等数学,有高阶函数。 函数求导等等。 递归代替迭代的方式,也使得erlang的代码量非常少,而且很精美。

相对于javascript,erlang显得优美很多。不单单是语法上,从气质上也是如此。

相对于C,C++。 从这2个或者相近的语言转过来学erlang的人,那可真是另一番天地了。比如java, c#等等。

相当于完全推翻了过去的编程理念。 从第一个,最简单的变量开始就推翻了。

erlang中,变量永远都是单次赋值的。 即,在某处 声明与定义了变量 X = 1. 那么 接下来 X = 2。 X= ...。等均被视为错误的。
究其原因,四个字概括:模式匹配。

对,就是模式匹配。 此处 X = 1. 首先进行的是模式匹配, 发现 X 为 undefined, 则 = 被解释为 赋值操作。 然后X的值在作用域内为
1。 接下来 X = 2. 这个表示式, 首先去 做 1 == 2 的匹配。 发现1 与 2 不能匹配, 则提示 bad match。。。

没有经过一段时间的适应,C,C++等程序员对于这个还是相当难适应的。 至少本人在学习之处也是适应了许久。

工具

======================================

磨刀不误砍柴工

工具因人而异,本人习惯了emacs。而且专为emacs配备了机械键盘。。。此处也没有理由更换编辑器或者IDE。。。

感想

======================================

深入的感想不敢说,毕竟还没学到那么深。

目前仅仅是感受到了erlang高并发所带来的好处:

1. 进程开销小

2. 进程间通信方便

以及erlang代码的优美,以及热部署的方便。

除此之外,尚未感受到erlang性能上有多优秀,相对于C,C++而言。

当然,开发速度,erlang还是会快不少的。不过,也有文档资料不全的缺点。

各有利弊吧。

萝卜青菜,各有所爱。

时间: 2024-10-05 05:32:39

Erlang学习笔记(一)的相关文章

Erlang 学习笔记

http://wenku.baidu.com/link?url=AUQR8Hn-e-fEB_lqjXsd8XfapWj1qAK7J05JoBXFib_LlSk5qSOTia8HIxNV1XkeZi-kHFsH18Qb9NED5PKiPb8h6oDFVR6KG75MUSYAAMm Erlang 学习笔记    一.Erlang语言特征重点  1.catch是返回表达式的值或者错误信息的元组 try…catch是可以捕捉不同的错误类型以及有流程控制  2.发送消息永远不会失败,如果尝试发送消息给一个

Erlang学习笔记2

http://wgcode.iteye.com/blog/1007623 第二章 入门 1.所有的变量都必须以大写字母开头,如果要查看某个变量,只要输入变量的名字即可,如果一个变量被赋予值,就称为绑定变量,否则被称为自由变量,一开始所有变量都是自由的. 有一点像Java中的常量,这就是为什么用大写字母的原因. 2.  “=” 近似于一个赋值操作符,是一个模式匹配运算符,当X是自由变量未被赋值时“=”是赋值运算符,否则是模式匹配运算符. 3. “/”除号永远返回浮点数. 4. 原子用来表示不同的非

erlang学习笔记(shell命令)

erlang shell 命令: help(). 可以查看erlang shell内置命令. 比如:m(Mod),可以查看模块Mod. 待续..

erlang学习笔记

Erlang是一门函数式编程语言,具有不可变状态 Erlang的变量是一次性赋值变量(single-assignment variable) 在Erlang里,变量的获得值是一次成功模式匹配操作的结果,=是一个模式匹配操作符 在Erlang里,原子被用于表示常量值,原子是全局性的,以小写字母开头,还可以放在单引号内,一个原子的值就是它本身 元组用于把一些数量固定的项目归组成单一的实体,用大括号括起,元组会在声明时自动创建,不再使用时则被销毁 对于不感兴趣的变量,可以用_ 作为占位符,符号_被称为

erlang学习笔记(文件操作)

参考这里和这里了解到的文件操作的模块有很多:kernel下有:file,stdlib下有:filelib,filename,file_sorter.(具体查看官方文档)

Redis学习笔记~目录

redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sorted set --有序集合)和hashs(哈希类型).这些数据类型都 支持push/pop.add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的.在此基础上,redis支持各种不同方式的排 序.与memcached一样,为了保证效率,数据都是缓存在内存中.区别的是redis会周期性的把更

thrift学习笔记

Thrift学习笔记 一:thrift介绍 Thrift是facebook开发的用来处理各不同系统之间数据通讯的rpc服务框架,后来成为apche的开源项目.thrift支持多种程序语言,包括Java,Python,Ruby,JavaScript,Node.js,Go,C,C++,C#,Erlang,Delphi,Perl,Php,SmallTalk,OCaml,Haxe,Haskell,D语言.Thrift采用IDL(Interface Defination Language)描述性语言来定义

[Golong]学习笔记(一) 基础知识

Go编程基础 Go的内置关键字(25个) 不多 break default func interface select case defer go map struct chan else goto package switch const fallthrough if range type continute for import return var Go的注释方法(和js一样) 单行注释: // 多行注释: /**/ Go程序一般结构 common_structure.go 通过 pack

SO_REUSEPORT学习笔记

SO_REUSEPORT学习笔记 时间 2015-02-12 16:50:00 BlogJava-技术区 原文  http://www.blogjava.net/yongboy/archive/2015/02/12/422893.html 主题 Socket 前言 本篇用于记录学习SO_REUSEPORT的笔记和心得,末尾还会提供一个bindp小工具也能为已有的程序享受这个新的特性. 当前Linux网络应用程序问题 运行在Linux系统上网络应用程序,为了利用多核的优势,一般使用以下比较典型的多