λ΄κ° μ΄ν΄νλ ν ctagsλ λ¨μΌ μ€λ λμ λλ€. λ³λ ¬νλ₯Ό μ§μν κ³νμ΄ μμ΅λκΉ? κ±°λν μ½λλ² μ΄μ€μμ μμ μλλ₯Ό λμΌ μ μμ΅λλ€.
μλ νμΈμ,
λ΄μ₯λ λ³λ ¬ ꡬνμ΄ ν₯λ―Έλ‘μΈ μ μμ§λ§ λ€λ₯Έ λλ ν 리μμ λ€λ₯Έ ctagλ₯Ό μμν λ€μ μμ±λ νμΌμ λ³ν©νμ¬ ν° μ½λλ² μ΄μ€ μ λ°μ΄νΈλ₯Ό λ³λ ¬ννλ κ²μ΄ μ΄λ―Έ κ°λ₯ν©λλ€(λ¨ νλλ₯Ό μ μΈν λͺ¨λ νμΌμμ !λ‘ μμνλ μ€μ μμ νμ¬ μνν μ μμ΅λλ€. μ΄νμ λͺ¨λ νμΌμ λν΄ sort --merge μ¬μ©).
κ·Έλ¬λ νλ κΈ°κ³κ° I/O λ°μΈλ©λ κ²μΌλ‘ μμνκΈ° λλ¬Έμ λ³λ ¬νλ ctagμμ μ΄λ€ μλ ν₯μλ μ»μ μ μλ€κ³ νμ νμ§ μμ΅λλ€. κ·Έλλ νμΈνλ €λ©΄ νλ‘νμΌλ§ν΄μΌ ν©λλ€.
@mawww https://github.com/ggreer/the_silver_searcher κ° λμνμ§ μμ κ²μ΄λΌκ³ νμ ν©λλ€ .wink :
μ¬λ¬ ctagλ₯Ό μ€ννλ κ²μ νμ€ emacs https://github.com/bbatsov/projectile/blob/master/projectile.el#L180 -L183μμ μ‘°μ νκΈ°κ° λ§€μ° μ΄λ €μΈ κ²μ λλ€.
@mawww https://github.com/ggreer/the_silver_searcher κ° λμνμ§ μμ κ²μ΄λΌκ³ νμ ν©λλ€ .wink :
μ’μ μ§μ .
μ¬λ¬ ctagλ₯Ό μ€ννλ κ²μ νμ€ emacs https://github.com/bbatsov/projectile/blob/master/projectile.el#L180 -L183μμ μ‘°μ νκΈ°κ° λ§€μ° μ΄λ €μΈ κ²μ λλ€.
μ μ€ν¬λ¦½νΈ λνΌλ μ΄λ―Έ λ¨Ό κΈΈμ κ° μ μμ§λ§, ctagμ μ§μ ν΅ν©νλ κ²μ΄ λ ν¨μ¨μ μΌ μ μμ΅λλ€.
@fommil μ΄ λ¬Έμ μ λν κ·Έ μ¬λμ
κ·Έλ¦¬κ³ μμ μ ν
μ€νΈμμ λ무 λ§μ μμ
μ μ€λ λκ° λ³λ ¬ μ²λ¦¬λ₯Ό μ ν νμ§ μλ κ²λ³΄λ€ λΉ λ₯΄κ² μ
νλμμμ μμ μ μ»΄ν¨ν°μμ μ΄λ»κ² 보μ¬μ£Όμλμ§ μ£Όλͺ©νμμμ€. κ·μ½κΈ΄ νμ§λ§ μ²λ¦¬ν νλμ¨μ΄, OS λ° λ°μ΄ν°μ ν¬κ² μμ‘΄ν κ°λ₯μ±μ΄ λκΈ° λλ¬Έμ "N μ€λ λλ₯Ό μ¬μ©νλ κ²μ΄ λ΄ ν
μ€νΈμμ λ μ μνλλ κ² κ°μμ΅λλ€"λ³΄λ€ λ ν©λ¦¬μ μΌ κ²μ
λλ€.
λν κ·Έκ²μ΄ μ μκ² κ·Έλ€μ§ 맀λ ₯μ μ΄μ§ μμ λ λ€λ₯Έ μ΄μ λ κ·Έκ²μ΄ μ°λ¦¬μκ² λ§μ κ²μ μ€ κ²μ΄λΌκ³ λ―Ώμ§ μμ λΏλ§ μλλΌ λ§μ μμ μ€λ₯κ° λ°μνκΈ° μ¬μ΄ μμ
μ΄ λ κ²μ΄λΌλ κ²μ
λλ€. νμ¬ CTags μ½λ κΈ°λ°μ μ€λ λλ₯Ό ꡬ문 λΆμνλ λ³λ ¬ νκ·Έλ₯Ό μ§μνκΈ° μν ννκ° μ ν μμ΅λλ€. μλμ μΌλ‘ μ½κ² _ν μ μλ_ λͺ¨λ κ²μ μ΄κΈ°ν/λλ ν 리 νμκ³Ό _νλμ λ¨μΌ_ νμ μ€λ λμ
λλ€.
λ§μ§λ§μΌλ‘ μ½λλ² μ΄μ€(νΉν νμ)μ λͺ¨λ κ³³μμ μνν μ μλ λ³΄λ€ ν©λ¦¬μ μΈ μ΅μ νκ° μλ€κ³ νμ ν©λλ€.
νμ€ν λ©ν°μ€λ λ©μ μ μ¬μ©νλ©΄ _ν μ μλ_ _λͺ κ°μ§_ μ΄μ μ΄ μμ§λ§ κ°μ₯ ν₯λ―Έλ‘μ΄ κ°μ μ¬νμ μλ κ²μ λλ€.
λν κ·Έκ²μ΄ μ μκ² κ·Έλ€μ§ 맀λ ₯μ μ΄μ§ μμ λ λ€λ₯Έ μ΄μ λ [β¦] λ§μ μμ μ€λ₯κ° λ°μνκΈ° μ¬μ΄ μμ μ΄ λ κ²μ΄κΈ° λλ¬Έμ λλ€. νμ¬ CTags μ½λ κΈ°λ°μ μ€λ λλ₯Ό ꡬ문 λΆμνλ λ³λ ¬ νκ·Έλ₯Ό μ§μνκΈ° μν ννκ° μ ν μμ΅λλ€. μλμ μΌλ‘ μ½κ² _ν μ μλ_ λͺ¨λ κ²μ μ΄κΈ°ν/λλ ν 리 νμκ³Ό _νλμ λ¨μΌ_ νμ μ€λ λμ λλ€.
BTW, μ½λμμ μ΄ μμμ κ°μ νλ κ²μ΄ μ’μ μκ°μ΄ μλλΌλ μλ―Έλ μλλλ€. μ μκ°μλ κ·Έλ κ² μκ°ν©λλ€(νΉν κ°λ₯ν λ―Έλμ libctagsμ κ²½μ°). μ±λ₯μ΄ λͺ©νλΌλ©΄ μλ§λ (νμ¬) λ Έλ ₯ν κ°μΉκ° μμΌλ©° μ§μ€ν΄μΌ ν λ μ€μν μμμ΄ μμμ μλ―Έν©λλ€.
BTW, νλ‘νμΌλ¬λ₯Ό μμνκ³ μμ²λ μμ λ°μ΄ν°λ₯Ό νλ‘νμΌλ§νλ κ²μ μλ§λ ν₯λ―Έλ‘μΈ κ²μ λλ€.
GNU λ³λ ¬μ΄ λμμ΄ λ μ μμ΅λλ€.
μΈκΈ ν λ°μ κ°μ΄ μ΄μ , μ΅μ ν λ μλ ctagsλ₯Όμκ² κ½€ μλλ₯Ό λμΌ μ μμ΅λλ€.
I/Oκ° μΊμμμ μ€λ κ²½μ° νμμ λ³λ ¬ μ€νμ μμ μλλ₯Ό μλΉν λμΌ μ μμ΅λλ€(κ·Έλ¦¬κ³ μ΄κ²μ μ’ μ’ νΈμ§κΈ°μμ λλ ν 리μμ ctagsλ₯Ό μ€ννλ Nλ²μ§Έ κ²½μ°μ λλ€).
@pragmaware IMO, λΌμ΄λΈλ¬λ¦¬λ ν¬ν¬ν΄μλ μ λ©λλ€.
μΌλ³Έμ΄ ν
μ€νΈλ₯Ό μ½λ κ²½μ° https://qiita.com/dalance/items/c76141a097e25fabefe8 κΈ°μ¬λ₯Ό
(μ΄ λκΈμ μμ±νλ€κ° ptagsμ© git μ μ₯μλ₯Ό μ°Ύμμ΅λλ€(https://github.com/dalance/ptags). νμ΄μ§λ μμ΄λ‘ μμ±λμ΄ μμ΅λλ€.)
μμ±μκ° κ°λ°ν ptagsλΌλ λꡬλ₯Ό λ³΄κ³ ν©λλ€. μ΄ λꡬλ Rustλ‘ μμ±λμμΌλ©° ctagsλ₯Ό λνν©λλ€.
μ
λ ₯ μΈνΈμ λν΄ λ³λ ¬λ‘ ctagλ₯Ό μ€νν©λλ€.
λλ κ·Έκ²μ λ΄λΆλ₯Ό μ½ννμ§ μλλ€. κ·Έλ¬λ λΆλͺ
ν μ¬λ¬ ctag νλ‘μΈμ€λ₯Ό μ€νν©λλ€.
κ²°κ³Όλ μλΉν μΈμμ μ λλ€. λ¨μΌ μ²λ¦¬λ³΄λ€ 5λ°° λΉ λ¦ λλ€. CPU μλ κΈ°λ‘λμ§ μμ΅λλ€. λ©λͺ¨λ¦¬ ν¬κΈ°λ μΆ©λΆν μ μμ΅λλ€(=128GB). μμ±μλ νμ΄μ§ μΊμλ₯Ό λ¨κ²κ² λ§λ€κΈ° μν΄ λμΌν μ λ ₯ μΈνΈμ λν΄ 10λ² ptagsλ₯Ό μ€νν©λλ€.
μ΄λ¬ν μμ
μ ptagsμ κ°μ λνΌμμ μνλμ΄μΌ νμ§λ§ μ΄ νλ₯ν κ²°κ³Όλ₯Ό 무μνκΈ° μ΄λ ΅μ΅λλ€.
λλ 빨리 ν΄νΉνλ€. https://github.com/masatake/ctags/tree/parallel
μλ‘ λμ
λ μ΅μ
--_parallelμ _parallelμμ μ¬λ¬ ctags νλ‘μΈμ€λ₯Ό μ€νν©λλ€.
μμ
μ νλ‘μΈμ€μ μμΈ 8μ νλ μ½λ©λμ΄ μμ΅λλ€. λ΄ λ
ΈνΈ PCμλ 8κ°μ μ½μ΄κ° μμ΅λλ€.
λ©λͺ¨λ¦¬λ 32GBμ
λλ€. λμ μ
λ ₯μ μ΅μ Linux 컀λ μμ€ νΈλ¦¬μ
λλ€.
λ΄ .ctagsλ μΆ©λΆν νΈμ΄ μμ΅λλ€.
κ²°κ³Όλ κ±°μ λμΌν©λλ€. 2~3λ°° λΉ λ¦ λλ€.
[yamato@master]~/var/ctags-github% cat run.sh
cat run.sh
for i in $(seq 1 5); do
echo "#"
echo "# TRAIL #$i"
echo "#"
echo "# parallel 8"
time ./ctags --_parallel -R ~/var/linux > /dev/null
echo "# single"
time ./ctags -o - --sort=no -R ~/var/linux > /dev/null
done
[yamato@master]~/var/ctags-github% bash run.sh
bash run.sh
#
# TRAIL #1
#
# parallel 8
real 0m29.073s
user 3m5.791s
sys 0m32.347s
# single
real 1m21.397s
user 1m14.601s
sys 0m6.521s
#
# TRAIL #2
#
# parallel 8
real 0m29.746s
user 3m4.601s
sys 0m32.175s
# single
real 1m26.660s
user 1m19.176s
sys 0m7.191s
#
# TRAIL #3
#
# parallel 8
real 0m28.290s
user 3m2.524s
sys 0m31.081s
# single
real 1m21.927s
user 1m14.775s
sys 0m6.896s
#
# TRAIL #4
#
# parallel 8
real 0m28.644s
user 3m3.839s
sys 0m31.756s
# single
real 1m13.319s
user 1m7.294s
sys 0m5.843s
#
# TRAIL #5
#
# parallel 8
real 0m29.274s
user 3m9.387s
sys 0m32.363s
# single
real 1m13.621s
user 1m7.487s
sys 0m5.941s
[yamato@master]~/var/ctags-github%
(λ κ°μ νκ·Έ νμΌμ λΉκ΅ν΄λ΄€μ΅λλ€. μ°¨μ΄λ μμ΅λλ€.)
λ§μ‘±κ³Όλ κ±°λ¦¬κ° λ©μ§λ§ μμνκΈ°μ μ’μ κ³³μ λλ€.
λ Έλμλ€μ μ°μΆλ¬Όμ λͺ¨μμΌ νλμ§ λ§μμΌ νλμ§ κΆκΈνλ€.
μλ νμΈμ @masatake μ λ μμ ν κ³νμ΄ μλ μ΄λ¦° ν°μΌμ λͺ¨λ λ«μΌλ €κ³ ν©λλ€. μ΄ ν°μΌ μμ μ κ΄μ¬μ΄ μμΌμλ©΄ ν μ€νΈλ₯Ό μ ν°μΌμ 볡μ¬ν΄ μ£Όμκ² μ΅λκΉ?
λλ μμΌλ‘ μ΄ νλͺ©μ λν΄ μμ ν κ²μ λλ€. μ¬κΈ° ν λ‘ μ κΈ°λ‘μ΄ λμκ² κ°μΉκ° μκΈ° λλ¬Έμ μ΄ νλͺ©μ μ΄μ΄λκ³ μΆμ΅λλ€.
@masatake μ¬μ ν μ ν°μΌμμ μ΄ ν°μΌμ μ°κ²°νκ³ μ 체 κΈ°λ‘μ μ μ§ν μ μμ΅λλ€. μ μμ μ μν΄ "Issues" νμ μ 리νλ €κ³ νκ³ μ΄ ν°μΌκ³Ό κ°μ μ΄μμ ν λ΄μ©μ΄ λ°©ν΄κ° λλ κ²μ μνμ§ μκΈ° λλ¬Έμ μ΄κ²μ μ μκ² μ λ§ λμμ΄ λ κ²μ λλ€.
@fommil , Universal Ctags μ μλλ ₯μΈ λͺ¨λ₯΄κ² μ΅λλ€ . λ²κ·Έ(λλ GitHub μ©μ΄λ‘ "λ¬Έμ ")λ₯Ό μ΄λ©΄ μ΄ λ²κ·Έκ° νλ‘μ νΈμ μμ±μ΄ λ©λλ€. λλ λΉμ μ΄ κ·Έκ²μ ν΄μ νκ³ κ·Έκ²μ λν μ΄λ©μΌμ λ°μ§ μμ μ μλ€κ³ λ―Ώμ΅λλ€.
μ¬κ°μ₯.
@dtikhonov @masatake μ΄ ν°μΌμ https://github.com/issues 보기μ μ μΌν ν°μΌμ λλ€.
ν°μΌμ΄ λ«ν μμ§ μμΌλ©΄ μ΄ λ³΄κΈ°μμ ν°μΌμ μ κ±°ν μ μμ΅λλ€. ꡬλ μ μ·¨μνλλΌλ.
μ¬μ€, ν°μΌμ μμ±ν λ 리ν¬μ§ν 리 μμ μκ° μ΄ μ μ΄ κΆνμ κ°μ§ μ€μ λͺ°λμ΅λλ€. κ·Έλ μ§ μμΌλ©΄ κ·Έλ κ² νμ§ μμμ κ²μ λλ€.
μ΄ μμ μ νλ €λ©΄ μ ν°μΌμ λ§λ€κ³ μ΄ ν°μΌμ μ°Έμ‘°νμμμ€. λͺ¨λ ν λ‘ μ 보쑴λ©λλ€. λλ https://github.com/universal-ctags/ctags/issues/761#issuecomment -373720839μ λ΄μ©μ 볡μ¬νμ¬ μ ν°μΌμ λΆμ¬λ£μΌμΈμ.
μ΄κ²μ λ΄κ° λ§μ΄ 묻λ κ²μ΄ μλλΌκ³ μκ°ν©λλ€.
볡μ¬-λΆμ¬λ£κΈ°λ₯Ό μν μμ GitHub κ³μ μ λ§λ€ μ μμ΅λκΉ?
κ·Έλμ λΉμ μ μ€μ€λ‘ 볡μ¬-λΆμ¬λ£κΈ°λ₯Ό ν μ μμ΅λλ€.
κ·Έλ° λ€μ κ³μ μ μ κ±°ν μ μμ΅λλ€.
λ¬Όλ‘ , μ΄κ²μ΄ μ΄ λ¬Έμ λ₯Ό ν΄κ²°ν μ μλ μ μΌν λ°©λ²μ΄λΌλ©΄ κ·Έλ κ² ν μ μμ΅λλ€.
μλ£! μ΄ ν°μΌμ λ«μ μ μκ² ν΄μ£Όμ μ κ°μ¬ν©λλ€. λ΄ TODO μμ μ ν¬κ² μ 리ν©λλ€.