Merge: Added contributing guidelines and link from readme
[nit.git] / share / man / nitc.md
index 3aa7950..a316782 100644 (file)
@@ -1,5 +1,3 @@
-% NITC(1)
-
 # NAME
 
 nitc - compiles Nit programs.
@@ -46,206 +44,214 @@ See the documentation of these specific modules for details.
 
 ## MESSAGES
 
-`-W`, `--warn`
-:   Show additional warnings (advices).
+### `-W`, `--warn`
+Show additional warnings (advices).
 
-    By default, only important warnings are displayed.
-    May be overridden by `-w`.
+By default, only important warnings are displayed.
+May be overridden by `-w`.
 
-    Important warnings are displayed by default. A warning is considered important when:
+Important warnings are displayed by default. A warning is considered important when:
 
-     * There is a simple correction.
-     * There is no reason to let the code this way.
-     * There is always a real issue (no false positive).
+* There is a simple correction.
+* There is no reason to let the code this way.
+* There is always a real issue (no false positive).
 
-    Other warnings, called advices, are not displayed by default to avoid filling the terminal with
-    unwanted information.
-    A warning is considered an advice when:
+Other warnings, called advices, are not displayed by default to avoid filling the terminal with
+unwanted information.
+A warning is considered an advice when:
 
-     * The correction could be complex. e.g. require a refactorisation or an API change.
-     * The correction cannot be done. e.g. Code that use a deprecated API for some compatibility reason.
-     * There is not a real issue (false positive). Note that this should be unlikely.
-     * Transitional: While a real important warning, it fires a lot in current code, so a transition is needed
-       in order to let people fix them before promoting the advice to an important warning.
+* The correction could be complex. e.g. require a refactorisation or an API change.
+* The correction cannot be done. e.g. Code that use a deprecated API for some compatibility reason.
+* There is not a real issue (false positive). Note that this should be unlikely.
+* Transitional: While a real important warning, it fires a lot in current code, so a transition is needed
+in order to let people fix them before promoting the advice to an important warning.
 
-`-w`, `--warning`
-:   Show/hide a specific warning.
+### `-w`, `--warning`
+Show/hide a specific warning.
 
-    Each type of warning can be individually displayed or hidden.
-    The `-w` option takes the name of a warning (displayed at the end of the warning message, between parentheses) to activate it;
-    and "no-{name}" to disable it.
-    It has precedence over -q and -W.
-    Multiple `-w` can be given.
+Each type of warning can be individually displayed or hidden.
+The `-w` option takes the name of a warning (displayed at the end of the warning message, between parentheses) to activate it;
+and "no-{name}" to disable it.
+It has precedence over -q and -W.
+Multiple `-w` can be given.
 
-    To show only `missing-doc` warnings in standard"
+To show only `missing-doc` warnings in standard"
 
-        $ nitc -q -w missing-doc standard
+    $ nitc -q -w missing-doc standard
 
-    To show all warnings and advices, except `missing-doc`:
+To show all warnings and advices, except `missing-doc`:
 
-        $ nitc -W -w no-missing-doc standard
+    $ nitc -W -w no-missing-doc standard
 
-    To show important warnings except `useless-type-test`, but not advice except `missing-doc`:
+To show important warnings except `useless-type-test`, but not advice except `missing-doc`:
 
-        $ nitc -w missing-doc -w no-useless-type-test standard
+    $ nitc -w missing-doc -w no-useless-type-test standard
 
-`-q`, `--quiet`
-:   Do not show warnings.
-    May be overridden by `-w`
+### `-q`, `--quiet`
+Do not show warnings.
+May be overridden by `-w`
 
-`--stop-on-first-error`
-:   Just display the first encountered error then stop.
+### `--stop-on-first-error`
+Just display the first encountered error then stop.
 
-    By default, nitc tries to detect and display more than one error before aborting the compilation.
+By default, nitc tries to detect and display more than one error before aborting the compilation.
 
-`--no-color`
-:   Do not use color to display errors and warnings.
+### `--no-color`
+Do not use color to display errors and warnings.
 
-    Also, do not echo the line.
-    This options is mainly used by scripts and tools that need parsable error messages.
+Also, do not echo the line.
+This options is mainly used by scripts and tools that need parsable error messages.
 
