cloc is excellent at its job — counting lines, quickly, in hundreds of languages. The trouble starts when its diff numbers get quoted as churn. We ran both tools over six and a half years of Erlang/OTP on identical commit hashes; this is what each one saw.
cloc answers "how many lines of code are here?" — and does it fast, across hundreds of languages. CodeDelta answers "what changed between these two versions, at the level of statements?" Those sound adjacent. They are not, and teams that quote cloc diff output as churn inherit the gap.
Both tools ran on the same public commit hashes of Erlang/OTP — a two-million-statement platform with a C/C++ virtual machine, machine-generated JIT tables, and deliberately hostile test suites. Reproducible findings:
Counting lines in a tree: use cloc; it's the standard for a reason. Measuring change — churn that gates merges, feeds trend databases, or goes in front of an auditor — needs statement identity, whole-tree coverage with the coverage stated, and a parser that reads each language as written. That is the job churn measurement exists for. The full report publishes every window hash, cloc's per-window output, and the two defects OTP exposed in our own engine along the way — including the withdrawn first scan. Comparisons you can re-run beat comparisons you're asked to believe.