Dialyzer (рдбрд┐рдкреЛ рдФрд░ рдмрдиреНрд╕ рдХреЗ рд╕рд╛рде) рдХреЗ рд▓рд┐рдП рдкреАрдПрд▓рдЯреА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рд╕рдорд╛рдирд╛рдВрддрд░ рдкреАрдврд╝реА

рдЬрд┐рд╕рдиреЗ рднреА рдХрднреА рдЕрдкрдиреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдбрд╛рдпрд▓рд╛рдЗрдЬрд╝рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ, рд╡рд╣ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдЙрд╕реЗ рдкрд╣рд▓реЗ рдореБрдЦреНрдп рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд▓реИрдЯ рдлрд╛рдЗрд▓ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдЬреЛ рд╕реНрд╡рдпрдВ рдПрд░реНрдЧрд▓реИрдВрдЧ рдХреЗ рд╡рд┐рддрд░рдг рд╕реЗ рд╣реЛрддреА рд╣реИред

рдЬреЗрдирд░реЗрд╢рди рдХреЗрд╡рд▓ рдПрдХ рдХреЛрд░ рд▓реЛрдб рдХрд░ рд░рд╣рд╛ рд╣реИ рдФрд░ рдПрдХ рд▓рдВрдмреЗ рд╕рдордп рдХреЗ рд▓рд┐рдП, рдЬрд┐рд╕рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдкреАрдврд╝реА рдХреЛ рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рдЪрд▓рд╛рдиреЗ рдХреА рдмрд╣реБрдд рдЗрдЪреНрдЫрд╛ рдереАред

рдЕрджреНрдпрддрди: рдПрдХ рдкреИрдЪ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛ (рдФрд░ рдПрдХ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рднреЗрдЬрд╛ рдЧрдпрд╛ рдерд╛, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ) рдбрд╛рдпрд▓рд░ рдХреЛ рдХрдИ рдкреАрдЯреА рдХреЗ рдорд░реНрдЬ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рдПрдХ рдмрдбрд╝реА рдФрд░ рдореЛрдЯреА рдЬреЛрдбрд╝рдХрд░ред

рддреЛ, рдПрдХ рдмрдбрд╝реА рдкреАрдПрд▓рдЯреА рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рд╕рдореЗрдВ рдЖрдкрдХреЛ рдЬрд░реВрд░рдд рд╣реИ, рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рдбрд╛рдпрд▓рд░ рдХреЛ рдкреИрдЪ рдФрд░ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдкреИрдЪ рдпрд╣рд╛рдВ рд▓рд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: 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/ 


рдФрд░ рдЕрдм рдкреАрдПрд▓рдЯреА рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рдмрд╣реБрдкрд░рдд рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВред

рд╣рдо рдПрдХ рдЕрд▓рдЧ рдбреИрдбреА рдмрдирд╛рддреЗ рд╣реИрдВ (рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣ ~/work/erlang/plt ) рд╣реИ, рдЕрдВрджрд░ рд╣рдо рд╕рд╛рдордЧреНрд░реА (рдЗрдВрдбреЗрдВрдЯ - рдЯреИрдм!) рдХреЗ рд╕рд╛рде otp рдлрд╝реЛрд▓реНрдбрд░ рдФрд░ рдореЗрдХрдлрд╛рдЗрд▓ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рддреЗ рд╣реИрдВред

 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 
рдФрд░ рдкреНрд░рддрд┐ рдРрдкреНрдк рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рдкреАрдврд╝реА рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░реЗрдВ, рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ 8ред

рдлрд╛рдЗрдирд▓ рдореЗрдВ, рд╣рдо otp / plt рдлреЛрд▓реНрдбрд░ рдореЗрдВ рдПрдХ рдПрдХ рдХрд░рдХреЗ otp рдбрд┐рд▓реАрд╡рд░реА рд╕реЗ рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ all.plt рдлрд╛рдЗрд▓ рдСрд▓-рдПрдВрдб-рдСрд▓ рд╕реЗ рдХреЙрдорди plt рдпреБрдХреНрдд рд╣реЛрддреА рд╣реИред

рдпрджрд┐ рдЖрдк рдЕрдЪрд╛рдирдХ рдХреБрдЫ рдмрджрд▓рддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдЗрд░рд▓реИрдЧ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ) - рдмрд╕ рдлрд┐рд░ рд╕реЗ рд░рди рдмрдирд╛рдПрдВ рдФрд░ рдХреЗрд╡рд▓ рдмрджрд▓реЗ рдЧрдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдпрджрд┐ рд╢рдмреНрдж IGNORE рдХреЛ рдкрд╣рд▓реЗ рдорд╛рдорд▓реЗ рд╕реЗ рджреВрд╕рд░реЗ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рд░ рдмрд╛рд░ рдкреВрд░реЗ рдЖрд╡реЗрджрди рдХреЛ рдкреБрди: рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, - рдЗрд╕реЗ рдЗрд╕ plt рдХреЗ рд▓рд┐рдП рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬреЛ рдХреЗрд╡рд▓ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдмреАрдо рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛, рд▓реЗрдХрд┐рди рдпрджрд┐ рдирдИ рдлрд╝рд╛рдЗрд▓реЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИрдВ, рддреЛ рд╡реЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдирд╣реАрдВ рд╣реЛрдВрдЧреЗ, рдЕрд░реНрдерд╛рддреН рдЗрд╕рд▓рд┐рдП, рдореИрдВрдиреЗ рдРрд╕реА рдЙрддреНрдерд╛рди рдпреЛрдЬрдирд╛ рдХреЛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣рд╛рдВ рд╕реЗ рдЖрдкрдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП plt рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рдкреБрдирд░реНрдЬрдирди рдХреЗ рд▓рд┐рдП рдЖрдкрдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рдЦреАрдВрдЪрдирд╛ рдХрд╛рдлреА рд╕рдВрднрд╡ рд╣реИред

Source: https://habr.com/ru/post/In124271/


All Articles