安装
Ubuntu Server上: sudo apt-get install erlang
如果安装时下载 太慢,可手工下载deb包( esl-erlang_16.a-rc1_ubuntu_precise_i386.deb ),下完deb文件后,ftp到虚拟机上,用dpkg -i <.deb file>安装(需要首先安装JRE);Ubuntu Server不能更改屏幕大小,也不能copy/paste文本,所以用kitty ssh过去操作比较好;
erlang 语法
代码中逗号,分号,句号的用法:逗号是表达式的分隔符(可以理解为AND),分号是条件分支的分隔符(可以理解为OR),句号是函数结束符(可以理解为END);
参考"http://stackoverflow.com/questions/1110601/in-erlang-when-do-i-use-or-or";
erlang文档
-
在线版(增量式查找,效果比离线版好):http://www.erlang.org/erldoc
-
离线版:otp_doc_html_R16A_RELEASE_CANDIDATE.tar.gz
在erlang官网下载页上下载Erlang/OTP R16A HTML Documentation File,解压到DOC_HOME下,tr_server中用到的gen_server:start_link/4函数可以在$DOC_HOME\lib\stdlib-1.19\doc下找到html和pdf版的api说明;erlang用到的各个库的api文档都在.\lib文件夹下;erlang用户手册在.\doc目录下,erlang运行时(ERTS)在.\erts-5.10下;
erlang内置函数(BIF)文档在\(DOC_HOME\erts-5.10\doc\html\erlang.html中可以查到(或者是对应的pdf文档:\)DOC_HOME\erts-5.10\doc\pdf\erts-5.10.pdf的Reference Manual -> erlang部分中),例如apply, list_to_atom等;
erlang编译器
Windows上的erlc居然不支持文件通配符,运行"F:\tcp_rpc>"C:\Program Files\erl5.10\bin\erlc.exe" -o ./ebin ./src/*.erl"提示IO错误,只能用"F:\tcp_rpc>"C:\Program Files\erl5.10\bin\erlc.exe" -o ./ebin ./src/tr_sup.erl"的办法分别编译3个erl源文件;
IDE
erlide
在Eclipse for java developers 4.2中,用 eclipse market搜索erlide并安装成功;(2013-05-13)
See https://github.com/erlide/erlide/wiki/Tutorial-Quick-Start for using this plugin to build a HelloWord erlang program.
其他
erlang发音:elan(哦兰);
多台机器上的erlang节点互相连接
使用erl -name name@ip -setcookie cookiename启动erlang节点,启动后用net_adm:ping('name@ip')进行连接,上午在笔记本和两台服务器上创建3个节点并互联成功,其中笔记本是Win7(IP为10.31.1.30),两个服务器是Ubuntu Server 12.04(IP是10.31.1.113和10.0.7.47),每个节点的-name参数是自己的名字和IP地址,互联的各节点的cookiename需一致;另外Win7可能要关闭防火墙;ip必须是节点的真实IP,如果是hostname,需要有效的DNS,否则无法连接;
Remote shell
113服务器:$ erl -name lc@10.31.1.113 -setcookie test
47服务器:$ erl -name lc@10.0.7.47 -setcookie test
在113上远程连接47:Ctrl + G,然后用r指令,例如:
(lc@10.31.1.113)1> User switch command --> r 'lc@10.0.7.47' --> j 1 {shell,start,[init]} 2* {'lc@10.0.7.47',shell,start,[]} --> c Eshell V5.8.5 (abort with ^G) (lc@10.0.7.47)1>
更多细节:
发起和目标节点上的erl shell都必须已经启动,不需要首先用net_adm:ping建立连接,在113上连接上47后,不能关闭47上的节点,否则remote shell也会随之断开;
113要切换到local shell用"Ctrl+G, j, c
113要退出本地erlang环境用"Ctrl+G, Ctrl+C, A"方式(Linux下);
113要关闭47上的节点用"q()."命令;
113要关闭连接47的Remote Shell用"Ctrl+G, j, k