原创文章,转载请注明出处:服务器非业余研究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,beginrec0 = Acc * N,rec1 = State,case rec1 of{state,rec2} ->{state,rec0};_ ->error({badrecord,state})endend).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 7fun (_cor0) ->%% Line 8apply 'fac'/2(_cor0, {'state',1})
'fac'/2 =%% Line 10fun (_cor1,_cor0) ->case <_cor1,_cor0> of<0,{'state',Acc}> when 'true' ->%% Line 11Acc%% Line 12when '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,_cor0altselect _cor1type k_int0 ->select _cor0type k_tuple{_ker6,_ker5} ->select _ker6type k_atom'state' -><<_ker5>>altselect _cor0type 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...>>

[Erlang].erl文件的一生相关推荐

  1. Progamming Erlang 通过 Makefile 自动编译 .erl 文件

    通过 makefile 可以自动化一部分工作,比如编译 .erl 文件 一.在 /root/workspace/erlang/test 中新建两个 .erl 文件,分别是 test.erl ,test ...

  2. Erlang模块erl翻译

    命令: erl 概述: Erlang模拟器 描述: erl程序启动一个Erlang运行时系统.准确的信息是依赖于系统的(举例,erl是否是脚本或程序,其它程序调用). 相反,windows用户可能想要 ...

  3. Windows下Erlang开发环境搭建

    1.下载otp_win32_R15B.exe,并安装: 2.配置环境变量 a.增加用户变量ERL_HOME,变量值为C:\Program Files\erl5.9(erlang的安装路径). b.编辑 ...

  4. 《Erlang程序设计》第十五章 ETS和DETS:大数据的存储机制

    第十五章 ETS和DETS:大数据的存储机制 Table of Contents 第十五章 ETS和DETS:大数据的存储机制 15.1 表的基本操作 创建和打开表 插入表 查找元组 释放表 15.2 ...

  5. erlang环境变量——HOME

    2019独角兽企业重金招聘Python工程师标准>>> 当我们启动一个erl时,通过ps可以看到对应进程会自动带上一堆参数,其中一个是"-home" 那么-hom ...

  6. Erlang实战:建立文本索引

    为文本建立索引是文本信息处理的一个重要的任务,给定一个由英文单词构成的文件,为文件中所有单词建立索引,记录每个单词出现的行号和每行出现的次数,并将索引存入一个文件.在Erlang实战练习(六)中我强调 ...

  7. ubuntu下搭建erlang编程环境

    ubuntu下搭建erlang编程环境 吐槽:erlang作为一门小众语言,编程环境配置的我发疯啊,官方标配是emacs,但是我作为中毒已深的vimer实在不想换编辑器了,在尝试的途中我还试过了用ec ...

  8. Erlang读书笔记

    Erlang的交互式环境 安装:下载并安装Erlang,在OS的环境变量中添加pathErlangHOME/bin目录 启动:linux 环境:erl,windows: 开始-程序-erlang图标启 ...

  9. Erlang词法分析器、语法分析器(lexer-leex,yac-yecc)

    一.简介 一门编程语言的编译器或者解释器通常功能分解为两步: 1.读取源码文件然后分析它的结构 2.处理这些结构,例如生成目标程序 lexer和yacc就是能完成第一步以便生成程序段的工具.而第一步的 ...

最新文章

  1. spring boot 2.0 源码分析(二)
  2. Python3 xml模块的增删改查
  3. altium designer 绘制pcb时漏线检查
  4. apache mysql php实现最大负载的方法_如何架设高性能nginx+php+mysql搭配的服务器,解决高并发问题...
  5. java==和=_java中==和 equal区别
  6. 愿只有一个Grid Layout
  7. 讲给23岁以上男生的生活方式
  8. 机器学习学习吴恩达逻辑回归_机器学习基础:逻辑回归
  9. kindeditor用法简单介绍(转)
  10. 记录工作中遇到的问题
  11. 本地无法启动MySQL服务,报的错误:1067,进程意外终止---解决
  12. 无法找到或创建字体'SansSerif'.某些字符可能无法正确显示或打印。
  13. mysql 多键sequence_MySQL增多Sequence管理功能
  14. 【数据仓库】数据仓库设计前如何粗估所需的存储空间大小?
  15. 如何卸载FileZilla的Ftp服务
  16. iphone iPhone开发中如何将制作图片放大缩小代码实现案例
  17. media query学习笔记
  18. TFTPD32不能传输数据的解决与尝试
  19. pr如何跳到关键帧_必收藏的PR常用快捷键大全
  20. RFM、PSM、波士顿矩阵模型简介

热门文章

  1. HEVC编码框架和main函数代码跟踪解读
  2. https协议和Htt协议
  3. [GWCTF 2019]枯燥的抽奖 1——php_mt_seed
  4. O2OA RCE 远程命令执行漏洞复现(CVE-2022-22916)
  5. 中级工程师职称有什么作用?有含金量吗?为什么要办?甘建二
  6. 外贸用户如何创建邮箱并登录邮箱?
  7. Java27岁了——我与Java初识
  8. [2017-08-21]Abp系列——如何使用Abp插件机制(注册权限、菜单、路由)
  9. Python如何安装模块,python模块安装失败的原因以及解决办法
  10. Premiere视频调色处理,将彩色画面转变成黑白色 myblogfree