ctags
ctags copied to clipboard
Use optimized kotlin grammar
I have been developing pegof as a hobby project for past few years. Recently it became good enough to optimize Kotlin grammar, making it 3 times faster and about 2.7 times less memory hungry.
With this PR, I'd like to start a discussion on how to best use this improvement in ctags
. I'd like to keep the original, "human readable" version of the grammar in the repo to ensure simple updates and readable git history. On the other hand, I don't think it would be good idea to make ctags
build to depend on pegof
, it is not available on all platforms. So my proposal is to allow only manual optimization and keep both original and optimized grammar in the repository. What do you think?
Here is a simple benchmark using ctags-codebase to prove that it really makes a difference:
echo "# optimized"
git checkout optimized-kotlin-peg &> /dev/null
make ctags > /dev/null
/usr/bin/time -f "time: %E\nmax memory (kb): %M" ./ctags -f optimized.ctags ../ctags-codebase/code/kotlin/libraries/**/*.kt
echo "# master"
git checkout master &> /dev/null
make ctags > /dev/null
/usr/bin/time -f "time: %E\nmax memory (kb): %M" ./ctags -f master.ctags ../ctags-codebase/code/kotlin/libraries/**/*.kt
echo "# output comparison"
diff optimized.ctags master.ctags
wc -l optimized.ctags master.ctags
Output:
# optimized
time: 0:13.84
max memory (kb): 447792
# master
time: 0:44.18
max memory (kb): 1204216
# output comparison
31c31
< !_TAG_PROGRAM_VERSION 6.1.0 /885afcb3e/
---
> !_TAG_PROGRAM_VERSION 6.1.0 /8976ec3d2/
92478 optimized.ctags
92478 master.ctags
184956 total