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>
分享到:
相关推荐
这通常涉及到创建一个新的Erlang shell会话,然后加载编译好的模块,尝试连接到MySQL服务器并执行一些基本查询。 5. **集成到项目**:将编译好的Erlang MySQL库添加到你的项目中,通常将其放置在`ebin`目录下,然后...
动态代码替换是Erlang的一个特性,允许在任何时候加载模块的新版本。这使得在不中断服务的情况下,能够更新正在运行的系统。Erlang主要用于编写具有高并发性的复杂控制应用程序,如电信交换软件。这些应用程序可能...
编写代码,保存文件,然后观察Erlang自动检测到您的更改,重新编译代码并重新加载模块。如何使用同步?通过钢筋依赖安装{ deps , [{ sync , " .* " ,{ git , " git://github.com/rustyio/sync.git " , { branch , ...
- 编译Rust代码为动态链接库(DLL或SO),Erlang VM能够加载并调用。 - 在Erlang代码中,定义对应的函数头,调用`rustler`提供的宏来注册NIF。 4. **安全性和错误处理**: - Rust的安全特性,如静态类型检查和...
同时,理解Erlang的错误处理和模块化设计也是至关重要的。 总结,搭建Erlang环境是开始学习和开发Erlang的第一步,无论是在Windows还是Linux上,都可以通过上述步骤轻松完成。结合Emacs和Distel这样的工具,可以...
Erlang/OTP(Open Telecom Platform)是Erlang编程环境的基础,它包括了Erlang虚拟机(BEAM)、标准库和一系列强大的工具,如模块编译器、调试器、性能监视器等。OTP提供了一套设计模式和库,帮助开发者构建可靠、...
当一个模块被加载到Erlang虚拟机(VM)时,它的代码会被编译并驻留在内存中。热部署就是指在不重启VM或应用程序的情况下,更新这些驻留在内存中的模块代码。 进行模块级别热部署的步骤通常包括以下几点: 1. **...
这个函数会查找与Erlang模块同名的动态链接库(如`.so`或`.dll`文件),并将其加载到Erlang进程中。 4. **错误处理**:NIF必须处理可能的错误情况,例如C函数的异常、资源不足等。如果C函数返回错误,Erlang VM应该...
在Erlang中,我们可以通过修改源代码或加载动态模块来扩展RabbitMQ。例如,如果你想要添加一个新功能,可以在`rabbitmq_server/src`目录下创建一个新的Erlang模块,然后在`rabbit`模块中调用它。确保遵循Erlang的...
然后通过`erl`命令进入Erlang shell,加载应用并启动它。你可以使用`application:start(bank1)`来启动应用,并通过`bank1:open_account(123)`等方式调用应用的功能。 7. **版本管理和更新**:在`releases`目录下,...
模块名应与包含它的文件名相同,这使得Erlang能够轻松找到和加载模块。Erlang程序通常由多个模块组成,每个模块负责特定的功能,这样有利于代码的可读性和维护。 7. **错误处理和调试** 如果编译失败,Erlang ...
- **安装**:将`gproc`源码添加到你的项目依赖中,然后编译并加载到Erlang VM中。 - **注册进程**:使用`gproc:reg/2`函数为进程注册全局名字。 - **查找进程**:使用`gproc:lookup/1`或`gproc:lookup_pid/1`根据...
### Erlang安装手册知识点解析 #### 一、Erlang简介 Erlang是一种通用、并发、...通过编译和运行该模块来检查Erlang是否正确安装和配置。 以上是对Erlang及其核心特性的详细介绍,希望对您了解和学习Erlang有所帮助。
1. **准备新版本**:编写并编译新的Erlang模块代码,生成`.beam`文件。 2. **加载新代码**:使用`code:load_file/1`函数加载新版本的模块到代码服务器,但此时旧代码仍然在运行。 3. **检查类型签名**:Erlang会对比...
如果你有自定义的Erlang模块或者第三方应用,将其路径添加到`ERL_LIBS`可以确保它们在运行时被正确加载。 脚本化安装不仅方便,还便于在多台服务器上快速部署Erlang环境,尤其在运维场景中非常实用。例如,通过结合...
3. **部署到节点**:将释放包复制到目标Erlang节点的`ebin`目录下,或者使用`release_handler`模块的`add_application/2`或`install_release/1`函数进行远程部署。 4. **启动应用**:调用`application:start/1`或`...
**注意**:只有编译时设置了 `debug_info` 选项的模块才能被解释。无法解释的模块将在 **Interpret Dialog Window** 中以括号形式显示。 当一个模块被解释后,可以在 **View Module Window** 中查看其详细信息。 #...