当前位置:首页 > 开发 > 编程语言 > 加密解密 > 正文

Erlang OTP Design Principles

发表于: 2011-12-01   作者:bookjovi   来源:转载   浏览次数:
摘要: 了解OTP基本设计原则需看看官方文档:http://www.erlang.org/doc/design_principles/   如gen_fsm的经典例子code lock door:-module(code_lock). -behaviour(gen_fsm). -export([start_link/1]). -export([button/1]). -export(

了解OTP基本设计原则需看看官方文档:http://www.erlang.org/doc/design_principles/

 

如gen_fsm的经典例子code lock door:-module(code_lock).

-behaviour(gen_fsm).
-export([start_link/1]).
-export([button/1]).
-export([init/1, locked/2, open/2]).
start_link(Code) ->
    gen_fsm:start_link({local, code_lock}, code_lock, Code, []).
button(Digit) ->
    gen_fsm:send_event(code_lock, {button, Digit}).
init(Code) ->
    {ok, locked, {[], Code}}.
locked({button, Digit}, {SoFar, Code}) ->
    case [Digit|SoFar] of
        Code ->
            do_unlock(),
            {next_state, open, {[], Code}, 3000};
        Incomplete when length(Incomplete)<length(Code) ->
            {next_state, locked, {Incomplete, Code}};
        _Wrong ->
            {next_state, locked, {[], Code}}
    end.
open(timeout, State) ->
    do_lock(),
    {next_state, locked, State}.

 

    看到了这个gen_fsm,我想起了古老的SDL语言,其实erlang的gen_fsm形式与SDL非常相似,唯一不同的是gen_fsm中state的跳转可以带有state date,这个在SDL语言中则不可以(只能使用全局变量保存状态数据)。

     真没想到古老SDL语言引以为傲的STATE跳转描述就这样被erlang的gen_fsm轻而易举的实现了。

    再看看C或C++中的普遍fsm实现,C/C++的fsm实现通常基于fsm的全局数组,数组里定义了每种state和event的组合关系,以及相应的跳转函数,很明显你需要定义每种state和event的enum枚举定义,而且通常状态定义和跳转函数分离导致可读性和维护性不是太好,相比之下,erlang的gen_fsm实现很好的规避了这些问题,state用atom和fun表示了,event也是atom,在state下收到event然后执行动作都一目了然。

    再说说Java中比较普遍的fsm实现,Java是OO语言,所有的都是对象Object,fsm中的state和event也是对象,这就意味着你需要为每个state和event写个class类,代码量比C/C++多得多,更无法与简洁的erlang gen_fsm相比。

    就说到这里,Have fun!

 

 

Erlang OTP Design Principles

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
Supervisor Behaviour是一个用来实现一个supervisor进程来监控其他子进程的模块 子进程可以是另一个s
Supervisor Behaviour是一个用来实现一个supervisor进程来监控其他子进程的模块 子进程可以是另一个s
Supervisor Behaviour是一个用来实现一个supervisor进程来监控其他子进程的模块 子进程可以是另一个s
http://www.cnblogs.com/me-sa/archive/2011/12/27/erlang0025.html 1>application:start(log4er
《Erlang/OTP并发编程实战》 基本信息 原书名:Erlang and OTP in Action 作者: (美)洛根(Logan,M.
今天细致的看了下supervisor,现在做个总结: 其中,方块代表supervisor process,它的功能很简单,
http://www.hoterran.info/otp-gen_server-sourcecode 在阅读erlang的otp源码gen_server.erl的时候
haogongju、人人IT网、59n南龙、360doc、doc70、ask3不要抄我的烂博客了,私人备忘用。 Erlang/OTP中
在《Programming Erlang》的OTP introduction章节中,作者通过循序渐进的方式,向我们展示了gen_serv
说完了gen_server,今天我们来看看gen_event。 通常我们会有这么一种需求场景:采集客户端发送的事件
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号