为什么erlang构建包含.c和.erl源代码?

为什么erlang构建包含.c和.erl源代码?,erlang,Erlang,我甚至还不是erlang的新手,我只是在使用RabbitMQ,它是用erlang编写的。运行configure/make/makeinstall后,构建输出目录中有大量.c和.erl文件。这有必要吗?背后的原因是什么? 一些例子: ./lib/erlang/lib/erl_interface-3.7.6/src/misc/show_msg.c ./lib/erlang/lib/cosNotification-1.1.18/src/oe_cosNotification.erl 是的,这是必要的。

我甚至还不是erlang的新手,我只是在使用RabbitMQ,它是用erlang编写的。运行configure/make/makeinstall后,构建输出目录中有大量.c和.erl文件。这有必要吗?背后的原因是什么? 一些例子:

  • ./lib/erlang/lib/erl_interface-3.7.6/src/misc/show_msg.c
  • ./lib/erlang/lib/cosNotification-1.1.18/src/oe_cosNotification.erl

  • 是的,这是必要的。Erlang的运行时系统是用C编写的,大多数标准库是用Erlang编写的

    背后的原因是什么

    另一种选择是什么?为了执行任何Erlang代码,需要已经启动运行时系统,因此不能用Erlang编写。它可以写成:

  • 装配

  • C

  • C++或其他一些语言

  • Erlang可以在没有运行时的情况下执行

  • 汇编显然是一个错误的选择:对于任何新的CPU目标,您都必须几乎完全重写它,而且维护起来要困难得多

    C提供了优异的性能和可移植性,无论如何都需要从Erlang调用C代码。这不仅是Erlang做出的选择,也是Python、Ruby、Perl等做出的选择

    C++使可移植性复杂化(有些OSES有C编译器可用,但C++编译器没有;C++编译器的质量变化更多);其他语言更是如此(还有性能,可能需要自己的运行时等等)


    最后一个选项将使Erlang成为一种完全不同的语言。

    我的意思是,在运行configure/make/make install之后,输出目录包含c和erl文件。@AdamRabung默认情况下,Erlang同时安装二进制文件(*.beam和*.so文件(位于
    ebin
    priv
    目录)和源代码(当您运行
    makeinstall
    @Adam Lindberg时,每个库应用程序的
    src
    c\u src
    目录)这肯定是我看到的-您知道原因吗?@AdamRabung我想这是因为他们更喜欢“完整”的安装而不是最小的安装(如果需要,您可以使用与Erlang捆绑的发布工具创建一个最小版本)。