2011-10-12 11 views
7

Kısa bir süre önce KDevelop'i deniyorum. semantic-complete-self-insert veya M-Ret'dan çok daha hızlı (anında) semboller (değişkenler, fonksiyon adları, sınıf, yapı ...) arar. M-Ret'u kullanmak daha hızlıdır, ancak diğer IDE'ler gibi hoş bir biçime sahip değildir, bunun yerine From nil > gibi anlamsızdır. Emaclarda, en az 1 saniye beklemek zorundayım, birçok durumda, CEDET'in dahil edilen tüm ilgili kaynak dosyalara bakmasını beklemek çok uzun sürüyor.Neden Emacs'te CEDET kullanarak kod tamamlanıyor?

auto complete clang kullanıyorum, ancak hızın iyileştirilmesi yok gibi görünüyor. Neden bu :(? Emacs'i ve hepsini seviyorum ve KDevelop'u keşfedene kadar C/C++ için neredeyse bir yıl kullanıyordum ama Emacs'i kullanmak kodun tamamlanmasını önemsiz ve isteğe bağlı olmalı?

cevap

6

Bu en basit cevap Muhtemelen KDevelop'un DUChain ve ayrıştırıcıları C++ ile benzer şekilde oluşturulmuş jeton yönetiminde yazılırlar. CEDET parserlerinin tümü Emacs Lisp'de, veritabanları ve aramaları da Emacs Lisp'de bulunur.Ayrıca bazı tablolar ve aramalar arasında önbelleğe alınır. Emacs'de tamamlama motoru, kod değiştirilirken sık sık yeniden oluşturulurlar (yazmadan dolayı) CEDET tamamlama motoru, tüm tablolar oluşturulduktan sonra oldukça hızlı olabilir.

Bir şeyler yapmak için kod tamamlama üzerinde birçok profil çalıştırması çalıştırdım daha hızlı ve duchain hakkında biraz bilgi aldıktan sonra KDevelop'in tüm proje için bir ana simge tablosuna sahip olduğu anlaşılıyor. Tüm dosyalar bir projede olmadığından CEDET bunu yapamaz, bu yüzden her dosyanın oluşturulacak bir ek tabloya ihtiyacı vardır. Bunu bir süredir biliyordum, ama CEDET için sembol veritabanlarını dışsallaştırmak için hiçbir zaman bu tür tabloların ayrı bir iş parçacığı (süreç) içinde oluşturulabilmesi ve sürdürülebilmesi için hiçbir zaman bulamadım.

İlgili konular