I have evaluated the performance of the .ctags based Forth parser with https://github.com/universal-ctags/codebase.
``` [yamato@dev64]~/var/codebase% ./codebase ctags --ctags ~/bin/ctags Forth version: db9fe7e0 features: +wildcards +regex +iconv +debug +option-directory +xpath +json +interactive +sandbox +yaml +packcc +optscript +pcre2 log: results/db9fe7e0,Forth...............,..........,time......,default...,2023-09-13-00:41:19.log tagsoutput: /dev/null cmdline: + /home/yamato/bin/ctags --quiet --options=NONE --sort=no --options=profile.d/maps --totals=yes --languages=Forth -o - -R code/4th code/duskos code/gforth code/ueforth code/uf ctags: Warning: cannot open input file "code/gforth/arch/arm/android/libs/x86" : No such file or directory ctags: Warning: cannot open input file "code/gforth/arch/arm/android/libs/arm64-v8a" : No such file or directory ctags: Warning: cannot open input file "code/gforth/arch/arm/android/libs/x86_64" : No such file or directory 1621 files, 211549 lines (6278 kB) scanned in 0.5 seconds (13218 kB/s) ```
See the last line 13218 kB/s.
For Go: ``` [yamato@dev64]~/var/codebase% ./codebase ctags --ctags ~/bin/ctags Go version: db9fe7e0 features: +wildcards +regex +iconv +debug +option-directory +xpath +json +interactive +sandbox +yaml +packcc +optscript +pcre2 log: results/db9fe7e0,Go..................,..........,time......,default...,2023-09-13-00:41:40.log tagsoutput: /dev/null cmdline: + /home/yamato/bin/ctags --quiet --options=NONE --sort=no --options=profile.d/maps --totals=yes --languages=Go -o - -R code/buildah code/go code/kubernetes code/podman 28378 files, 8449364 lines (265525 kB) scanned in 11.3 seconds (23434 kB/s) ```
For C: ``` [yamato@dev64]~/var/codebase% ./codebase ctags --ctags ~/bin/ctags C version: db9fe7e0 features: +wildcards +regex +iconv +debug +option-directory +xpath +json +interactive +sandbox +yaml +packcc +optscript +pcre2 log: results/db9fe7e0,C...................,..........,time......,default...,2023-09-13-01:27:03.log tagsoutput: /dev/null cmdline: + /home/yamato/bin/ctags --quiet --options=NONE --sort=no --options=profile.d/maps --totals=yes --languages=C -o - -R code/gforth code/linux code/mysql-server code/perl5 code/php-src code/postgresql code/qemu code/r-source code/ruby code/ueforth ctags: Warning: cannot open input file "code/gforth/arch/arm/android/libs/x86" : No such file or directory ctags: Warning: cannot open input file "code/gforth/arch/arm/android/libs/arm64-v8a" : No such file or directory ctags: Warning: cannot open input file "code/gforth/arch/arm/android/libs/x86_64" : No such file or directory ctags: Warning: cannot open input file "code/qemu/roms/edk2/EmulatorPkg/Unix/Host/X11IncludeHack" : No such file or directory ctags: Warning: cannot open input file "code/qemu/roms/skiboot/ccan/heap/LICENSE" : No such file or directory 47673 files, 28992400 lines (827018 kB) scanned in 57.2 seconds (14469 kB/s) ```
The Forth parser is a bit slower than the C parser. But I think this is acceptable. NOTE: The ctags executable used in the performance test is built with --enable-debugging.