Компилирует ли 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.