-`-v`, `--verbose`
-:   Additional messages from the tool.
-    Multiple `-v` can be given to improve the verbosity.
+### `-v`, `--verbose`
+Additional messages from the tool.
+Multiple `-v` can be given to improve the verbosity.
 
-    With one `-v`, there is constant number of lines.
-    With two `-v`, the number of lines is proportional to the number of modules.
-    With three `-v`, the number of lines is proportional to the number of definition of classes.
-    With four `-v`, the number of lines is proportional to the number of definition of properties.
+With one `-v`, there is constant number of lines.
+With two `-v`, the number of lines is proportional to the number of modules.
+With three `-v`, the number of lines is proportional to the number of definition of classes.
+With four `-v`, the number of lines is proportional to the number of definition of properties.
 
-`--log`
-:   Generate various log files.
+### `--log`
+Generate various log files.
 
-    The tool will generate some files in the logging directory (see `--log-dir`).
-    These files are intended to the advanced user and the developers of the tools.
+The tool will generate some files in the logging directory (see `--log-dir`).
+These files are intended to the advanced user and the developers of the tools.
 
-`--log-dir`
-:   Directory where to generate log files.
+### `--log-dir`
+Directory where to generate log files.
 
-    By default the directory is called `logs` in the working directory.
+By default the directory is called `logs` in the working directory.
 
 
-`-h`, `-?`, `--help`
-:   Show Help (the list of options).
+### `-h`, `-?`, `--help`
+Show Help (the list of options).
 
-`--version`
-:   Show version and exit.
+### `--version`
+Show version and exit.
 
 
 ## PATHS
 
-`-I`, `--path`
-:   Add an additional include path.
+### `-I`, `--path`
+Add an additional include path.
 
-    This option is used to indicate an additional path of a directory containing Nit libraries.
+This option is used to indicate an additional path of a directory containing Nit libraries.
 
-    The path added with `-I` are searched before those added by the environment variable `NIT_PATH`.
+The path added with `-I` are searched before those added by the environment variable `NIT_PATH`.
 
-    May be used more than once.
+May be used more than once.
 
-`-o`, `--output`
-:   Output executable name.
+### `-o`, `--output`
+Filename of the generated executable.
 
-    Indicates the path and name of the produced executable.
+Indicates the path and name of the produced executable.
 
-    Note: it is better to use `--dir` if only the directory is important.
-    This way, the platform extension will be correctly set.
+Note: it is better to use `--dir` if only the directory is important.
+This way, the platform extension will be correctly set.
 
-    `-o` is not usable if multiple programs are compiled at once.
+`-o` is not usable if multiple programs are compiled at once.
 
-`--dir`
-:   Output directory.
+### `--dir`
+Output directory.
 
-    Produce the executables in the given directory instead of the current directory.
+Produce the executables in the given directory instead of the current directory.
 
-`--nit-dir`
-:   Base directory of the Nit installation.
+### `--nit-dir`
+Base directory of the Nit installation.
 
-    Has precedence over the environment variable `NIT_DIR`.
+Has precedence over the environment variable `NIT_DIR`.
 
 ## COMPILATION
 
-`--compile-dir`
-:   Directory used to generate temporary files.
+### `--compile-dir`
+Directory used to generate temporary files.
+
+By default, it is named `nit_compile` and created in the current directory and destroyed after the compilation.
+
+If the option `--compile_dir` or `--no-cc` is used, then the directory is not destroyed and let as is.
+
+### `--no-cc`
+Do not invoke the C compiler.
 
-    By default, it is named `nit_compile` and created in the current directory and destroyed after the compilation.
+Files in the compilation directory are generated but the C compiler is not invoked.
 
-    If the option `--compile_dir` or `--no-cc` is used, then the directory is not destroyed and let as is.
+This option is mainly used to produce C files distributable then compilable on system that do not have a Nit compiler (e.g. embedded system).
+In this case, it is suggested to also use the options `--dir`, `--compile-dir` and `--semi-global`.
 
-`--no-cc`
-:   Do not invoke the C compiler.
+    $ nitc examples/hello_world.nit --no-cc --dir hello --compile-dir hello --semi-global
 
-    Files in the compilation directory are generated but the C compiler is not invoked.
+Will produce a `hello` directory that contains the required C files to finish the compilation.
+Only the C files required for the program are generated.
+The final binary will be generated in the same directory.
 
