标签: beam

什么样的虚拟机是BEAM(Erlang VM)?

据我所知,虚拟机分为两类:"系统虚拟机"或"进程虚拟机".BEAM所在的地方对我来说有点模糊.还有其他一种我不知道的虚拟机吗?

erlang virtual-machine beam

111
推荐指数
3
解决办法
4万
查看次数

erlang BEAM字节码

好吧,我希望我不会在这里打破一些垃圾邮件规则.我刚问了一个关于erlang编译器如何实现模式匹配的问题,我得到了一些很好的响应,其中一个是编译后的字节码(通过传递给c()指令的参数获得):

{function, match, 1, 2}.
  {label,1}.
    {func_info,{atom,match},{atom,match},1}.
  {label,2}.
    {test,is_tuple,{f,3},[{x,0}]}.
    {test,test_arity,{f,3},[{x,0},2]}.
    {get_tuple_element,{x,0},0,{x,1}}.
    {test,is_eq_exact,{f,3},[{x,1},{atom,a}]}.
    return.
  {label,3}.
    {badmatch,{x,0}}
Run Code Online (Sandbox Code Playgroud)

它只是简单的二郎元组.我期待一些神秘的二元东西,猜不是.所以我在这里冲动地问这个问题(我可以看一下编译器的来源但是问题总是会因为额外的洞察力而变得更好),这个输出如何在二进制级别翻译?

{test,is_tuple,{f,3},[{x,0}]}的例子.我假设这是一条指令,称为'test'...无论如何,所以这个输出本质上是字节码级语言的AST,二进制编码只是1-1的翻译?这一切都是如此令人兴奋,我不知道我能否轻松地看到erlang编译器破坏了什么.

非常感谢

erlang bytecode bytecode-manipulation beam

18
推荐指数
2
解决办法
5748
查看次数

BEAM和JVM之间有哪些基本的功能/架构差异?

BEAM和JVM之间的一些基本功能/架构差异是什么?

  1. 是的我知道:一个最初是围绕java构建的,另一个是围绕erlang构建的
  2. 我理解JVM(有点)并希望比较它们的结构
  3. 例如,我知道JVM有一个全局GC,BEAM每个进程有一个

architecture erlang jvm beam vm-implementation

15
推荐指数
2
解决办法
1517
查看次数

在Erlang的抽象机器BEAM中使用了哪些OS线程?

我已经开始研究Erlang并发现BEAM运行时环境很吸引人.通常声明在Erlang中,进程属于语言而不是OS(意味着运行时,在这种情况下意味着BEAM).这些是Erlang以其着名的轻量级"绿色流程".它进一步指出(第5页的本文的是波束使用每个CPU核一(1)OS线程调度和另一个OS线程用于I/O).所以我想知道:从实际执行Erlang代码所需的CPU周期来自哪个线程?

此外,如果我在双核机器上运行,我希望 - 基于我到目前为止所读到的 - 看到在BEAM进程下运行的三(3)个线程:两个调度程序(每个核心一个)和一个I/O线程.但我看到10.有时11.有时它从13开始,和高质量的放大器一样,到11.

我糊涂了.任何见解将不胜感激.

erlang multithreading beam

15
推荐指数
2
解决办法
1407
查看次数

Erlang光束文件有多便携?

我有一个临时情况,在一个节点上编译的梁文件在另一个节点上执行.光束文件是否可移植?

Erlang发行版的版本有多接近?

erlang beam

14
推荐指数
2
解决办法
3161
查看次数

BEAM代表Elx编程语言的iex是什么?

BEA和M.的字母代表什么?我记得看到对首字母缩略词"BEAM"的解释,但我还没有找到它.

它出现在错误代码中:

?  gentoo  iex
Erlang/OTP 17 [erts-6.4.1] [source] [64-bit] [smp:8:8] [async-threads:10] [kernel-poll:false]

Interactive Elixir (1.0.4) - press Ctrl+C to exit (type h() ENTER for help)
iex(1)> import Math

08:05:02.839 [error] Loading of /var/opt/proj/elx/ubuntu/Elixir.Math.beam failed: :badfile

** (CompileError) iex:1: module Math is not loaded and could not be found

08:05:02.846 [error] beam/beam_load.c(1104): Error loading module 'Elixir.Math':
  non-ascii garbage '78705400' instead of chunk type id


    (elixir) src/elixir_exp.erl:123: :elixir_exp.expand/2
iex(1)> 
Run Code Online (Sandbox Code Playgroud)

因此,看起来.beam文件存在某种问题,可能是由于我使用了vi.(注意Elixir程序员:不要编辑.beam文件,这很痛苦.)

这个问题解释了BEAM虚拟机什么,而不是字母代表什么.似乎很难在Erlang中心快速找到关于词源的更多信息.据说 BEAM是Erlang和Elixir的秘诀.

architecture acronym elixir lightweight-processes beam

11
推荐指数
1
解决办法
4254
查看次数

Erlang整数是否有大小限制?

我知道Erlang有任意大小的整数,但其中一个标准实现是否有最大限制?如果是这样,什么?

erlang beam

7
推荐指数
1
解决办法
1940
查看次数

Rabbitmq监听所有接口

看来我的rabbitmq听取了所有接口,尽管:

在/etc/rabbitmq/rabbitmq.config中:

[{rabbit, [{tcp_listeners, [{"10.0.0.1", 5672}]}]},
  {rabbitmq_mochiweb, [{listeners, [{mgmt, [{ip, "10.0.0.1"},
                                            {port, 55672}]}]}]}].
Run Code Online (Sandbox Code Playgroud)

在/etc/rabbitmq/rabbitmq-env.conf中:

export RABBITMQ_NODENAME=rabbit
export RABBITMQ_NODE_IP_ADDRESS=10.0.0.1
export ERL_EPMD_ADDRESS=10.0.0.1
Run Code Online (Sandbox Code Playgroud)

当我运行netstat -uptan | grep beam我得到:

tcp        0      0 10.0.0.1:5672           0.0.0.0:*               LISTEN      1378/beam
tcp        0      0 0.0.0.0:33551           0.0.0.0:*               LISTEN      1378/beam
tcp        0      0 127.0.0.1:38737         127.0.0.1:4369          ESTABLISHED 1378/beam
Run Code Online (Sandbox Code Playgroud)

如何使光束不在0.0.0.0:33551上听?

ubuntu beam rabbitmq

6
推荐指数
1
解决办法
4202
查看次数

在 Intellij 中编译 Erlang

我尝试使用 Erlang 插件在 Intellij 中编译 erl 文件。编译一切都很好,但在输出/生产中,文件夹不会创建任何文件.beam,当我运行控制台时,我收到消息:

exception error: undefined function. 
Run Code Online (Sandbox Code Playgroud)

当我使用c("file").一切正常。为什么 Intellij 不创建.beam文件?

erlang intellij-idea beam erl

6
推荐指数
1
解决办法
1878
查看次数

打包 Elixir CLI 应用程序的最佳方式是什么?

假设我有一个带有子命令和参数(如application foo --bar baz)的 CLI 应用程序。如何在不需要用户安装 Erlang 的情况下打包分发?

我知道有mix escriptMix 任务,但它构建了一个需要安装 Erlang 的二进制文件,而且 Mix 参考指出 escripts 应该仅用于开发目的。 mix release,但是,会产生我不想在 dist 中看到的冗余 shell 脚本。

那么,有没有办法让 Elixir CLI 应用程序独立分发?

PS 这实际上是我第一次使用 Elixir(以及整个 Erlang 生态系统)

erlang command-line-interface elixir beam

6
推荐指数
1
解决办法
222
查看次数