Компилирует ли Rebar3 модули Dialyzer с HiPE?

При работе в автономном режиме Dialyzer компилирует свои модули с HiPE, чтобы ускорить анализ:

dialyzer --src -r .
  Checking whether the PLT /home/foo/.dialyzer_plt is up-to-date... yes
  Compiling some key modules to native code... done in 0m12.27s
  Proceeding with analysis...

Это может иметь большое значение для времени выполнения, когда нужно проанализировать много модулей.

Rebar3 делает это, когда вы запускаете rebar3 dialyzer команда? Документация не говорит так или иначе.

1 ответ

Решение

Как упомянул Догберт в комментарии, по умолчанию в rebar3 используется исходный формат. У нативного есть ожидающий запрос на извлечение ( https://github.com/erlang/rebar3/pull/1493), чтобы переключиться на формат HiPE, когда он доступен, но в контексте rebar3, неродная версия была оценена как более быстрая и до сих пор мы не объединили это.

Я только что обновил там обсуждение PR, чтобы увидеть, нельзя ли его включить, даже если он не включен по умолчанию.

Возвращаясь к этому гораздо позже, в Erlang/OTP 22.0.6 функция компиляции HiPE была удалена из Dialyzer, и, следовательно, Rebar3 не может активировать эту функцию. Из объявления о выпуске:

  OTP-15949    Application(s): dialyzer, hipe

               *** POTENTIAL INCOMPATIBILITY ***

               The HiPE compiler would badly miscompile certain
               try/catch expressions, so it will now refuse to compile
               modules containing try or catch.

               As a consequence of this, dialyzer will no longer
               compile key modules to native code.
Другие вопросы по тегам