-    This option is mainly used to produce C files distributable then compilable on system that do not have a Nit compiler (e.g. embedded system).
-    In this case, it is suggested to also use the options `--dir`, `--compile-dir` and `--semi-global`.
+Note that, to be useful, the compilation directory is not destroyed when `--no-cc` is used.
 
-        $ nitc examples/hello_world.nit --no-cc --dir hello --compile-dir hello --semi-global
+### `-m`, `--mixin`
+Additional module to mix-in.
 
-    Will produce a `hello` directory that contains the required C files to finish the compilation.
-    Only the C files required for the program are generated.
-    The final binary will be generated in the same directory.
+Additional modules are imported and refine the main module of the program.
+This has basically the same effect than implementing a specific module that imports the main module of the program then each one of the mix-in modules.
+May be used more than once.
 
-    Note that, to be useful, the compilation directory is not destroyed when `--no-cc` is used.
+This is option is used to weave additional behaviors to existing programs.
+Modules designated to bring features to programs by refining basic or specialized services, without any intervention of the main program, are good candidates to be used with the `-m` option.
+E.g. `hash_debug`.
 
-`-m`
-:   Additional module to mix-in.
+An other usage of the `-m` option is to compile program to a specific platform. E.g. `emscripten`  or `android`.
 
-    Additional modules are imported and refine the main module of the program.
-    This has basically the same effect than implementing a specific module that imports the main module of the program then each one of the mix-in modules.
-    May be used more than once.
+A last usage is to develop programs as product lines with a main basic module (vanilla) and specific distinct features as flavor modules, then to combine them at compile-time.
 
-    This is option is used to weave additional behaviors to existing programs.
-    Modules designated to bring features to programs by refining basic or specialized services, without any intervention of the main program, are good candidates to be used with the `-m` option.
-    E.g. `hash_debug`.
+    $ nitc prog_vanilla.nit -m feature_chocolate.nit -m feature_cherry.nit
 
-    An other usage of the `-m` option is to compile program to a specific platform. E.g. `emscripten`  or `android`.
+### `-D`, `--define`
+Define a specific property.
 
-    A last usage is to develop programs as product lines with a main basic module (vanilla) and specific distinct features as flavor modules, then to combine them at compile-time.
+The `-D` option allows to refine a top-level method at compile-time.
+This has basically the same effect than implementing a specific module that imports the main module of the program and refines the designated methods.
 
-        $ nitc prog_vanilla.nit -m feature_chocolate.nit -m feature_cherry.nit
+The designated method must be top-level function with no parameters that returns a Bool, an Int or a String.
 
-`-D`, `--define`
-:   Define a specific property.
+The argument of the `-D` option is "{name}={value}".
+For Bool, the argument can also be just "{name}", in this case, the value is considered to be `true`.
 
-    The `-D` option allows to refine a top-level method at compile-time.
-    This has basically the same effect than implementing a specific module that imports the main module of the program and refines the designated methods.
+    $ nitc foo.nit -D prefix=/opt/foo -D port=8080 -D with_ssl
 
-    The designated method must be top-level function with no parameters that returns a Bool, an Int or a String.
+### `--release`
+Compile in release mode and finalize application.
 
-    The argument of the `-D` option is "{name}={value}".
-    For Bool, the argument can also be just "{name}", in this case, the value is considered to be `true`.
+Currently, this only affect the android platform.
 
-        $ nitc foo.nit -D prefix=/opt/foo -D port=8080 -D with_ssl
+### `-g`, `--debug`
+Compile in debug mode.
 
-`--release`
-:   Compile in release mode and finalize application.
+Currently removes gcc optimizations.
+Also preserves the source-files directory for C-debuggers.
 
-    Currently, this only affect the android platform.
+For more debugging-related options, see also `--hardening` and `NIT_GC_OPTION`
 
 ## COMPILATION MODES
 
-`nitc` includes distinct compilation modes.
+### `nitc` includes distinct compilation modes.
 
-`--separate`
-:   Use separate compilation (default mode).
+### `--separate`
+Use separate compilation (default mode).
 
-    In separate compilation, modules are compiled independently of their programs.
-    This makes the recompilation of programs faster since only the modified files need to be recompiled.
+In separate compilation, modules are compiled independently of their programs.
+This makes the recompilation of programs faster since only the modified files need to be recompiled.
 
-`--global`
-:   Use global compilation.
+### `--global`
+Use global compilation.
 
