Erlang 开发及应用 litaocheng@ What is Erlang _ERicsson LANGuage 函数式编程语言(FP) 面向并发(OC), 基于消息 Ericsson 创建, 最初用于电信系统开发成熟, 稳定, 具有 20 多年历史适于电信系统, 分布式系统, 高并发服务器 Open Source, 跨平台, GC ______ 不适于底层系统开发 History 1980s Ericsson 实验室思考如何轻松开发电信系统应用 1987 年左右, Erlang 浮出水面 1989 年 JAM 虚拟机 C 语言实现_ 1996 年 OTP 项目启动, 融合开发经验, 提供易用, 强大的 Erlang 开发库 1998 年开源 2007 年《 Programming Erlang 》出版目前版本 Erlang R13B1 () Erlang 优势多核 SMP 支持内建分布式支持基于轻量进程及消息的高并发模型代码热替换开发速度快, 高性能, 高稳定性 FP 编程, 代码灵活高效, 副作用小丰富的分析及监控程序经过商业产品, 长久大规模验证 OpenSource, 代码面前无秘密 Erlang Hello World 代码 : 1 -module(hello). 2 -compile([export_all]). 34 main() -> 5___ io:format("hello world!~n"). 编译:_ $ erlc 运行:_ $ erl Eshell (abort with ^G) 1> hello:main(). hello world! ok__ Erlang Hello World CON'T 1 -module(hello). 声明模块名称, 其必须和文件名一致. 模块是 Erlang -compile([export_all]). 指明编译选项,export_all 用来导出所有本模块中的函数,exported function 是模块的接口, 其他模块只能调用 exported function 4 main() -> 为函数头(head), 包含函数名称和参数, 后紧随一个'->' 分割符 5___ io:format("hello world!~n"). 为函数体(body), 包含 Erlang 表达式, 这里调用 io 模块的 format 函数在默认输出中打印"hello world!" 在上面的运行结果中, 最后有一个"ok", 这是 io:format/1 的返回值,表示打印成功,Erlang 中任何函数都有返回值. Erlang 语法 Data Types ____ 8 种基本类型 integer - 4,_ -4, 2#100, 16#4, 920828990801238101010.. float - , , -2, (IEEE754 64bit) atom - hello, your_name, ******@host, 'IsAtom' binary - <> reference - make_ref(), 一个随机值 fun - fun() -> some_expr end port - 与外部应用进行交互的接口 pid - process identifier, 用来操作 process ____ 2 种复合类型 tuple - {foo, male, 28, china, <>}_ list - [{ip, any}, {port, 1234}, binary] Erlang 语法 CON'T Pattern Match __ 语言层级的模式匹配, 代码更加简洁. ___ 适用于函数调用, case, receive, try 表达式及"=" 操作___ case Value of ______ N when is_integer(N) -> N; ______ _ when is_list(Value) -> list_to_integer(Value) ___ end _ 变量大写字母或"_" 开头, 只能包含数字, 字母,"_", "@". 如 X, Name1, _Phone, _, Host@ 变量分为 Unbound 和 Bound, Unbound 变量只能用在模式匹配中. 变量 Bound 后,Value 就不可修改_ 变量只能单次赋值( 并发及调试考虑) N=3 (ok) N=4( oops! not match)_____ ___ Erlang 语法 CON'T Binary 匹配使用 binary 可以轻松的实现二进制协议
Erlang开发及应用 来自淘豆网m.daumloan.com转载请标明出处.