[Erlang].erl文件的一生
来源:互联网 发布:上课笔记软件 编辑:程序博客网 时间:2024/05/19 11:17
原创文章,转载请注明出处:服务器非业余研究http://blog.csdn.net/erlib 作者Sunface
联系邮箱:cto@188.com
最初形式 File.erl
1.preprocessing(预处理)
compile:file(File,['P']).
2.expansion(扩展)
compile:file(File,['E']).
3.core erlang(erlang core代码)
compile:file(File,[to_core]).
4.kernel erlang(erlang kernel代码)
compile:file(FIle,[to_kernel]).
5.Assembly(汇编码)
compile:file(File,['S']).
6.Beam file(beam文件,机器码)
compile:file(File).
最后一步实际上是集合了上面5步所有过程
示例:
fac.erl
-file("fac.erl", 1).-module(fac).-export([fac/1]).-file("fac.hrl", 1).-record(state,{acc}).-file("fac.erl", 6).fac(N) -> fac(N, #state{acc = 1}).fac(0, #state{acc = Acc}) -> Acc;fac(N, #state{acc = Acc} = State) -> fac(N - 1, State#state{acc = Acc * N}
预处理:
-file("fac.erl", 1).-module(fac).-export([fac/1]).-file("fac.hrl", 1).-record(state,{acc}).-file("fac.erl", 6).fac(N) -> fac(N, #state{acc = 1}).fac(0, #state{acc = Acc}) -> Acc;fac(N, #state{acc = Acc} = State) -> fac(N - 1, State#state{acc = Acc * N}
扩展:这里仍然还是erlang代码
-file("fac.erl", 1).-file("fac.hrl", 1).-file("fac.erl", 6).fac(N) -> fac(N, {state,1}).fac(0, {state,Acc}) -> Acc;fac(N, {state,Acc} = State) -> fac(N - 1, begin rec0 = Acc * N, rec1 = State, case rec1 of {state,rec2} -> {state,rec0}; _ -> error({badrecord,state}) end end).module_info() -> erlang:get_module_info(fac).module_info(X) -> erlang:get_module_info(fac, X).
core erlang:
module 'fac' ['fac'/1, 'module_info'/0, 'module_info'/1] attributes []'fac'/1 = %% Line 7 fun (_cor0) ->%% Line 8apply 'fac'/2 (_cor0, {'state',1})'fac'/2 = %% Line 10 fun (_cor1,_cor0) ->case <_cor1,_cor0> of <0,{'state',Acc}> when 'true' -> %% Line 11 Acc %% Line 12 when 'true' -> let <_cor6> = %% Line 13
kernel erlang:
module 'fac'export ['fac'/1,'module_info'/0,'module_info'/1]attributes []fdef 'fac'/1(_cor0) = enter (local 'fac'/2)(_cor0, {state,1})fdef 'fac'/2(_cor1, _cor0) = match _cor1,_cor0 alt select _cor1type k_int 0 -> select _cor0 type k_tuple{_ker6,_ker5} -> select _ker6 type k_atom 'state' -><<_ker5>> altselect _cor0 type k_tuple {_ker4,_ker3} -> select _ker4
汇编:
{module, fac}. %% version = 0{exports, [{fac,1},{module_info,0},{module_info,1}]}.{attributes, []}.{labels, 10}.{function, fac, 1, 2}. {label,1}. {line,[{location,"fac.erl",7}]}. {func_info,{atom,fac},{atom,fac},1}. {label,2}. {move,{literal,{state,1}},{x,1}}. {call_only,2,{f,4}}.{function, fac, 2, 4}. {label,3}. {line,[{location,"fac.erl",10}]}. {func_info,{atom,fac},{atom,fac},2}. {label,4}. {test,is_eq_exact,{f,5},[{x,0},{integer,0}]}. {test,is_tuple,{f,3},[{x,1}]}. {test,test_arity,{f,5},[{x,1},2]}.
.beam机器码:
<<70,79,82,49, 0,0,2,136, 66,69,65,77, 65,116,111,109, 0,0,0,53 ...>>机器码等同于下面的代码
<<"FOR1", 648:32, "BEAM", "Atom", 0,0,0,53 ...>>
1 0
- [Erlang].erl文件的一生
- erlang -> afile_sever.erl
- erlang c.erl
- Erlang静态键值对(key-value)数据分别写入erl文件与ETS表读取的测试
- Erlang的erl与epmd的区别与联系
- [erlang] [python] 在excel设定固定规则,转换为erl和hrl文件
- erlang 模块错误 糟糕的模块声明 erl:1: bad module declaration
- [erl] erlang 进程注册和注销
- rabbit_sup.erl源码文件学习
- Erlang的EmakeFile文件
- erlang本地erl -name mynode -setcookie abc 失败
- 基于 Erlang/OTP 搭建TCP服务器(erlc *.erl)
- Erlang的Makefile文件备忘
- Erlang的Emakefile文件备忘
- erlang源程序文件的注释
- 关于Erlang/OTP的application参数配置 erlang app 文件
- 2015-1-11 【erlang】erl中的make -make 参数 以及 Emakefile
- 启动erlang 文件的 为 log4erl.app
- 关闭window update自动更新和推送服务
- 获取网络状态及跳转到网络设置界面
- ProtocolBuffer for Objective-C 运行环境配置(真正测试过的)
- Android项目javadoc时出现的几个错误解决
- Fresco介绍 - 一个新的android图片加载库
- [Erlang].erl文件的一生
- 【C++】注释转换详解 C++注释转换为标准C语言注释
- 一站式解决,Android 拍照 图库的各种问题
- hdu 1035 (usage of sentinel, proper utilization of switch and goto to make code neat)
- fedora10 安装NFS服务 ARM端挂载
- Android大图片裁剪终极解决方案
- 在你的Android App中支持多主题
- Python学习(二)---使用list和tuple
- 如何看懂代码