-    The produced executables may become huge and the compilation time is prohibitive.
-    But sometime, they are faster.
+The produced executables may become huge and the compilation time is prohibitive.
+But sometime, they are faster.
 
-    In practice, `--semi-global` produces nearly as fast but smaller executables.
+In practice, `--semi-global` produces nearly as fast but smaller executables.
 
-`--erasure`
-:   Erase generic types.
+### `--erasure`
+Erase generic types.
 
-    Like `--separate` but use an erasure dynamic typing policy for generics and virtual types.
-    Usually you do not need this, even if you understand the previous sentence.
+Like `--separate` but use an erasure dynamic typing policy for generics and virtual types.
+Usually you do not need this, even if you understand the previous sentence.
 
 
 ## SEMI-GLOBAL OPTIMIZATIONS
@@ -256,30 +262,37 @@ the independence on programs.
 Therefore, with these options, the produced executables may be faster and smaller but the recompilation time
 will increase.
 
-`--semi-global`
-:   Enable all semi-global optimizations.
+### `--semi-global`
+Enable all semi-global optimizations.
 
-`--rta`
-:   Activate RTA (Rapid Type Analysis).
+### `--rta`
+Activate RTA (Rapid Type Analysis).
 
-    This option only make sense in `--erasure` to enable some semi-global optimizations.
+This option only make sense in `--erasure` to enable some semi-global optimizations.
 
-    RTA is implicitly enabled in `--separate` and `--global`.
+RTA is implicitly enabled in `--separate` and `--global`.
 
-`--inline-coloring-numbers`
-:   Inline colors and ids (semi-global).
+### `--inline-coloring-numbers`
+Inline colors and ids (semi-global).
 
-`--inline-some-methods`
-:   Allow the separate compiler to inline some methods (semi-global).
-    Need `--rta`.
+### `--inline-some-methods`
+Allow the separate compiler to inline some methods (semi-global).
+Need `--rta`.
 
-`--direct-call-monomorph`
-:   Allow the separate compiler to direct call monomorphic sites (semi-global).
-    Need `--rta`.
+### `--direct-call-monomorph`
+Allow the separate compiler to direct call monomorphic sites (semi-global).
+Need `--rta`.
 
-`--skip-dead-methods`
-:   Do not compile dead methods (semi-global).
-    Need `--rta`.
+### `--direct-call-monomorph0`
+Allow the separate compiler to direct call monomorphic sites (semi-global).
+Need `--rta`.
+
+The difference with the non-zero option is internal:
+with this option, the monomorphism is looked-at on the mmethod level and not at the callsite level.
+
+### `--skip-dead-methods`
+Do not compile dead methods (semi-global).
+Need `--rta`.
 
 ## LINK-BOOST OPTIMIZATIONS
 
@@ -288,29 +301,42 @@ In `--separate` and in `--erasure` modes, some optimization can be gained by hij
 Warning: these optimisations are not portable since they use extra features of the GNU linker `ld`.
 However, there is very few reasons to not use them if GNU `ld` is available.
 
-`--link-boost`
-:   Enable all link-boost optimizations.
+### `--link-boost`
+Enable all link-boost optimizations.
+
+### `--colors-are-symbols`
+Store colors as symbols instead of static data.
+
+By default, the various identifiers used to implement OO-mechanisms are stored as genuine constant static variables.
 
-`--colors-are-symbols`
-:   Store colors as symbols instead of static data.
+This option uses linker symbols to encode these identifiers.
+This makes the compiled program faster since less indirections are required to get the values.
+It also produces executables that are a little bit smaller since static memory does not have to store the colors.
 
-    By default, the various identifiers used to implement OO-mechanisms are stored as genuine constant static variables.
+### `--substitute-monomorph`
+Replace monomorphic trampolines with direct calls.
 
-    This option uses linker symbols to encode these identifiers.
-    This makes the compiled program faster since less indirections are required to get the values.
-    It also produces executables that are a little bit smaller since static memory does not have to store the colors.
+Late-binding is implemented with *trampolines*, that are small functions that just select and jump the to right implementations.
+If, at link-time, is it known that the target will always by the same implementation then all calls to the trampoline are replaced by
+direct calls to this single implementation.
 
-`--substitute-monomorph`
-:   Replace monomorphic trampolines with direct call.
+Note that using trampolines as indirection slows down the executable.
+However, it is expected that the gain of monomorphic direct-calls overcompensates the additional indirections in polymorphic trampoline-calls.
 
