| by suyi | No comments

Erlang之自我见解

关于Erlang

Erlang是一门函数式编程语言。Erlang是瑞典电话公司爱立信于1987年左右开发的一种功能语言。Erlang以来自丹麦的数学家,统计学家和工程师Agner Krarup Erlang命名。Erlang也是一个国际单位(缩写为Erl),表示通信中的数据流量(流量)。

Erlang的功能如下:

  • 功能类型
  • 单一替代
  • 模式匹配
  • 动态类型
  • 过程
  • 容错

单一替代

Erlang变量只能分配一次。尝试多次分配给同一个变量将导致错误。这意味着无法编写常规循环等。事实上,在Erlang中,已使用递归或更高阶函数实现了一种循环。

Erlang变量应该以所有大写字母或下划线(_)开头。

动态类型

Erlang没有静态类型。

功能类型

Erlang是一种功能语言。

  • 没有条件
  • 作为第一类对象
  • 高阶函数编程

过程

该过程与OS管理的过程不同。在其他语言中,它是在单个OS级别进程中执行的多个执行的流程,例如“线程”。但是,由于Erlang中既没有全局变量也没有可重写对象,因此这些控制流之间没有共享状态。这种共享状态是分离线程和进程的一个重要因素,并且声称Erlang是一个“进程”,只是它没有共享状态。

在进程之间没有共享状态也意味着进程不必局限于单个OS进程。Erlang进程可以存在于多个OS进程中,并支持分布式处理。

Erlang中的进程间通信由“消息”完成。可以使用任何Erlang值作为消息。消息由“!”运算符发送,并使用receive语句接收消息。

消息发送示例:

-module(pingpong).
 -export([start/0, ping/2, pong/0]).

 ping(0, Pong_PID) ->
     Pong_PID ! finished,
     io:format("ping finished~n", []);

 ping(N, Pong_PID) ->
     Pong_PID ! {ping, self()},
     receive
 	  pong ->
 	      io:format("Ping received pong~n", [])
     end,
     ping(N - 1, Pong_PID).

 pong() ->
     receive
 	  finished ->
 	      io:format("Pong finished~n", []);
 	  {ping, Ping_PID} ->
 	      io:format("Pong received ping~n", []),
 	      Ping_PID ! pong,
 	      pong()
     end.

 start() ->
     Pong_PID = spawn(pingpong, pong, []),
     spawn(pingpong, ping, [3, Pong_PID]).

容错

由于Erlang是一种最初设计用于需要可靠性的电话交换机等环境的编程语言,因此它的设计使错误不会停止整个程序的运行。进程中发生的异常仅停止该进程并启动调试器。然后,可以在继续之前修改程序并重新加载模块。

发表评论