相关疑难解决方法(0)

Erlang actor与OOP对象有何不同?

假设我有一个像这样定义的Erlang actor:

counter(Num) ->
  receive
    {From, increment} ->
      From ! {self(), new_value, Num + 1}
      counter(Num + 1);
  end.    
Run Code Online (Sandbox Code Playgroud)

同样,我有一个像这样定义的Ruby类:

class Counter
  def initialize(num)
    @num = num
  end

  def increment
    @num += 1
  end
end
Run Code Online (Sandbox Code Playgroud)

Erlang代码以函数式编写,使用尾递归来维护状态.但是,这种差异的有意义影响是什么?对于我天真的眼睛来说,这两个东西的接口看起来大致相同:你发送一条消息,状态得到更新,然后你回来了一个新状态的表示.

函数式编程经常被描述为与OOP完全不同的范例.但是Erlang actor似乎完全按照对象应该做的:维护状态,封装并提供基于消息的接口.

换句话说,当我在Erlang actor之间传递消息时,它与我在Ruby对象之间传递消息的方式有何不同?

我怀疑功能/ OOP二分法的影响比我看到的要大.有谁可以指出他们?

让我们撇开这样一个事实,即Erlang actor将由VM调度,因此可以与其他代码同时运行.我意识到这是Erlang和Ruby版本之间的一个主要区别,但这不是我所得到的.在其他语言中可以实现并发,包括Ruby.虽然Erlang的并发性可能表现得非常不同(有时候会更好),但我并不是在询问性能差异.

相反,我对问题的功能与OOP方面更感兴趣.

ruby oop erlang functional-programming

11
推荐指数
1
解决办法
1581
查看次数

标签 统计

erlang ×1

functional-programming ×1

oop ×1

ruby ×1