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是一种最初设计用于需要可靠性的电话交换机等环境的编程语言,因此它的设计使错误不会停止整个程序的运行。进程中发生的异常仅停止该进程并启动调试器。然后,可以在继续之前修改程序并重新加载模块。
发表评论
要发表评论,您必须先登录。