<commit_before>Ninja
=====
<NAME> <<EMAIL>>


Introduction
------------

Ninja is yet another build system.  It takes as input the
interdependencies of files (typically source code and output
executables) and orchestrates building them, _quickly_.

Ninja joins a sea of other build systems.  Its distinguishing goal is
to be fast.  It is born from my work on the Chromium browser project,
which has over 30,000 source files and whose other build systems
(including one built from custom non-recursive Makefiles) can take ten
seconds to start building after changing one file.  Ninja is under a
second.


Philosophical overview
~~~~~~~~~~~~~~~~~~~~~~

Build systems get slow when they need to make decisions.  When you are
in a edit-compile cycle you want it to be as fast as possible -- you
want the build system to do the minimum work necessary to figure out
what needs to be built immediately.

Ninja contains the barest functionality necessary to describe
arbitrary dependency graphs.  Its lack of syntax makes it impossible
to express complex decisions.  Instead, Ninja is intended to be used
with a separate program generating its input files.  The generator
program (like the `./configure` found in autotools projects) can
analyze system dependencies and make as many decisions as possible up
front so that incremental builds stay fast.  Going beyond autotools,
even build-time decisions like "which compiler flags should I use?"
or "should I build a debug or release-mode binary?"  belong in the
`.ninja` file generator.

Conceptual overview
~~~~~~~~~~~~~~~~~~~

Ninja evaluates a graph of dependencies between files, and runs
whichever commands are necessary to make your build target up to date.
If you are familiar with Make, Ninja is very similar.
<commit_msg>link to blog post in docs<commit_after>Ninja
=====
<NAME> <<EMAIL>>


Introduction
------------

Ninja is yet another build system.  It takes as input the
interdependencies of files (typically source code and output
executables) and orchestrates building them, _quickly_.

Ninja joins a sea of other build systems.  Its distinguishing goal is
to be fast.  It is born from
http://neugierig.org/software/chromium/notes/2011/02/ninja.html[my
work on the Chromium browser project], which has over 30,000 source
files and whose other build systems (including one built from custom
non-recursive Makefiles) can take ten seconds to start building after
changing one file.  Ninja is under a second.


Philosophical overview
~~~~~~~~~~~~~~~~~~~~~~

Build systems get slow when they need to make decisions.  When you are
in a edit-compile cycle you want it to be as fast as possible -- you
want the build system to do the minimum work necessary to figure out
what needs to be built immediately.

Ninja contains the barest functionality necessary to describe
arbitrary dependency graphs.  Its lack of syntax makes it impossible
to express complex decisions.  Instead, Ninja is intended to be used
with a separate program generating its input files.  The generator
program (like the `./configure` found in autotools projects) can
analyze system dependencies and make as many decisions as possible up
front so that incremental builds stay fast.  Going beyond autotools,
even build-time decisions like "which compiler flags should I use?"
or "should I build a debug or release-mode binary?"  belong in the
`.ninja` file generator.

Conceptual overview
~~~~~~~~~~~~~~~~~~~

Ninja evaluates a graph of dependencies between files, and runs
whichever commands are necessary to make your build target up to date.
If you are familiar with Make, Ninja is very similar.

{'fraction_non_alphanumeric': 0.06659298148659851, 'fraction_numerical': 0.004421110804089527, 'mean_word_length': 4.419161676646707, 'pattern_counts': {'":': 0, '<': 9, '<?xml version=': 0, '>': 9, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '4582817', 'n_tokens_mistral': 922, 'n_tokens_neox': 863, 'n_words': 535}