Erlang的静态代码检查

Dialyzer是Erlang的静态代码检查程序, 可以发现函数调用时的类型错误之类的问题, 以及被调用的函数不存在或未导出的问题. 最实用的是在上传代码到SVN后, 检查是否漏传模块. 因为漏传的话, 编译不会报错, 但运行时会出undef错误, 从SVN上检出一份全新的代码, 用Dialyzer查一下, 漏的马上可以发现.

阅读全文

Erlang中的长度

值得吐槽的是居然连求长度这么基础的方法,Erlang都没有统一起来。 分为len和size两大对立阵营:

len阵营

  • 列表(字符串是列表的一种)的长度用length/1string:len/1。 别看后面那个打着string开头,对于不是字符串的列表也照用不误, 从源代码看其实就是前一个的马甲。
  • queue模块是len阵营的,使用queue:len/1

size阵营

  • 二进制串的长度用size/1,或是用byte_size/1bit_size/1也行,分别是 比特长度和位长度,1byte = 8bit。
  • 元组的长度也用size/1,等于其元素的个数。元组的比特长度和位长度不可用。
  • dictsetsorddictordsetsarray, gb_trees, gb_sets 这几个模块也是size阵营的,使用其各自模块 下的size函数。
  • iolist 有BIF iolist_size/1可用.
  • ets比较特别,使用ets:info(Tab, size)来获取长度,Tab是表的id,或是已注册的表的名字。

另外,特立独行的“原子”没有长度。

阅读全文

gen_server笔记

gen_server是erlang的OTP框架中最常用的“行为模式”了吧,至少几本erlang教材都是首 先介绍这个。

这东西用来做什么的呢?或者说,为什么要用这东西呢?由于我接触这东西不过几天, 理解尚非常粗浅,就我看来,用gen_server有以下几个好处:
  • 面向对像,封装数据与方法。gen_server内部需要维护一个状态State,并提供各种函数 给别人调用,就类似于其他语言中的“类”一样,把数据和方法封装在一起,防止数据被非法 改动。

阅读全文

初识Erlang,Hello World(4)

前几节的Hello world都是自言自语,今天试试对着别人说。首先是在本机上各个进程之间, 然后是在网络上不同机器之间。

进程间的消息:单向接收

Erlang里可以很方便地创建进程,这种进程是超轻量级的,运行于erlang虚拟机内部的, 而与操作系统的进程管理无关的(也就是说你在任务管理器中只会见到一个Erlang进程), Erlang内的进程创建开销很小,创建一个进程所需的时间仅为微秒级,内存消耗也很少, 一台机上运行数以千计的进程也没问题。

阅读全文

(1 - 8)
Enter Press Enter to jump