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

Erlang动态编译加载模块

阅读更多
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>
分享到:
评论
1 楼 whrllm 2009-11-11  
哈哈,这个是个好东西,动态编译出const pool,读取速度上来不少呢,

相关推荐

    erlang_mysql编译好了

    这通常涉及到创建一个新的Erlang shell会话,然后加载编译好的模块,尝试连接到MySQL服务器并执行一些基本查询。 5. **集成到项目**:将编译好的Erlang MySQL库添加到你的项目中,通常将其放置在`ebin`目录下,然后...

    erlang两种参数模块化

    动态代码替换是Erlang的一个特性,允许在任何时候加载模块的新版本。这使得在不中断服务的情况下,能够更新正在运行的系统。Erlang主要用于编写具有高并发性的复杂控制应用程序,如电信交换软件。这些应用程序可能...

    sync:快速在Erlang中进行重新编译和重新加载。 代码无摩擦

    编写代码,保存文件,然后观察Erlang自动检测到您的更改,重新编译代码并重新加载模块。如何使用同步?通过钢筋依赖安装{ deps , [{ sync , " .* " ,{ git , " git://github.com/rustyio/sync.git " , { branch , ...

    rustler编写erlang nif

    - 编译Rust代码为动态链接库(DLL或SO),Erlang VM能够加载并调用。 - 在Erlang代码中,定义对应的函数头,调用`rustler`提供的宏来注册NIF。 4. **安全性和错误处理**: - Rust的安全特性,如静态类型检查和...

    erlang环境搭建

    同时,理解Erlang的错误处理和模块化设计也是至关重要的。 总结,搭建Erlang环境是开始学习和开发Erlang的第一步,无论是在Windows还是Linux上,都可以通过上述步骤轻松完成。结合Emacs和Distel这样的工具,可以...

    erlang win64_18.1

    Erlang/OTP(Open Telecom Platform)是Erlang编程环境的基础,它包括了Erlang虚拟机(BEAM)、标准库和一系列强大的工具,如模块编译器、调试器、性能监视器等。OTP提供了一套设计模式和库,帮助开发者构建可靠、...

    Erlang 中的Module级别热部署

    当一个模块被加载到Erlang虚拟机(VM)时,它的代码会被编译并驻留在内存中。热部署就是指在不重启VM或应用程序的情况下,更新这些驻留在内存中的模块代码。 进行模块级别热部署的步骤通常包括以下几点: 1. **...

    erlang nif test

    这个函数会查找与Erlang模块同名的动态链接库(如`.so`或`.dll`文件),并将其加载到Erlang进程中。 4. **错误处理**:NIF必须处理可能的错误情况,例如C函数的异常、资源不足等。如果C函数返回错误,Erlang VM应该...

    搭建自己的erlang服务器(基于RabbitMQ改进)(一)

    在Erlang中,我们可以通过修改源代码或加载动态模块来扩展RabbitMQ。例如,如果你想要添加一个新功能,可以在`rabbitmq_server/src`目录下创建一个新的Erlang模块,然后在`rabbit`模块中调用它。确保遵循Erlang的...

    Erlang入门:构建application练习2

    然后通过`erl`命令进入Erlang shell,加载应用并启动它。你可以使用`application:start(bank1)`来启动应用,并通过`bank1:open_account(123)`等方式调用应用的功能。 7. **版本管理和更新**:在`releases`目录下,...

    erlang中文基础教程

    模块名应与包含它的文件名相同,这使得Erlang能够轻松找到和加载模块。Erlang程序通常由多个模块组成,每个模块负责特定的功能,这样有利于代码的可读性和维护。 7. **错误处理和调试** 如果编译失败,Erlang ...

    erlang_gproc_扩展实现Erlang的全局ets

    - **安装**:将`gproc`源码添加到你的项目依赖中,然后编译并加载到Erlang VM中。 - **注册进程**:使用`gproc:reg/2`函数为进程注册全局名字。 - **查找进程**:使用`gproc:lookup/1`或`gproc:lookup_pid/1`根据...

    Erlang安装手册

    ### Erlang安装手册知识点解析 #### 一、Erlang简介 Erlang是一种通用、并发、...通过编译和运行该模块来检查Erlang是否正确安装和配置。 以上是对Erlang及其核心特性的详细介绍,希望对您了解和学习Erlang有所帮助。

    erlang代码热替换与应用部署

    1. **准备新版本**:编写并编译新的Erlang模块代码,生成`.beam`文件。 2. **加载新代码**:使用`code:load_file/1`函数加载新版本的模块到代码服务器,但此时旧代码仍然在运行。 3. **检查类型签名**:Erlang会对比...

    erlang-end.rar

    如果你有自定义的Erlang模块或者第三方应用,将其路径添加到`ERL_LIBS`可以确保它们在运行时被正确加载。 脚本化安装不仅方便,还便于在多台服务器上快速部署Erlang环境,尤其在运维场景中非常实用。例如,通过结合...

    Erlang应用部署与热代码替换--理解2

    3. **部署到节点**:将释放包复制到目标Erlang节点的`ebin`目录下,或者使用`release_handler`模块的`add_application/2`或`install_release/1`函数进行远程部署。 4. **启动应用**:调用`application:start/1`或`...

    Erlang Debugger

    **注意**:只有编译时设置了 `debug_info` 选项的模块才能被解释。无法解释的模块将在 **Interpret Dialog Window** 中以括号形式显示。 当一个模块被解释后,可以在 **View Module Window** 中查看其详细信息。 #...

Global site tag (gtag.js) - Google Analytics