【问题标题】:Erlang: dialyzer is dead slow for a big projectErlang:透析器对于一个大项目来说非常慢
【发布时间】:2012-08-15 20:21:00
【问题描述】:

Scalaris key-value store 是一个包含约 100 个模块的大型 Erlang 项目。我正在这个项目中实施一个新模块,并且对透析器对项目进行一次完整检查需要多长时间感到震惊。 make dialyzer 在我这里的机器上运行大约需要 200 秒,这对于在实施更改时进行频繁的测试是难以忍受的。

make dialyzer 运行以下命令启动透析器:

/usr/lib/erlang/bin/dialyzer -Dtid_not_builtin -Dwith_export_type_support  \
        -DNO_FILE_SENDFILE -Dhave_cthooks_support -Dhave_callback_support  \
        -Werror_handling -Wrace_conditions -Wunmatched_returns -I include/ \
        -I contrib/yaws/include/ -I contrib/log4erl/include/ \
        --src -c src src/*/ test/unittest_helper.erl test/tester*.erl \
                          test/mockup*.erl test/erl_id_trans.erl \
                          test/measure_util.erl test/scalaris_cth.erl \
        --no_native

我想我应该只能在--src 的参数列表中包含我的模块所需的文件,但该列表可能非常大,归结为包含给定 100 个文件中的 90 个文件。有一种更好的方法来加速透析器,假设在后续运行之间只有一个模块会发生变化?

【问题讨论】:

    标签: erlang dialyzer


    【解决方案1】:

    如果其余模块在更改模块中没有调用,那么您可以将它们添加到您的 PLT 中,并且不会每次都检查它们。但是,如果它们确实有调用,那么如果您更改更改模块中的代码,则无法确保这些调用的结果相同。

    dialyzer --add_to_plt <unchanged modules>
    

    如果你有一台多核机器,你可能还想使用 Erlang R15B02(在我写这篇文章时还没有发布,但可用于在 https://github.com/erlang/otp 的 'maint' 分支上构建),它具有并行透析器版本。

    【讨论】:

      猜你喜欢
      • 2018-11-12
      • 2016-01-27
      • 1970-01-01
      • 1970-01-01
      • 2016-06-04
      • 1970-01-01
      • 1970-01-01
      • 2011-11-27
      • 1970-01-01
      相关资源
      最近更新 更多