【问题标题】:Why do erlang builds include .c and .erl source?为什么 erlang 构建包含 .c 和 .erl 源?
【发布时间】:2012-01-07 09:08:12
【问题描述】:

我什至还不是 erlang 的新手,我只是在使用 RabbitMQ,它是用 Erlang 编写的。在我运行 configure/make/make install 之后,构建输出目录 有大量的 .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


    【解决方案1】:

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

    背后的原因是什么?

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

    1. 组装

    2. C

    3. C++ 或其他语言

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

    Assembly 显然是一个糟糕的选择:您必须针对任何新的 CPU 目标几乎完全重写它,而且维护起来会困难得多。

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

    C++ 使可移植性复杂化(一些操作系统有可用的 C 编译器,但没有 C++ 编译器;C++ 编译器的质量参差不齐);其他语言更是如此(以及性能,可能需要它们自己的运行时等)。

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

    【讨论】:

    • 我的意思是在我运行configure/make/make install后,输出目录包含c和erl文件。
    • @AdamRabung 默认情况下,Erlang 会同时安装二进制文件(ebinpriv 目录中的 *.beam 和 *.so 文件)和源代码(srcc_src 目录)运行make install时为每个库应用程序。
    • @Adam Lindberg - 这绝对是我所看到的 - 你知道原因吗?
    • @AdamRabung 我猜这是因为他们更喜欢“更完整”的安装而不是最小的安装(如果需要,您可以使用 Erlang 捆绑的发布工具创建一个最小的安装)。
    猜你喜欢
    • 2010-12-31
    • 2020-12-27
    • 1970-01-01
    • 1970-01-01
    • 2017-09-07
    • 1970-01-01
    • 2013-04-01
    • 2011-05-29
    • 1970-01-01
    相关资源
    最近更新 更多