* Now that more paths are checked for legality, we need to avoid adding "/" to paths much harder.
* Added support for module mode and accelerated mode for the first time. Now all modes work.
* This is not all that is now possible, but a good step ahead.
* We put the callables to a new module and assign the "Plugins" class into it, making this very easy.
* With appropriate configuration on Linux this allows to get at very
precise timing configuration so we can judge even small compile time
improvements correctly. We then don't need many runs to average out
noise from other effects.
* Don't use wall clock but process time for steps that are not doing
IO like module optimization for more accurate values otherwise, it
is however not very accurate still.
* For cache files, const files, and C files, we need to make sure, we don't exceed the 255 char limits per path element literally everything has.
* Also enhanced the check code for legal paths to cover this, so user options are covered from this errors too.
* Moved file hashing to file operations where it makes more sense to allow module names to use hashing to provide a legal filename for themselves.
* In this way, we don't have a difference if a module is loaded from cache or not.
* Should make our life for Nuitka-Watch much easier by avoiding this noise.
* For that we need to use dedicated nodes that track the failure
to find a distribution.
* Since we only replace once, we need to do it in dedicated nodes.
* This is still work in progress, "pkg_resources" is not yet covered and
success should also be tracked.
* For caching found distributions should be compared, but that is
not yet done.
* The early demotion to bytecode is not really needed and prevented
dependency analysis correctness, which we have had issues with ever
since not all modules are automatic.
* Moved import detection code to dedicated module cleaning up the size
of the standalone mechanics, it also is not exclusive to it.
* Adding reasons to modules, different from decision reasons why
something was allowed to be included, these give the technical
reason why something is added. This is needed for anti-bloat to
be able to ignore stdlib being added only for being frozen.
* Now correctly annotating why an extension module was included,
is it technical or not, that solves a TODO.
* Removes a lot of code duplication for reading source and bytecode
of bytecode modules and handling of uncompiled modules as a
category in the module registry.
* The detection logic itself for technical was not robust and had
bugs, that make it unclear how it ever worked as well.
* The 3.11 with newer pip cannot build dependencies of older
astroid due to some breaking of pip, so we are kind of pushed
to update this.
* A few nice findings, but unfortunately arguments-differ no
longer is usable.
* Instead of regenerating the information after the fact, we can just
forward it from where it was already known, during the module finding.
* Also cache decisions about module recursion, or else plugins get
asked multiple times about a module inclusion.
* The bytecode cache now also is invalidated if the module kind of a
used module changes.
* Previously because we didn't know what failed, we were
looking at all imports that could be done, but the current
directory spoiled that easily.
* Make sure enabled plugins make a difference though, and so
does the Python version string.
* Used namedtuple to track module usage attempt information rather than tuples and their unpacking.
* Bumps the cache format, as we now store more information there.
Co-authored-by: Kay Hayen <kay.hayen@gmail.com>