并发编程实战otp--open telecom platform 二第二章:Erlang语言精要。shell 的启动参数http://www.erlang.or
并发编程实战otp--open telecom platform 二
第二章:Erlang语言精要。
shell 的启动参数http://www.erlang.org/erldoc?q=&x=0&y=0 search erl.shell中内置参数:记得可以在user_default.erl中改写哦。
![并发编程实战otp-open telecom platform 2]()
init:stop() ,q().以一种可控的方式关闭整个erlang系统ctrl +c可以看到很多信息,(wait for me to understand) 里面有k选项看erlang内部活动及至强制关闭任何故障进程。
![并发编程实战otp-open telecom platform 2]()
ctrl_G简单而强大,是运程控制和在线系统调度的利器。
2. Erlang的数据类型: 数值(整数,及浮点数),二进制中、位串,原子,元组,列表(各字符串),唯一标识(pid,端口,引用),Fun函数 numbers(intergers and floats), binarier/Bitstrings, atoms, tuples,list(and string), unique identifier(pids,ports,references),Funs? 为什么有人写代码的时候会在没用的地方用nil 这是一个特殊的atom,便是空列表[]的表示,只点一个字长的内存。 PS:=你慢慢爱上list时,请记住:列表主要用于存放临时数据,(比如当前正在处理的数据容器,编排中间结果,字符串缓冲)要长期存储的数据,要用别的类型(比如二进制串) 没有函数重载,有函数名是不够的,要用函数名+参数个数来确定函数调用。 有没有想过为什么编译一个文件后退出shell,再在这个目录下重启shell会发生什么? 当erlang尝试调用某个尚示加载到系统中的悍,只要能找到与模块名对应的.beam文件,会自动尝试加载。3. 独立的编译器erlc:一般都是用使用Make外部将构建过程脚本化,直接用erlc在操作系统命令行里启动编译器。4. 不要用shell器来评测代码的执行效率,要想得出有意义的评测数据,必须把代码写成模块,而不是直接丢到shell里。5. 用模式匹配去打败种种的选择吧,(+上when的 ->保护式,你就是无敌的选择语句)-----无视if, case的结构存在。吊啊。6. ? 高阶函数。这个真心理解太浅了(to_do+强啊,别起章节。7. 异常与try/catch erlang的三种异常: error -----这类的运行时异常,在发生除0错误,匹配运算失败,找不到匹配的子句时会触发,这些异常的特点在于它闪促使进程崩溃,erlang错误日志管理会记录在案的 exit -------通报“进程即将停止”,同时进程崩溃并退出原因告知给其他进程,不会汇报到错误日志管理器。 throw-----处理自定义的情况,记录在案的。 没有捕获则转变为一个原因为nocatch的error异常。? ? ? ? ?throw(SomeTerm),exit(Reason),erlang:error(Reason).?? ? ?作为特例:exit(normal)所抛出的异常不会被捕获。运用 try ---catch? try?? ? ? some_unsafe_function()? catch?? ? ? throw :Other ->{got_throw,Other};? ? ? exit:Reason -> {got_exit,Reason};? ? ?error:Reason -> {got_error,Reason}? ?end.?try of catch ?after .....
![并发编程实战otp-open telecom platform 2]()
![并发编程实战otp-open telecom platform 2]()
一个很受用的函数,获取栈轨迹:erlang:get_stacktrace().
8. 传统的catch?? catch Expression 对Expresion求值,若能够得出结果,但以此为结果,若发生异常,便将之捕获作为catch结果。9. 列表速构 [X?||X <- ListofIntegers, X >0].?尽可能的使用列表速构,除了效率因素外,它也是这类运算最紧凑和可读的表达形式。10.比特语法:要用了再看吧。这太涩了。
11。进程: 1) spawn/1 /3 /4 看资料去,可以远程节点调用哦。 2) ? ? spawn_link(...)? ? ? 3) ? ?Ref = ?monitor(process ,Pid) ? 进程监视,单向链接,可以让一个进程在不影响目标进程的情况下对目标进程进行监视。
![并发编程实战otp-open telecom platform 2]()
4)exit(Reason) 靠异常来终结进程。 5)exit(Pid,Reason) 直接向 进程发送退出信号。 6) 设置 trap_exit标志。process_flag(trap_exit,true). 这样就无法捕获的信号(kill)外,外来的退出信号都会被转换成无害的消息了。
12. receive?? ? ? ? ? ?Pattern1 when Guard1 ?-> Body1;? ? ? ? ? ?...? ? ? ? ? PatternN ?when GuardN -> BodyN? ? ? ?after Time ->? ? ? TimoutBody?? ? ?end.超时的是以ms来计算的。
13. 尽力投递所有信号 ,不要怕丢失,(分布式中的网络中断除外)。14. ?进程字典,可以用任何和为键的哈希表,最好不要碰。