2011-03-28 7 views
13

Bir süredir omniCppComplete + ctags kullanıyorum ve kod tamamlandığında daha fazla iyileştirme yapmak istiyorum. Buradaki öneriye göre, [1], gccsense ve clang_complete alternatif olarak görünüyor. Ancak hangisinin daha iyi olduğundan emin değilim. Performansları hakkında bir fikrin var mı?
Teşekkürler!gccsense vs. clang_complete

Güncelleştirme: clang_complete çalıştıktan sonra, bir tamamlama hızı son derece kabul edilemez bulundu. Sonra libclang.dylib kullanarak denedim, bu çok hızlandırır ama hala bir tane geciktiriyor. Sanırım şimdilik ctags'a yapışmalıyım.

cevap

21

Muhtemelen, gccsense değil, clang_complete kullanmalısınız.

Buradaki ana nokta, ikisinin mimarisidir. Her iki çözümün arkasındaki fikir çok benzer: gcc, dahili derleyici (gcc) bilgisine (Özet Sözdizim Ağacı) erişim olmadan normal C++ tamamlanamaz, gcc ise bunun için yeterli arabirim sağlamaz. Bu bilgiye erişmenin uygulama kısmı burada oldukça farklıdır: gccsense bir tür "kesmek" - clang_complete alternatifi kullanarak başka yoldan giderken eklenti için gerekli bilgiyi saklamak için gerekli olan gcc özel bir yapıdır. derleyici: clang, yaratılışın ana hedeflerinden biri olan AST'yi, harici araçlar tarafından kolayca erişilebilir hale getirdi.

Bu nedenle, gccsense kullanımı durumunda, kodunuzu derhal biraz modası geçmiş (gccsense gcc 4.4 kullanıyor) bir tür özel gcc derleyicisi ile derlemeniz ve sürekli olarak geliştiricinin desteğine ihtiyaç duyacaktır. . Aksine, clang_complete clang derleyicisine çok fazla bağlı değil, harici bir araç olarak kullanıyor.

Performansa gelince: clang gcc'den daha hızlı olacak şekilde tasarlandı ve öyle. Clang_complete, Windows'da MacOS/Linux'a göre biraz daha yavaş olabilir, ancak gccsense o zamanlar Windows için bile derlenemez. Windows üzerinde GCCsense oluşturulabilir.

+0

Bu çok makul. Ben bir deneyin clang_complete vereceğim. Tavsiye için teşekkürler! –

+1

Eh sanmıyorum. Gccsense'i denedim ve kodunuz üzerinde çalışmaya başlamadan önce bir şey derlemeden tamamlandı. Kurulumu ve kullanımı kolaydır. CEDET kullanarak, boost :: mutex'in içindeki işlevleri bulamaz, ancak gccsense bunu görebilir. Ancak, olumsuz olan, gccsense'nin "." Ile tamamlanamamasıdır. veya ">", bu yüzden bu sorunu CEDET'e bırakacağım ve CEDET'in işini yapamayacağı zaman, gccsense kullanıyorum (elbette keybinding ile). – Amumu

+0

Cevabınız için teşekkürler! – rdo

İlgili konular