-    Late-binding is implemented with *trampolines*, that are small functions that just select and jump the to right implementations.
-    If, at link-time, is it known that the target will always by the same implementation then all calls to the trampoline are replaced by
-    direct calls to this single implementation.
+Note: automatically enable option `--trampoline-call`.
 
-    Note that using trampolines as indirection slows down the executable.
-    However, it is expected that the gain of monomorphic direct-calls overcompensates the additional indirections in polymorphic trampoline-calls.
+## POTENTIAL OPTIMIZATIONS
+
+These optimisation are not enabled by default as they are counter-effective in most cases.
+
+### `--guard-call`
+Guard VFT calls with a direct call.
+
+### `--type-poset`
+Build a poset of types to create more condensed tables.
+
+The drawback is that more time and memory are used by the compilation process.
 
-    Note: automatically enable option `--trampoline-call`.
 
 ## DANGEROUS OPTIMIZATIONS
 
@@ -321,26 +347,26 @@ It also means that incorrect (buggy) programs may have unspecified behaviors
 
 In fact, these options are mainly used to bench the compilation results.
 
-`--no-check-all`
-:   Disable all tests (dangerous).
+### `--no-check-all`
+Disable all tests (dangerous).
 
-`--no-check-covariance`
-:   Disable type tests of covariant parameters (dangerous).
+### `--no-check-covariance`
+Disable type tests of covariant parameters (dangerous).
 
-`--no-check-attr-isset`
-:   Disable isset tests before each attribute access (dangerous).
+### `--no-check-attr-isset`
+Disable isset tests before each attribute access (dangerous).
 
-`--no-check-assert`
-:   Disable the evaluation of explicit `assert` and `as` (dangerous).
+### `--no-check-assert`
+Disable the evaluation of explicit `assert` and `as` (dangerous).
 
-`--no-check-autocast`
-:   Disable implicit casts on unsafe expression usage (dangerous).
+### `--no-check-autocast`
+Disable implicit casts on unsafe expression usage (dangerous).
 
-`--no-check-null`
-:   Disable tests of null receiver (dangerous).
+### `--no-check-null`
+Disable tests of null receiver (dangerous).
 
-`--no-check-erasure-cast`
-:   Disable implicit casts on unsafe return with erasure-typing policy (dangerous).
+### `--no-check-erasure-cast`
+Disable implicit casts on unsafe return with erasure-typing policy (dangerous).
 
 
 ## UNOPTIMIZATIONS
@@ -348,20 +374,20 @@ In fact, these options are mainly used to bench the compilation results.
 These options are used to debug or to bench the compilation results.
 Usually you do not need them since they make the generated code slower.
 
-`--hardening`
-:   Generate contracts in the C code against bugs in the compiler.
+### `--hardening`
+Generate contracts in the C code against bugs in the compiler.
 
-`--no-shortcut-range`
-:   Always instantiate a range and its iterator on 'for' loops.
+### `--no-shortcut-range`
+Always instantiate a range and its iterator on 'for' loops.
 
-`--no-union-attribute`
-:   Put primitive attributes in a box instead of an union.
+### `--no-union-attribute`
+Put primitive attributes in a box instead of an union.
 
-`--no-shortcut-equal`
-:   Always call == in a polymorphic way.
+### `--no-shortcut-equal`
+Always call == in a polymorphic way.
 
-`--no-tag-primitive`
-:   Use only boxes for primitive types.
+### `--no-tag-primitives`
+Use only boxes for primitive types.
 
 The separate compiler uses tagged values to encode common primitive types like Int, Bool and Char.
 This option disables tags and forces such primitive values to be boxed.
@@ -370,140 +396,148 @@ The drawback is that each boxing costs a memory allocation thus increases the am
 However, in some cases, it is possible that this option improves performance since the absence of tags simplify the implementation
 of OO mechanisms like method calls or equality tests.
 
-`--no-inline-intern`
-:   Do not inline call to intern methods.
+### `--no-inline-intern`
+Do not inline call to intern methods.
 
-`--colo-dead-methods`
-:   Force colorization of dead methods.
+### `--colo-dead-methods`
+Force colorization of dead methods.
 
-`--no-gcc-directive`
-:   Disable advanced gcc directives for optimization.
+### `--no-gcc-directive`
+Disable advanced gcc directives for optimization.
 
