Jacinda can imitate cloc by combining it with other command-line tools on the Unix command-line, viz.

@include'prelude/fn.jac'

fn count(xs) := (+)|0 [:1"xs;

let val bqn := {%/.bqn$/}{`1:i} val hs := {%/.hs$/}{`1:i} val ja := {%/.jac$/}{`1:i} val pl := {%/.pl$/}{`1:i} val sed := {%/.sed$/}{`1:i} val asm := {%/.(S|asm)$/}{`1:i} val rb := {%/.rb$/}{`1:i} val py := {%/.py$/}{`1:i} val c := {%/.c$/}{`1:i} val awk := {%/.awk$/}{`1:i} in sprintf'Haskell:\t%i\t%i\nBQN:\t\t%i\t%i\nJacinda:\t%i\t%i\nC:\t\t%i\t%i\nPython:\t\t%i\t%i\nPerl:\t\t%i\t%i\nSed:\t\t%i\t%i\nAssembly:\t%i\t%i\nRuby:\t\t%i\t%i\nAwk:\t\t%i\t%i' ( count hs . sum hs . count bqn . sum bqn . count ja . sum ja . count c . sum c . count py . sum py . count pl . sum pl . count sed . sum sed . count asm . sum asm . count rb . sum rb . count awk . sum awk ) end

This is invoked like so:

fd -t f -x wc -l | ja run cloc.jac

and gives something like

Haskell: 19 3092 BQN: 0 0 Jacinda: 53 389 C: 0 0 Python: 0 0 Perl: 0 0 Sed: 0 0 Assembly: 0 0 Ruby: 0 0 Awk: 11 133

fd and wc performance are the limiting factors; this is faster than cloc though slower than better code counters.

Conclusion

I think this is one of the cases where Jacinda's expression-oriented style is superior to Awk - one would need a variable for each language that would be ticked up.

That Jacinda's performance is not the limiting factor vindicates the underlying design - folds, lazy ByteStrings, a tree-walking interpreter.