diff options
author | Björn Gustavsson <[email protected]> | 2018-10-03 13:43:51 +0200 |
---|---|---|
committer | GitHub <[email protected]> | 2018-10-03 13:43:51 +0200 |
commit | 5ecd1c97c033bfa26c38425269ca1146a002a2b6 (patch) | |
tree | 5f0221c48dd22efd7c6f0f99717314fb367f275b /lib | |
parent | fd3674286e63b52cf941f0297b4c53cca18a5d28 (diff) | |
parent | 39c04c516bf728f93759ad50eb4ac2cf37727d2c (diff) | |
download | otp-5ecd1c97c033bfa26c38425269ca1146a002a2b6.tar.gz otp-5ecd1c97c033bfa26c38425269ca1146a002a2b6.tar.bz2 otp-5ecd1c97c033bfa26c38425269ca1146a002a2b6.zip |
Merge pull request #1972 from josevalim/jv-nospawn_process
Introduce the no_spawn_compiler_process option
Diffstat (limited to 'lib')
-rw-r--r-- | lib/compiler/doc/src/compile.xml | 11 | ||||
-rw-r--r-- | lib/compiler/src/compile.erl | 7 | ||||
-rw-r--r-- | lib/dialyzer/src/dialyzer_utils.erl | 2 |
3 files changed, 17 insertions, 3 deletions
diff --git a/lib/compiler/doc/src/compile.xml b/lib/compiler/doc/src/compile.xml index 1a71c83521..f64986d55c 100644 --- a/lib/compiler/doc/src/compile.xml +++ b/lib/compiler/doc/src/compile.xml @@ -415,6 +415,17 @@ module.beam: module.erl \ is not documented, and can change between releases.</p> </item> + <tag><c>no_spawn_compiler_process</c></tag> + <item> + <p>By default, all code is compiled in a separate process + which is terminated at the end of compilation. However, + some tools, like Dialyzer or compilers for other BEAM languages, + may already manage their own worker processes and spawning + an extra process may slow the compilation down. + In such scenarios, you can pass this option to stop the + compiler from spawning an additional process.</p> + </item> + <tag><c>no_strict_record_tests</c></tag> <item> <p>This option is not recommended.</p> diff --git a/lib/compiler/src/compile.erl b/lib/compiler/src/compile.erl index d894694c79..7a0531cb2b 100644 --- a/lib/compiler/src/compile.erl +++ b/lib/compiler/src/compile.erl @@ -210,8 +210,11 @@ do_compile(Input, Opts0) -> {error,Reason} end end, - %% Dialyzer has already spawned workers. - case lists:member(dialyzer, Opts) of + %% Some tools, like Dialyzer, has already spawned workers + %% and spawning extra workers actually slow the compilation + %% down instead of speeding it up, so we provide a mechanism + %% to bypass the compiler process. + case lists:member(no_spawn_compiler_process, Opts) of true -> IntFun(); false -> diff --git a/lib/dialyzer/src/dialyzer_utils.erl b/lib/dialyzer/src/dialyzer_utils.erl index abd89034f3..ebe4040c34 100644 --- a/lib/dialyzer/src/dialyzer_utils.erl +++ b/lib/dialyzer/src/dialyzer_utils.erl @@ -643,7 +643,7 @@ sets_filter([Mod|Mods], ExpTypes) -> src_compiler_opts() -> [no_copt, to_core, binary, return_errors, no_inline, strict_record_tests, strict_record_updates, - dialyzer]. + dialyzer, no_spawn_compiler_process]. -spec format_errors([{module(), string()}]) -> [string()]. |