Dialyzer用のpltファイルの並列生成(デポおよびバン付き)

ダイアライザーをアプリケーションに使用したことがある人なら誰でも、アーラン自体の配信からメインアプリケーション用のpltファイルを最初に準備する必要があることを知っています。



生成では、1つのコアのみが長時間ロードされます。これに関連して、生成を並行して実行したいという大きな要望がありました。



更新:ダイヤライザーにパッチが追加され(そしてもちろんプルリクエストが送信され)、数個のpltのマージ機能が1つの大きくて厚いものに追加されました。



そのため、必要なものすべてを含む1つの大きなpltを収集するには、まず透析器にパッチを適用して再構築する必要があります。

パッチはここから入手できます: github.com/datacompboy/otp/commit/bb5f53ed3e7bd28632fcf3d4a797d64c0e00f2c3

私は怠け者なので、すべてを完全に再構築することはしませんでした。システムに既にあるものを再構築しました。

mkdir dialyzer cd dialyzer cp -a /usr/lib/erlang/lib/dialyzer-2.4.3/* . wget https://github.com/datacompboy/otp/commit/bb5f53ed3e7bd28632fcf3d4a797d64c0e00f2c3.patch patch -p3 < bb5f53ed3e7bd28632fcf3d4a797d64c0e00f2c3.patch echo '-define(VSN,"v2.4.3").' >> src/dialyzer.hrl echo "{erl_opts, [debug_info]}." >> rebar.config rebar compile && sudo cp ebin/dialyzer_* /usr/lib/erlang/lib/dialyzer-2.4.3/ebin/
      
      







そして、pltファイルのマルチスレッド作成に移りましょう。



別のパパ(私にとっては~/work/erlang/plt



)を作成し、その中にコンテンツ(インデント-タブ!)を含むotpフォルダーとMakefileファイルを作成します。



 OTP_LIB=/usr/lib/erlang/lib APPS=$(shell perl -e "\$$a='$(patsubst -1%,,$(patsubst $(OTP_LIB)/%/ebin,%,$(wildcard $(OTP_LIB)/*/ebin)))';\$$a=~s!-[0-9.]+!!g;print \$$a;") RELS=$(patsubst %,otp/%.plt,$(APPS)) all: all.plt all.plt: $(RELS) dialyzer --merge_plts --output_plt $@ --plts $^ -include $(RELS:.plt=.deps) IGNOREotp/%.plt: if [ -e $@ ]; then dialyzer --check_plt --plt $@ --output_plt $@ || rm $@; fi if [ ! -e $@ ]; then dialyzer --build_plt --output_plt $@ --apps $(patsubst otp/%.plt,%,$@); fi otp/%.plt: dialyzer --build_plt --output_plt $@ --apps $(patsubst otp/%.plt,%,$@) otp/%.deps: otp/%.plt dialyzer --plt_info --plt $< | (echo -n "$e:"; perl -ne 'print " $$1" if /^[[ ]"([^"]+)"/') > $@
      
      







次に実行する

 make -j 8
      
      



アプリごとに1つのプロセスが生成され、8つが並行して生成されることを確認します。



最後に、otp配信からotp / pltフォルダーにアプリケーションを1つずつ、そしてall-and-allからの共通pltを含むall.pltファイルを取得します。



突然何かを変更した場合(たとえば、システムのerlangを更新する)-makeを再度実行するだけで、変更されたアプリケーションのみが再構築されます。



IGNOREという単語が最初のケースから2番目のケースに転送される場合、毎回アプリケーション全体を再生成するのではなく、このpltに対して--checkが呼び出され、変更されたビームファイルのみを更新できますが、アプリケーションに新しいファイルが表示される場合、それらは自動的に処理されません、つまりしたがって、このような再生成スキームはオフにしました。

ただし、ここから、アプリケーションのpltファイルを再生成するための便利な機能をプロジェクトに取り込むことができます。



All Articles