Erlang

Hello Erlang!

2016-01-02  本文已影响214人  current

本系列文章是《Programming Erlang》的学习笔记

Erlang是什么

Erlang是由Ericsson开发的一种面向并发环境的函数式编程语言,
Erlang的并发性是语言虚拟机支持的,不依赖于OS。

Getting Stared

Erlang是面向并发环境的编程语言,一个Erlang程序是由多个并行的进程构成的。进程执行模块中定义的函数。一个erl文件包含一个模块,编译后的erl文件就可以在shell中直接执行了。

-module(hello).
-export([start/0]).

% Hello erlang
start() ->
    io:format("Hello Erlang!~n").

进入Erlang Shell(erl),就可以运行这个模块了

使用c(hello).编译hello模块使用hello:start().调用start函数,即可看见运行结果

$ erl
1> c(hello).
{ok, hello}
2> hello:start().
Hello Erlang~
ok
3> halt().
$

这是一个最简单的Erlang模块,我们可以通过这个模块学习一下Erlang的基本语法。

Getting little sophisticated

Hello Erlang模块阐述了一个最基本的Erlang模块,和所有Hello World!程序一样,这并没有什么卵用。我们需要一个更复杂的程序来展示Erlang的基本编程模式。

%file_server.erl
-module(file_server).
-export([start/1, loop/1]).

start(Dir) ->
    spawn(file_server, loop, [Dir]).

loop(Dir) ->
    receive
        {Client, list_dir} ->
            Client ! {self(), file:list_dir(Dir)};
        {Client, {get_file, File}} ->
            Full = filename:join(Dir, File),
            Client ! {self(), file:read_file(Full)};
        {Client, {put_file, File, Content}} ->
            Full = filename:join(Dir, File),
            Client ! {self(), file:write_file(Full, Content)}
    end,
    loop(Dir).

From记录了消息的来源,Message是消息本身,后续是消息的处理逻辑

上述内容已经涵盖了erlang的基本知识,可以继续写出下面的file_client模块

%file_client.erl
-module(file_client).
-export([ls/1, get_file/2, put_file/3]).

ls(Server) ->
    Server ! {self(), list_dir},
    receive
        {Server, FileList} ->
            FileList
    end.

get_file(Server, File) ->
    Server ! {self(), {get_file, File}},
    receive
        {Server, Content} ->
            Content
    end.

put_file(Server, File, Content) ->
    Server ! {self(), put_file, File, Content}},
    receive
        {Server, Result} ->
            Result
    end.

file_client.el中没有引入新的内容,在shell中运行即可看见运行结果

$ erl
1> c(file_server).
{ok, file_server}
2> c(file_client).
{ok, file_client}
3> FS = file_server:start(".").
<0.45.0> 这是FS这个进程的pid
4> file_client:ls(FS).
{ok,["file_client.beam","file_client.erl",
     "file_server.beam","file_server.erl","hello.erl"]}
5> file_client:get_file(FS, "hello.erl").
{ok,<<"-module(hello).\n-export([start/0]).\n\nstart() ->\n    io:format(\"Hello World!~n\").\n">>}
6> file_client:put_file(FS, "haha", "hehe").
ok
7> file_client:ls(FS).
{ok,["afile_client.beam","afile_client.erl",
     "afile_server.beam","afile_server.erl","haha","hello.erl"]}
8> file_client:get_file(FS, "haha").
{ok,<<"hehe">>}

上述的file_server,file_client,涵盖了Erlang的基本语法,模式。下一篇文章会讲述Erlang语言在编写传统顺序程序时的用法。

上一篇 下一篇

猜你喜欢

热点阅读