X-Git-Url: http://nitlanguage.org diff --git a/share/man/nitc.md b/share/man/nitc.md index 9c1d562..91e8d8c 100644 --- a/share/man/nitc.md +++ b/share/man/nitc.md @@ -20,7 +20,7 @@ By default, the generated executables are produced in the current directory. Internally, nitc rely on the presence of a C compiler. Usually gcc (but nitc was successfully tested with clang). A compilation directory is therefore created and (re-)used. -By default, the compilation directory is named `.nit_compile`. +By default, the compilation directory is named `nit_compile` and is removed after the compilation. (see `--compile-dir` for details.) Currently, because Nit is still in heavy development, the compilation directory is not cleaned after the compilation. @@ -115,11 +115,14 @@ See the documentation of these specific modules for details. `--log` : Generate various log files. - Currently unused. + + 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. - Currently unused. + + By default the directory is called `logs` in the working directory. `-h`, `-?`, `--help` @@ -165,7 +168,9 @@ See the documentation of these specific modules for details. `--compile-dir` : Directory used to generate temporary files. - By default, it is named `.nit_compile`. + 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. @@ -181,6 +186,8 @@ See the documentation of these specific modules for details. Only the C files required for the program are generated. The final binary will be generated in the same directory. + Note that, to be useful, the compilation directory is not destroyed when `--no-cc` is used. + `-m` : Additional module to mix-in. @@ -274,6 +281,36 @@ will increase. : Do not compile dead methods (semi-global). Need `--rta`. +## LINK-BOOST OPTIMIZATIONS + +In `--separate` and in `--erasure` modes, some optimization can be gained by hijacking the linker process. + +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. + +`--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. + + 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. + +`--substitute-monomorph` +: Replace monomorphic trampolines with direct call. + + 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 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. + + Note: automatically enable option `--trampoline-call`. ## DANGEROUS OPTIMIZATIONS @@ -323,6 +360,16 @@ Usually you do not need them since they make the generated code slower. `--no-shortcut-equal` : Always call == in a polymorphic way. +`--no-tag-primitive` +: 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. +The drawback is that each boxing costs a memory allocation thus increases the amount of work for the garbage collector. + +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. @@ -332,6 +379,10 @@ Usually you do not need them since they make the generated code slower. `--no-gcc-directive` : Disable advanced gcc directives for optimization. +`--trampoline-call` +: Use an indirection when calling. + + Just add the trampolines of `--substitute-monomorph` without doing any aditionnal optimizations. ## INTERNAL OPTIONS @@ -388,6 +439,11 @@ They are useless for a normal user. `--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. # ENVIRONMENT VARIABLES