Belirli bir uygulama tarafından hangi algoritmaların kullanıldığını tam olarak söyleyemem, ancak bazı eğitimli tahminler yapabilirim. Bir trie , bu problem için çok kullanışlı bir veri yapısıdır: IDE, her düğümde bir miktar ekstra meta veri ile projenizdeki tüm sembollerin belleğinde büyük bir trie tutabilir.
Bir karakter yazdığınızda, üçlüde bir yolda ilerler. Belirli bir üçlü düğümün soyundan gelenlerin tümü olası tamamlamalardır. Daha sonra IDE'nin mevcut bağlamda anlamlı olanlara göre filtrelemesi gerekir, ancak yalnızca sekme tamamlama açılır penceresinde görüntülenebilecek kadar çok hesaplaması gerekir.
Daha gelişmiş sekme tamamlama, daha karmaşık bir süreç gerektirir. Örneğin, Visual Assist X , yalnızca CamelCase sembollerinin büyük harflerini yazmanız gereken bir özelliğe sahiptir - örneğin, SFN yazarsanız, SomeFunctionName
sekme tamamlama penceresinde size sembolü gösterir .
Trie'yi (veya diğer veri yapılarını) hesaplamak, projenizdeki tüm sembollerin bir listesini almak için tüm kodunuzu ayrıştırmayı gerektirir. Visual Studio .ncb
bunu, projenizin yanında depolanan bir dosya olan IntelliSense veritabanında depolar , böylece projenizi her kapattığınızda ve yeniden açtığınızda her şeyi yeniden ayrıştırmak zorunda kalmaz. Büyük bir projeyi ilk kez açtığınızda (örneğin, kaynak kontrolünü yeni senkronize ettiniz), VS her şeyi ayrıştırmak ve veritabanını oluşturmak için zaman alır.
Artımlı değişiklikleri nasıl ele aldığını bilmiyorum. Dediğiniz gibi, kod yazarken% 90 oranında geçersiz sözdizimidir ve her boşta kaldığınızda her şeyi yeniden düzenlemek, CPU'nuza çok az bir fayda sağlamak için çok büyük bir vergi koyar, özellikle çok sayıda kaynak dosya.
Ya (a) yalnızca projenizi gerçekten oluşturduğunuzda (veya muhtemelen kapattığınızda / açtığınızda) yeniden ayrıştırdığından veya (b) kodu yalnızca bulunduğunuz yerin çevresinde ayrıştırdığı bir tür yerel ayrıştırma yaptığından şüpheleniyorum. Sadece ilgili sembollerin isimlerini almak için sınırlı bir şekilde düzenlenmiştir. C ++ öylesine karmaşık bir dilbilgisine sahip olduğu için, ağır şablon metaprogramlama ve benzerlerini kullanıyorsanız karanlık köşelerde garip davranabilir.