-`--trampoline-call`
-:   Use an indirection when calling.
+### `--trampoline-call`
+Use an indirection when calling.
 
-    Just add the trampolines of `--substitute-monomorph` without doing any aditionnal optimizations.
+Just add the trampolines of `--substitute-monomorph` without doing any additionnal optimizations.
 
 ## INTERNAL OPTIONS
 
 These options can be used to control the fine behavior of the tool.
 They are useless for a normal user.
 
-`--disable-phase`
-:   Disable a specific phase; use `list` to get the list.
+### `--disable-phase`
+Disable a specific phase; use `list` to get the list.
 
-`--only-parse`
-:   Only proceed to parse files.
+### `--only-parse`
+Only proceed to parse files.
 
-`--only-metamodel`
-:   Stop after meta-model processing.
+### `--only-metamodel`
+Stop after meta-model processing.
 
-`--ignore-visibility`
-:   Do not check, and produce errors, on visibility issues.
+### `--ignore-visibility`
+Do not check, and produce errors, on visibility issues.
 
-`--no-main`
-:   Do not generate main entry point.
+### `--no-main`
+Do not generate main entry point.
 
-`--no-stacktrace`
-:   The compiled program will not display stack traces on runtime errors.
+### `--no-stacktrace`
+Disable the generation of stack traces.
 
-    Because stack traces rely on libunwind, this option might be useful in order to generate more portable binaries
-    since libunwind might be non available on the runtime system (or available with an ABI incompatible version).
+With this option, the compiled program will not display stack traces on runtime errors.
 
-    The generated C is API-portable and can be reused, distributed and compiled on any supported system.
-    If the option `--no-stacktrace` is not used but the development files of the library `libunwind` are not available, then a warning will be displayed
-    and stack trace will be disabled.
+Because stack traces rely on libunwind, this option might be useful in order to generate more portable binaries
+since libunwind might be non available on the runtime system (or available with an ABI incompatible version).
 
-    Note that the `--no-stacktrace` option (or this absence) can be toggled manually in the generated Makefile (search `NO_STACKTRACE` in the Makefile).
-    Moreover, the environment variable `NIT_NO_STACK` (see bellow) can also be used at runtime to disable stack traces.
+The generated C is API-portable and can be reused, distributed and compiled on any supported system.
+If the option `--no-stacktrace` is not used but the development files of the library `libunwind` are not available, then a warning will be displayed
+and stack trace will be disabled.
 
-`--max-c-lines`
-:   Maximum number of lines in generated C files. Use 0 for unlimited.
+Note that the `--no-stacktrace` option (or this absence) can be toggled manually in the generated Makefile (search `NO_STACKTRACE` in the Makefile).
+Moreover, the environment variable `NIT_NO_STACK` (see bellow) can also be used at runtime to disable stack traces.
 
-`--group-c-files`
-:   Group all generated code in the same series of files.
+### `--max-c-lines`
+Maximum number of lines in generated C files. Use 0 for unlimited.
 
-`--make-flags`
-:   Additional options to the `make` command.
+### `--group-c-files`
+Group all generated code in the same series of files.
 
-          $ nitc foo.nit --make-flags 'CC=clang' --make-flags 'CFLAGS="-O0 -g"'
+### `--make-flags`
+Additional options to the `make` command.
 
-`--typing-test-metrics`
-:   Enable static and dynamic count of all type tests.
+      $ nitc foo.nit --make-flags 'CC=clang' --make-flags 'CFLAGS="-O0 -g"'
 
-`--invocation-metrics`
-:   Enable static and dynamic count of all method invocations.
+### `--typing-test-metrics`
+Enable static and dynamic count of all type tests.
 
-`--isset-checks-metrics`
-:   Enable static and dynamic count of isset checks before attributes access.
+### `--invocation-metrics`
+Enable static and dynamic count of all method invocations.
 
-`--tables-metrics`
-:   Enable static size measuring of tables used for vft, typing and resolution.
+### `--isset-checks-metrics`
+Enable static and dynamic count of isset checks before attributes access.
 
-`--set-dummy-tool`
-:   Set toolname and version to DUMMY. Useful for testing.
+### `--tables-metrics`
+Enable static size measuring of tables used for vft, typing and resolution.
 
-`--bash-completion`
-:   Generate bash_completion file for this program.
+### `--set-dummy-tool`
+Set toolname and version to DUMMY. Useful for testing.
 
