4 ms·
Is there a description of Ninja's algorithm anywhere? I looked at the manual [1] and didn't quite see it. Does Ninja use a database like sqlite? It seems lik
by chubot 8y ago
Is there a description of Ninja's algorithm anywhere? I looked at the manual [1] and didn't quite see it.
Does Ninja use a database like sqlite? It seems like it has to if it does something better than Make's use of mtimes. (e.g. the command line, which Make doesn't consider.)
I looked at redo (linked in the article) and it uses sqlite to store the extra metadata.
[1] https://ninja-build.org/manual.html https://ninja-build.org/manual.html
- evmar 8y agoNo, sorry. And I also mixed what Ninja actually does with some random observations in that comment. Ninja does use some database-like things, but they are just in a simple text/binary format. It's actually been long enough that I have forgotten the details. https://ninja-build.org/manual.html#ref_log https://ninja-build.org/manual.html#ref_log (contains a hash of the commands used) / https://ninja-build.org/manual.html#_deps https://ninja-build.org/manual.html#_deps (database-like thing with some mtimes, see https://github.com/ninja-build/ninja/blob/master/src/deps_log.h#L29 https://github.com/ninja-build/ninja/blob/master/src/deps_lo... )
- apenwarr 8y agoThis reminds me, I should study ninja's binary format and maybe borrow it :) The sqlite3 database used in redo was just something I threw together in the first few minutes. sqlite was always massive overkill for the problem space, but because it never caused any problems, it's been hard to justify working on it. I'd like to port redo from python to C, though, and then the relative size of depending on a whole database will matter a lot more.
- evmar 8y agoSomeone rewrote ninja from scratch in C at one point and it's shockingly tiny. (No tests = no extra abstractions to make testing possible.)
- chubot 8y agoI found samurai and it is indeed tiny! ~3400 lines was less than I was expecting for *.[ch] ! https://github.com/michaelforney/samurai https://github.com/michaelforney/samurai Ninja isn't too big though. It looks like about 13K of non-test code, which is great for a mature and popular project. Punting build logic to a higher layer seems to have been a big win :)