erlang源码
1. 如何在linux下安装Erlang
要看你使用的linux版本。
如果是debian系列的,一般可以直接 sudo apt-get install erlang来进行安装。
如果是redhat系列,一般需要下载源码进行安装,也可yum list | grep erlang 看看软件源里有没有
2. 有没有安装好的linux erlang
你需要以下准备材料:
1 GNU unzip 用于解压。
2 tar打包解包程序。
3 GNU make
4 Gcc 之类的C编译器,或者LLVM或clang
5 GNU m4
6 Perl 5
7 相关的库和头文件: ncurses termcap termlib, 软件包名称通常是ncurses-devel之类,自己慢慢在程序管理器中查找。
8 git(可选)
安装过程:
解压源码包:
$ tar -zxf otp_src_19.1.tar.gz
进入源码目录,声明变量。
$ cd otp_src_19.1
$ export ERL_TOP=`pwd`
配置:
$ ./configure
如果你不在配置时添加变量指定安装位置,那么默认会安装在 /usr/local/{bin,lib/erlang}中,如果你没有权限安装在此位置,必须在配置时指定安装安装位置,如安装到/opt/erlang/19.1/{bin,lib/erlang}, 用此选项--prefix=/opt/erlang/19.1
如果构建过程中出错,可能是perl声明了LANG变量,则你可以修改回来:
$ export LANG=C
然后编译:
make
测试
make release_tests
在源码目录release下创建一个test目录,然后测试:
$ cd release/tests/test_server
$ $ERL_TOP/bin/erl -s ts install -s ts smoke_test batch -s init stop
用浏览器查看源码目录下/release/tests/test_server/index.html 的测试报告,一切无误后,进行安装。
make install
运行
% erl
Erlang/OTP 17 [erts-6.0] [hipe] [smp:8:8]
Eshell V6.0 (abort with ^G)
1>
如果你还要编译文档,则声明如下两个变量
$ export PATH=$ERL_TOP/bin:$PATH
$ export FOP_HOME=/path/to/fop/dir
其中,$ERL_TOP变量是源码目录。
然后
make docs
验证正确后,
3. 如何退出Erlang系统
【下载erlang源码安装包】:在linux安装erlang只能下载源码安装包来安装,可以到erlang官方网站上下载,如图。
【解压安装包】:下载的安装包是经过压缩的gz格式,在linux下解压用到系统自带的tar工具,在安装包所在目录执行命令:tar -zxvf otp_src_R16B03-1.tar.gz
3
【配置安装环境】:打开解压后的目录-执行命令:cd otp_src_R16B03-1;配置安装环境-执行命令:
4
【编译源码】:执行编译命令:make
4. 开始接触erlang,erlang怎么编译成一个独立运行的程序
escript可以直接执行erl源码
$ cat factorial
#!/usr/bin/env escript
%% -*- erlang -*-
%%! -smp enable -sname factorial -mnesia debug verbose
main([String]) ->
try
N = list_to_integer(String),
F = fac(N),
io:format("factorial ~w = ~w\n", [N,F])
catch
_:_ ->
usage()
end;
main(_) ->
usage().
usage() ->
io:format("usage: factorial integer\n"),
halt(1).
fac(0) -> 1;
fac(N) -> N * fac(N-1).
$ factorial 5
factorial 5 = 120
$ factorial
usage: factorial integer
$ factorial five
usage: factorial integer
5. Web 有哪些 Erlang 语言应用的例子
Mochiweb
一句话介绍: MochiWeb is an Erlang library for building lightweight HTTP servers.
Mochiweb在Erlang项目中被当做一个Web组件被广泛使用(比如RabbitMQ的plug-in),它的设计相当收敛,除了基础的Web请求处理没有提供特别复杂的功能集(后面会提到其它Web Server).目前我已经在两个项目中使用了Mochiweb,得心应手.
Mochiweb项目代码有很多值得学习的地方,比如 mochiglobal [ 链接 ],Parameterized mole [链接]今年夏天我把Mochiweb代码打印了一份,看得很是过瘾.这里有一篇实战风格的入门文章:A practical introction to MochiWeb - Alex Marandon[链接]
使用Rebar很容易编译运行,里面自带一个简单的Echo demo,你可以使用Rebar快速建立起来自己的站点框架,动手试试吧
项目地址:mochi/mochiweb · GitHub
Cowboy
一句话介绍: Cowboy is a small, fast and molar HTTP server written in Erlang.
使用Cowboy需要通过编写Handler来定制如何处理Web请求.这是它设计上的一大特色.项目源码自带了N种版本的hello_world,也是可以非常快上手.编译运行依然是rebar搞定,这个项目现在保持更新,每天都能收到github推送的代码变更邮件.
项目地址:extend/cowboy 路 GitHub
YAWS
一句话介绍:Yaws is a HTTP high perfomance 1.1 webserver particularly well suited for dynamic-content web applications.
这个略显怪异的名字是Yet another Webserver的缩写.其提供的已经不是简单的脚手架了,而是支持动态内容输出,REST,文件上传SOAP等等.在其官网上有丰富的文档和样例代码.O'Reilly在2012年6月出版的 Building Web Applications with Erlang 一书中使用的就是YAWS.这本不足150页的小册子是很好的YAWS入门教程.估计国内出版社不会引进这样一本冷冷的书,自己找电子版读吧,很容易找到.
项目地址:Yaws
Misultin [停止更新]
一句话介绍: Misultin development has been discontinued.
是的,这个项目已经不再继续更新了;停止更新的原因是作者认为各个Web server项目有"too much plication of efforts".作者在项目介绍中倒是简单评价了Mochiweb和Cowboy:
Mochiweb has been around the block for a while and it's proven solid in proction, I can only recommend it for all basic webserver needs you might have. Cowboy has a very interesting approach since it allows to use multiple TCP and UDP protocols on top of a common acceptor pool. It is a very modern approach, is very actively maintained and many projects are starting to be built around it.
项目地址:ostinelli/misultin ¡ GitHub
看过Misultin作者的一番评论,其实可以回答不少人关于"用Mochiweb做Web项目很痛苦"的问题:如果你要做一个丰富多彩的Web站点,在Mochiweb提供的脚手架上,你要完成很多工作,显然你需要其它选择,呃,或许你需要选择一个Web Framework了.对于大多数框架来说,其设计的总要目标就是开发效率和常见应用场景的支持.我们看看有哪些Erlang Web Framework可用吧!
Elrang Web Frameworks
除了http://Asp.net MVC,RoR之外,其实还有很多Web Framework可用,看看Erlang世界里面的解决方案吧:
ChicagoBoss
一句话介绍:Chicago Boss is a server framework inspired by Rails and written in Erlang.
ChicagoBoss是现在非常活跃的Erlang Web Framework,在各种细节上都为新手准备的相当周到比如60秒快速上手教程什么的.甚至它说自己区别于其它Erlang Web Framework的就是" it is easy to set up and use."它之间Web Server是选择的Misultin现在已经迁移到Cowboy.前端MVC架构,内置消息队列BOSSMQ,数据存储方面选择性也比较多:Mnesia MongoDB Mysql PostgreSQL Riak ,Tokyo Tyrant;模板方案依然是使用ErlyDTL.
另外,我觉得ChicagoBoss的文案是这些项目里面写的最棒的,直接命中你最想知道的两个问题:
"Chicago Boss is a server framework inspired by Rails and written in Erlang. It offers all the conveniences of modern web development, including Comet. What sets Chicago Boss apart from other non-Erlang frameworks is that it can handle large amounts of traffic without any drop in performance. What sets Chicago Boss apart from other Erlang frameworks is that it is easy to set up and use."
项目地址:ChicagoBoss/ChicagoBoss 路 GitHub
入门PDF: http://www.evanmiller.org/chicago-boss-tutorial.pdf
Nitrogen
一句话介绍:Nitrogen Web Framework is the fastest way to develop interactive web applications in full-stack Erlang.
看群里面讨论,采用Nitrogen的项目也不在少数,这个项目动态模板方案不是采用ErlyDTL,而是自己有一套解决方案Nitrogen records [链接].网站上的例程和Step by Step教程足够详细,入门应该比较快.
项目地址:Nitrogen - Nitrogen Web Framework for Erlang
Zotontic
一句话介绍:Zotonic is the open source, high speed, real-time web framework and content management system, built with Erlang.
应该说Zotontic和其它框架的差异更多是在业务定位上了,提供了很多CMS直接可用的功能,查看其features列表能够看到详细介绍,注意:"Typically 10 times (and much more) faster than PHP content management systems." [链接]
Zotontic构建在Mochiweb和PostgreSQL之上.
项目地址:http://zotonic.com/
BeepBeep
一句话介绍: BeepBeep is a simple web application framework for Mochiweb inspired by Rails and Merb
BeepBeep 构建在 MochiWeb 和 ErlyDTL (后面会介绍) 基础之上. 沿袭了mochiweb的优良传统一键建站,基于ErlyDTL提供Django 模板的视图展现.
这个项目已经09年之后就没有实质性的更新,最近一次更新是2010年更新了一下README,慎重选择吧.
还有一个项目ErlyWeb同样是
6. 求erlang源码一份,要求有 四个behaviour的整合运用,利用application启动停止程序
http://download.csdn.net/detail/nihao5201314520/5287732 这是一份服务端的源码,希望对你有帮助
7. erlang 怎么写 post 请求
用 cowboy 作为网络请求的容器,其中用了对 http 的 POST 请求处理,由于资料较少,找了很久才在外国网站找到了解决的好方法。(其实只是一个方法,自己看源码看了很久,英文不太好,所以找不到相应的处理方法是那个,一开始尽管拿二进制进行匹配,感觉笨死了)。
下面一个小例子:
hhh.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>hhhh</title>
</head>
<body>
<form action="http://localhost:8080/" method="POST"><br>
<input type="test" name="name"/>name<br>
<input type="test" name="passwd"/>passwd<br>
<input type="submit" value="Submit"/><br>
</form>
</body>
</html>
hhh.erl
-mole(hhh).
-behavior(cowboy_http_handler).
-export([init/3, handle/2, terminate/2]).
%%
%%API
%%
init({_Any, http}, Req, [])->
{ok, Req, undefined}.
handle(Req,State)->
%%%
%%% 在POST请求中取出内容
%%% 用户名NAME
%%% 密码 PASSWD
{[{_N,Name},{_P,Passwd}],_Req}=cowboy_http_req:body_qs(Req),
io:format(" name is :~ts passwd is : ~ts ~n",[Name,Passwd]),
{ok, _Req} = cowboy_http_req:reply(200, [],<<"ok">>, Req),
{ok, _Req, State}.
terminate(_Req,_State)->
ok.
通过一个cowboy_http_req:body_qs(Req)函数,就可以把body 里面通过POST传过来的值了,在通过匹配拿出想要的信息。
因为此函数返回的格式是: {list({binary(), binary() | true}), #http_req{}}
即 {[{"name","页面填的name"},{"passwd","页面填的passwd"}],Req1}
拿到信息之后就可以安心开展下来的业务了
随便附上匹配二进制的代码:
<<First:1/binary,Second:1/binary,Last:2/binary>>=<<"fuck">>
First=f
Second=u
Last=ck
希望有所帮助 =。=
8. 如何查看erlang模块的源码
如何查看erlang模块的源码
例如条件语句:
if(a>b) max=a;
else max=b;
可用条件表达式写为
max=(a>b)?a:b;
执行该语句的语义是:如a>b为真,则把a赋予max,否则把b 赋予max。
使用条件表达式时,还应注意以下几点:
1) 条件运算符的运算优先级低于关系运算符和算术运算符,但高于赋值符。
因此
max=(a>b)?a:b
可以去掉括号而写为
max=a>b?a:b
2) 条件运算符?和:是一对运算符,不能分开单独使用。
3) 条件运算符的结合方向是自右至左。
例如:
a>b?a:c>d?c:d
应理解为
a>b?a:(c>d?c:d)
这也就是条件表达式嵌套的情形,即其中的表达式3又是一个条件表达式。