-`--stub-man`
-:   Generate a stub manpage in pandoc markdown format.
+### `--bash-completion`
+Generate bash_completion file for this program.
 
-`--keep-going`
-:   Continue after errors, whatever the consequences.
+### `--stub-man`
+Generate a stub manpage in pandoc markdown format.
+
+### `--keep-going`
+Continue after errors, whatever the consequences.
 
 The tool does not stop after some errors but continue until it produces incorrect result, crashes, erases the hard drive, or just continue forever in an infinite loop.
 This option is used to test the robustness of the tools by allowing phases to progress on incorrect data.
 
+### `--sloppy`
+Force lazy semantic analysis of the source-code.
+
+Analysis of methods is thus done only when required.
+This option breaks the behavior of most of the tools since errors in methods are undetected until the method is required in some processing.
+
 # ENVIRONMENT VARIABLES
 
-`NIT_DIR`
-:   Base directory of the Nit installation.
+### `NIT_DIR`
+Base directory of the Nit installation.
 
-    When the `NIT_DIR` environment variable is set then it specifies the path of the Nit install directory.
+When the `NIT_DIR` environment variable is set then it specifies the path of the Nit install directory.
 
-    This directory is used to locate binaries, shared files and the common libraries.
+This directory is used to locate binaries, shared files and the common libraries.
 
-    When unset, the directory is guessed according to some heuristic.
+When unset, the directory is guessed according to some heuristic.
 
-    The `--nit-dir` option also set the base directory of the Nit installation but has precedence.
+The `--nit-dir` option also set the base directory of the Nit installation but has precedence.
 
-`NIT_PATH`
-:   Additional include paths.
+### `NIT_PATH`
+Additional include paths.
 
-    The `NIT_PATH` environment variable contains paths of directories containing Nit libraries.
-    Each path is separated with a column (`:`).
+The `NIT_PATH` environment variable contains paths of directories containing Nit libraries.
+Each path is separated with a column (`:`).
 
-    The `-I` option also add additional paths.
+The `-I` option also add additional paths.
 
-`NIT_GC_OPTION`
-:   Runtime control of the garbage collector.
+### `NIT_GC_OPTION`
+Runtime control of the garbage collector.
 
-    The behavior of the GC of the executables produced by nitc can be tuned with this environment variable.
+The behavior of the GC of the executables produced by nitc can be tuned with this environment variable.
 
-    The environment variable is used when programs are executed, not when they are compiled.
-    Thus, you do not need to recompile programs in order to tweak their GC options.
+The environment variable is used when programs are executed, not when they are compiled.
+Thus, you do not need to recompile programs in order to tweak their GC options.
 
-    Available values are:
+Available values are:
 
-    * boehm: use the Boehm-Demers-Weiser's conservative garbage collector (default).
-    * malloc: disable the GC and just use `malloc` without doing any `free`.
-    * large: disable the GC and just allocate a large memory area to use for all instantiation.
-    * help: show the list of available options.
+* boehm: use the Boehm-Demers-Weiser's conservative garbage collector (default).
+* malloc: disable the GC and just use `malloc` without doing any `free`.
+* large: disable the GC and just allocate a large memory area to use for all instantiation.
+* help: show the list of available options.
 
-`NIT_NO_STACK`
-:   Runtime control of stack traces.
+### `NIT_NO_STACK`
+Runtime control of stack traces.
 
-    By default, stack traces are printed when a runtime errors occurs during the execution of a compiled program.
-    When setting this environment variable to a non empty value, such stack traces are disabled.
+By default, stack traces are printed when a runtime errors occurs during the execution of a compiled program.
+When setting this environment variable to a non empty value, such stack traces are disabled.
 
-    The environment variable is used when programs are executed, not when they are compiled.
-    Thus, you do not need to recompile programs in order to disable generated stack traces.
+The environment variable is used when programs are executed, not when they are compiled.
+Thus, you do not need to recompile programs in order to disable generated stack traces.
 
-    Note that stack traces require that, during the compilation, development files of the library `libunwind` are available.
-    If they are not available, then programs are compiled without any stack trace support.
+Note that stack traces require that, during the compilation, development files of the library `libunwind` are available.
+If they are not available, then programs are compiled without any stack trace support.
 
-    To completely disable stack traces, see the option `--no-stacktrace`.
+To completely disable stack traces, see the option `--no-stacktrace`.
 
 # SEE ALSO