====== Erlang ====== * Official site:[[http://erlang.org|erlang.org]] * [[http://blog.joak.org/ppt/erlang.html|My ppt about erlang]] ===== Books ===== * [[http://erlang.org/doc/reference_manual/introduction.html|erlang user guild]] ===== 学习新语言的一般步骤 ===== * 了解该语言的出生背景与适用环境 * 引自[[https://zh.wikipedia.org/wiki/Erlang|wiki]]:erlang由乔·阿姆斯特朗(Joe Armstrong)在瑞典电信设备制造商爱立信所辖的计算机科学研究室开发。Erlang于1987年发布正式版本,最早是私有软件,经过十年的发展,于1998年发表开放源代码版本。 * erlang 语言致力于构建大规模可扩展高可用的实时系统。 * erlang 运行时系统支持高并发,分布式,高容错。 * OTP 是个 erlang 功能库,并提供插件开发的原则框架。 * 了解输入输出流,文件流操作 * 流操作 [[http://erlang.org/doc/man/io.html|io module]]. ''io:fwrite'' * 文件操作 [[http://erlang.org/doc/man/file.html|file module]].''read_file'' * 了解程序代码和可执行代码的组织机制,运行时模块加载、符号查找机制 * 代码由 **modules** 构成,一个 module 由 属性 于 函数构成,以''.''号分割, (似乎在单个文件)。 * module 可包含很多 预定义属性,具体见教程; * 只有单行注释符号''%''; * 了解该语言的基本数据类型 * **integers, floats**: 除传统数值表示,有两种 erlang 独特的表示方法: * $char : 表示 char 的ascii码或 unicode 码数值; * base#value : base 为进制(2~36),比如 2#1101, 8#15, 16#d 为相同数值; * **Atom** : 表示字符数字组成的名称常量,如果有空格,@等特殊字符或非小写字母开头,则要使用单引号扩起来,如 ''phone_number,'Month','phone number' ''; * **bit strings** : 用来表示还没区分类型的内存存储数值(有点像 nodejs 的 Buffer): ''<<10,20>>'' , [[http://erlang.org/doc/programming_examples/bit_syntax.html|具体示例]] * **reference** : 引用,由 ''make_ref/0''返回; * **Fun** : 函数对象''Fun1 = fun (X) -> X+1 end.'' ''Fun1(2)''; * **Port Identifier** : erlang port, 由''open_port/2''返回, [[http://erlang.org/doc/reference_manual/ports.html|详解]] * **pid** : erlang process(不同于一般进程的概念)的标识,由''spawn/1,2,3,4'' ''spawn_link/1,2,3,4'' ''spawn_opt/4''返回 * **Tuple**: ''P = {Term1,...,TermN}'', ''element(i,P)'', ''P2 = setelement(i,P,value)'', ''tuple_size(P)''; * **Map**: ''#{Key1=>Value1,...,KeyN=>ValueN}'',''maps:get(key,map)'',''map2 = maps:update(key,map)'', ''map_size(map)'' * **List**: ''[Term1,...,TermN]'', ''[head|tail]'' * **String**: 双引号扩起来的字符串,本质上算 List; 两个字串会被自动连接,比如''"hello""world"''等价于''"helloworld"'' * **Record**: 类似 C 语言的 struct; * **true**,**false**: 来表示 boolean * **类型转换**:''atom_to_list'',''list_to_atom'',''tuple_to_list'',''list_to_tuple''等等。 * 了解基本语法和主要语言构造,数学运算符 * **模式匹配**:erlang 的等号''=''是表示模式匹配,而不是单纯的赋值:''{X, Y} = {1, 2}.'', 如果匹配不了则抛异常; * 了解数组和其他集合类的使用 * 了解字符串的处理 * 了解该语言在面向对象,函数式编程,泛型,元编程等编程范式的特性 * 了解特有的语法糖 * 了解该语言错误处理,调试方式以及对测试的支持 * 了解该语言的内存分配机制或GC,线程,进程等运行时效率相关 * 了解该语言的编译/解释机制