`
mryufeng
  • 浏览: 982072 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

erlang动态解释

阅读更多
erlang的代码运行有2种方式 1. 编译成opcode 2. eval.   这2种形式都需要把erl代码翻译成abstract code, 然后在不同的途径分别开.

通常情况下我们在eshell 里面输入的东西都是动态eval的. erl还支持命令行动态解释. erl -eval e
init.erl
start_it({eval,Bin}) ->
    Str = binary_to_list(Bin),
    {ok,Ts,_} = erl_scan:string(Str),
    Ts1 = case reverse(Ts) of
              [{dot,_}|_] -> Ts;
              TsR -> reverse([{dot,1} | TsR])
          end,
    {ok,Expr} = erl_parse:parse_exprs(Ts1),
    erl_eval:exprs(Expr, []),
    ok;

我们看到express先文法扫描, 确认以dot结尾, 然后进行语法分析,形成abstract code, 最后 erl_eval解释abstact code.
我们注意到 在erl_parse的时候 表达式是这样的 f()->expr. 这就解释了为什么在shell里面无法定义函数,无法定义module什么的.

io模块和shell模块都是以上面的形式来动态eval的. 这个特性很好用, 配合parse_transform, 我们可以很容易自己实现个DSL语言.


分享到:
评论
2 楼 mryufeng 2010-01-27  
lua就没有, lua都是先编译成opcode, 然后执行的.
1 楼 rain2005 2010-01-26  
解释性语言都有这个eval。

相关推荐

    使用erlang的动态执行编写DSL

    标题中的“使用Erlang的动态执行编写DSL”是指利用Erlang这门函数式编程语言来构建领域特定语言(Domain Specific Language)。DSL是一种专为某一特定领域设计的语言,它通常比通用编程语言更为简洁,更易于理解和...

    erlang编程 Introducing Erlang

    它负责解释Erlang字节码,提供内存管理、垃圾回收和并发调度等功能。 ### 10. 语言特性 Erlang的语法简洁,支持模式匹配、函数式编程、列表处理和递归等特性。它的动态类型系统和强大的类型推断让代码更加灵活。 ...

    erlang win64_18.1

    这个安装程序将部署Erlang运行时系统,包括解释器、编译器和其他必要的组件,使得开发人员可以在Windows平台上编写、编译和运行Erlang代码。 Erlang的特性包括: 1. 并发:Erlang通过轻量级进程实现并发,这些进程...

    Erlang(32,64)安装程序

    Erlang是运行于虚拟机的解释性语言,但是现在也包含有乌普萨拉大学高性能Erlang计划(HiPE)开发的本地代码编译器,自R11B-4版本开始,Erlang也开始支持脚本式解释器。在编程范型上,Erlang属于多重范型编程语言,...

    erlang 部分源码

    Erlang是一种面向并发的、动态类型的编程语言,主要用于构建高可用性、容错性和分布式系统。这个压缩包包含的是Erlang的部分源代码,尽管可能不完整,但仍然能够提供对Erlang语言实现机制的深入了解。 1. **Erlang...

    Erlang编程指南

    Erlang是运行于虚拟机的解释性语言,但是现在也包含有乌普萨拉大学高性能Erlang计划(HiPE)开发的本地代码编译器,自R11B-4版本开始,Erlang也开始支持脚本式解释器。在编程范型上,Erlang属于多重范型编程语言,...

    JavaScript + Delphi + ErLang讲座内容(4)

    学习这些内容可以帮助开发者了解如何在实际项目中利用JavaScript的动态性、Delphi的桌面应用开发优势以及Erlang的并发和分布特性。这不仅能够提升跨平台开发的能力,还能掌握如何构建高可用和可扩展的系统。

    无涯教程(LearnFk)-Erlang教程离线版.pdf

    它是一个解释型语言,运行于虚拟机之上,但后来增加了乌普萨拉大学高性能Erlang计划(HiPE)开发的原生代码编译器,从R11B-4版本开始也支持脚本方式执行。 Erlang采用函数式、并行及分布式多重范型编程语言设计,...

    Erlang程序设计中文版

    5. **BEAM虚拟机**:Erlang运行在BEAM(Erlang虚拟机)上,它负责解释和执行Erlang代码。BEAM提供了高效的垃圾回收机制,以及对并发和内存管理的良好支持。 6. **OTP(Open Telecom Platform)框架**:OTP是Erlang...

    java php python erlang 千万级内存数据性能比较

    Python的字典操作通常很快,但由于动态类型和解释执行,对于千万级数据处理,其性能可能低于编译型语言。 标签"千万级性能"提示我们关注的重点在于每种语言在处理大量内存数据时的效率。在实际应用中,除了语言本身...

    Erlang程序设计 Programming.Erlang.Joe.Armstrong.英文版.pdf

    - **2.6 变量**:解释了Erlang中的变量概念和使用方法。 - **2.7 浮点数**:介绍了浮点数的表示方式和运算规则。 - **2.8 原子**:讨论了原子类型以及它们在Erlang中的作用。 - **2.9 元组**:解释了元组的定义...

    Introducing Erlang

    这可能包括对安装步骤的解释,以及如何启动Erlang的交互式shell(通常称为Erlang的REPL,即读取-评估-打印循环)。这一步骤对于新用户来说至关重要,因为它让他们可以立即开始实验Erlang的基本命令。 2. **Shell的...

    Erlang文档资料大集合

    这表明该资源包不仅提供了英文原版的教程和资料,还考虑到了中文用户的需求,提供了中文翻译或解释,使得国内的学习者也能无障碍地学习Erlang。 在`en`目录下,你可以找到Erlang的官方文档、教程、案例研究以及社区...

    Erlang/OTP 中文手册(R11B)

    - **动态类型**:Erlang具有动态类型系统,变量赋值后不能改变。 - **模式匹配**:Erlang的模式匹配用于解构数据结构和选择执行路径,简化了代码逻辑。 - **错误处理**:使用`try...catch...after`语句进行异常处理...

    scala erlang groovy python 原理 比较 分析

    标题和描述均提到了对五种编程语言——Scala、Erlang、Groovy、Python以及它们各自的原理、比较和分析。这些语言各自拥有独特的特性和应用场景,在编程领域扮演着不同的角色。下面,我们将深入探讨每种语言的关键...

    Erlang OTP设计原理文档 中文版本

    这提供了事件分发的灵活性,支持动态添加和删除事件处理函数。 7. Appup(Upgrade and Downgrade): `appup_cookbook.html`和`release_handling.html`讨论的是应用程序升级和降级的机制。Appup文件定义了如何在不...

    Go/Python/Erlang编程语言对比分析及示例代码

    Python的并发处理相对较弱,虽然有threading和asyncio等模块提供并发支持,但受到GIL(全局解释器锁)的限制,在多线程场景下无法实现真正的并行。 在语言特性上,Go语言具有静态类型、自动垃圾回收、高效的并发...

    金属箔:高性能Erlang缓存编译器

    它可能采用了先进的编译技术,如静态分析、优化算法、代码缓存等,以期在保持Erlang动态特性的基础上,实现性能飞跃。 **编译器优化技术** 1. **代码缓存**:金属箔可能通过分析和存储常用的Erlang函数,将其编译...

    JavaScript + Delphi + ErLang 讲座内容(1)

    Like JS"可能探讨的是JavaScript的某些特性或库,并解释如何在其他环境中复用或模拟这些特性。 - "03. MSNGroup"可能涉及到使用JavaScript进行即时通讯(IM)应用的开发,或者是在Delphi中集成类似MSN的聊天功能。 ...

    otp_win64_23.2.6.exe

    Erlang是运行于虚拟机的解释性语言,但是现在也包含有乌普萨拉大学高性能Erlang计划(HiPE)开发的本地代码编译器,自R11B-4版本开始,Erlang也开始支持脚本式解释器。在编程范型上,Erlang属于多重范型编程语言,...

Global site tag (gtag.js) - Google Analytics