Erlang动态编译加载模块
2011-05-12 10:54
169 查看
转载:http://www.iteye.com/topic/482274
ejabberd最新的版本有个模块叫做 dynamic_compile, 支持从string动态加载一个模块。有了这个功能我们就可以很方便的动态生成一个模块,加入到我们的运行期。我想的有以下几个功能:
1. const 模块
2. 如日志系统的级别:
log(S) when 0 > 1 ->
do_log(S);
log(_)->
skip.
这样的模块 编译的时候 会把前面的就省去了判断, 直接由compiler去掉了,因为when永远不满足。
试验如下:
yu-fengdemacbook-2:~ yufeng$ erl
Erlang (BEAM) emulator version 5.6.5 [source] [async-threads:0] [hipe] [kernel-poll:false]
Eshell V5.6.5 (abort with ^G)
1> {Mod,Code} = dynamic_compile:from_string("-module(test)./n-export([start/0])./n start()->ok./n"), code:load_binary(Mod, "test.erl", Code).
{module,test}
2> m(test).
Module test compiled: Date: October 6 2009, Time: 08.43
Compiler options: []
Object file: test.erl
Exports:
module_info/0
module_info/1
start/0
ok
3> test:start().
ok
4>
ejabberd最新的版本有个模块叫做 dynamic_compile, 支持从string动态加载一个模块。有了这个功能我们就可以很方便的动态生成一个模块,加入到我们的运行期。我想的有以下几个功能:
1. const 模块
2. 如日志系统的级别:
log(S) when 0 > 1 ->
do_log(S);
log(_)->
skip.
这样的模块 编译的时候 会把前面的就省去了判断, 直接由compiler去掉了,因为when永远不满足。
试验如下:
yu-fengdemacbook-2:~ yufeng$ erl
Erlang (BEAM) emulator version 5.6.5 [source] [async-threads:0] [hipe] [kernel-poll:false]
Eshell V5.6.5 (abort with ^G)
1> {Mod,Code} = dynamic_compile:from_string("-module(test)./n-export([start/0])./n start()->ok./n"), code:load_binary(Mod, "test.erl", Code).
{module,test}
2> m(test).
Module test compiled: Date: October 6 2009, Time: 08.43
Compiler options: []
Object file: test.erl
Exports:
module_info/0
module_info/1
start/0
ok
3> test:start().
ok
4>
相关文章推荐
- CentOS 5.6下将linux内核2.6.18升级到2.6.30,并编译动态加载linux下第一个模块
- Linux 2.6内核的编译步骤及模块的动态加载
- 从给编译好的LAMP环境中的PHP添加Xdebug模块分析动态加载
- 通过源码包php-5.4.9.tar.gz编译安装PHP之后,如何加载动态模块,不需要重新配置PHP
- nginx php动态编译加载模块.
- Linux 2.6内核的编译步骤及模块的动态加载
- Linux 2.6内核的编译步骤及模块的动态加载
- Linux 内核的编译步骤及模块动态加载
- Linux 2.6内核的编译步骤及模块的动态加载
- Linux 2.6内核的编译步骤及模块动态加载
- PHP扩展开发之动态加载so模块与静态重编译PHP(上)
- Linux apache 单独编译 动态加载模块
- Linux 2.6内核的编译步骤及模块的动态加载
- Linux 2.6内核的编译步骤及模块的动态加载
- PHP扩展开发之动态加载so模块与静态重编译PHP(下)
- Linux 2.6内核的编译步骤及模块的动态加载
- Linux 2.6内核的编译步骤及模块的动态加载
- 编译时向内核添加新设备 模块的方式动态的将驱动加入内核,但这种方式加入的驱动程序,当系统重新启动时, 还需要重新用模块的方式进行插入,如果是系统内常用的设备驱动采用这种方式进行加载, 就会很不方便。
- Linux 2.6内核的编译步骤及模块的动态加载
- Linux 2.6内核的编译步骤及模块动态加载