美文网首页
[Erlang开发之路]回顾总结二、Erlang的特性

[Erlang开发之路]回顾总结二、Erlang的特性

作者: 循环不计次 | 来源:发表于2019-07-26 10:57 被阅读0次

    一、面向函数的语言

    Erlang是我第一个接触的面对函数的语言,对象是面向对象的第一型,函数式编程语言也是一样,函数是函数式编程的第一型。函数是Erlang编程语言的基本单位,在Erlang里,函数是第一型,函数几乎会被用作一切,包括最简单的计算。所有的概念都是由函数表达,所有操作也都是由函数操作。

    二、天生高并发

    Erlang编程语言可以支持超大量级的并发性,并且不需要依赖操作系统和第三方外部库。Erlang的并发性主要依赖Erlang虚拟机,以及轻量级的Erlang进程。

    三、分布式

    Erlang的分布式特性是由Erlang在语言层面上支持的,可以使用语言内置的API函数,在远程节点上创建Erlang进程,继而执行指定的模块函数。
    同样,还可以使用Erlang的RPC模块,调用远程节点的模块函数。需要注意的一点是,在分布式Erlang系统中,节点指的是,一个可参数分布式Erlang事务的运行着的Erlang系统。
    Erlang节点之间的相互调用,跨节点远程模块函数执行都是异常方便的,Erlang节点之间的通信完全是由Erlang编程语言在语言层面上支持的

    四、热更新

    Erlang系统,允许程序代码在运行过程中被修改,旧的代码逻辑能够被逐步淘汰而后被新的代码逻辑替换。在此过程中,新旧代码逻辑在系统中是共存的,Erlang“热更新”的特点,能够最大程度的保证Erlang系统的运行,不会因为业务更新造成系统的暂停。

    五、单次赋值、模式匹配

    • 单次赋值
      在通常的编程语言定义中,经常会出现诸如x = x + 1; 之类的定义,也就意味着 x 是可变的变量,是存在状态变化的变量。这也是在这类传统语言中,并发编程容易出错的点。(因为值存在状态变化,而通常很难确定引起这个变化的具体原因是什么:或者是程序员写错了,或者是更改状态时没加锁,甚至引起死锁等等)。
      在erlang中,变量的定义与数学中的概念是一致的:在作用域内赋值之后不可更改。
      再从编程角度谈谈单次赋值的意义:
    1. 因为变量的状态不可更改,所以如果变量值出错,只可能在第一次赋值的地方出错。(快速定位根源)
    2. 因为变量的状态不可更改,无需担心在并发编程中变量的值被修改(无需加锁,也就无需担心死锁。)
    • 模式匹配
      在erlang中,因为模式匹配的存在,简化了顺序编程,很多时候只需要寥寥数行代码就可以表示传统编程语言中复杂的顺序逻辑,例如通过参数的模式匹配,可以使用同名函数,一个函数名得到不一样的结果
    % erlang例子
    % 代码用于说明,香蕉单价3,苹果单价4,橙子单价5。
    % 调用方式为:cost(Whatever).
    cost(banana)-> 3;
    cost(apple)-> 4;
    cost(orange)->5;
    cost(_)-> {error, "No such item"}.
    
    /*
    C++例子
    */
    int getCost(int itemType) {
    
        switch (itemType)  {
            case "banana": return 3; break;
            case "apple": return 4; break;
            case "orange": return 5; break;
            default: return 0; break; //此处不能很好的表达错误码.
        }
        return 0; //此处也是,不能很好的表达错误码
    }
    

    六、递归

    递归在erlang中占据相当重要的分量。递归与回溯贯穿着整个erlang的核心。

    相关文章

      网友评论

          本文标题:[Erlang开发之路]回顾总结二、Erlang的特性

          本文链接:https://www.haomeiwen.com/subject/bfhrrctx.html