Visual Studio 18.9 C++ İndeksleme: WCI ile 2 Kat Hızlı Kod
İlginç olan şu ki, Şöyle başlayayım: C++ dünyainde IntelliSense’in yavaşlığı, aslında hepimizin sınır bozucu bulduğu ama bir noktadan sonra “eh işte” deyip kabullendiği bir durum. Büyük bir çözüm açıyorsunuz, Find All References tıklıyorsunuz, bekliyorsunuz. Sonra biraz daha bekliyorsunuz. Bir kahve alıp geliyorsunuz — hâlâ dönüyor. Tanıdık geldi mi? İşte tam da bu.
Microsoft, Visual Studio Insiders 18.9 ile Whole Codebase Indexing (WCI) diye bir önizleme özelliği getirdi. Açık konuşayım, ilk gördüğümde ben de biraz şüpheciydim. Çünkü C++ tarafında “hızlandırdık” denilen şeyleri çok gördük; çoğu belli senaryoda fena durmaz, gerçek projeye girince dağılıverir. Ama bu sefer, hmm, iş biraz daha farklı dürüyor.
Aslında Sorun Neydi?
Meseleyi netleştirelim. Visual Studio’nun C++ tarafı yıllardır “browse database” denen bir yapı kullanıyor. Bu veritabanı sembolleri, tanımları ve referansları bir yerde tutuyor. Tahmin eder mısınız? Güzel tarafı var, evet; ama derin semantik bilgi konusunda eksik kalıyor, işin aslı bu.
Garip gelecek ama, Sonuç ne? Sız “bu fonksiyonu nereden çağırıyorlar?” diye sorduğunuzda IDE gidip translation unit’leri o anda analiz ediyordu. Yanı her istekte aynı hesap yeniden yapılıyordu. Küçük projede çok dert değil. Ama 500 bin satırlık bir oyun motoru ya da endüstriyel kontrol yazılımı düşünün; orada her tıklama küçük bir sabır testi gibi oluyor.
WCI’ın yaklaşımı baya basit aslında: bu bilgiyi zaten hesaplıyorsan, kaydet gitsin. Sembol bilgisini daha derin indeksleyip veritabanında tutuyor, sız dosya açtıkça arka planda genişletiyor, Visual Studio oturumları arasında da saklıyor. Böylece ikinci sorguda da üçüncüde de onuncuda da sıfırdan başlama yok.
Çok konuştum, örnekle göstereyim.
“Kağıt üstünde bariz görünen bir çözüm gibi dürüyor ama C++’ın makrolar, template’ler ve preprocessor gibi kaprisli taraflarını düşününce, bu indeksin doğru ve güncel kalması bayağı zorlu bir mühendislik problemi.”
Rakamlar Ne Diyor?
Microsoft ekibi birçok senaryoda 2x veya daha fazla iyileşmeden söz ediyor. Ben bu tip rakamlara genelde temkinli yaklaşırım; çünkü “up to 10x” tarzı pazarlama dili sahada çoğu zaman sönük kalıyor. Ama burada dikkatimi çeken şey şu: iyileşme tek seferlik değil, birikimli gidiyor.
Yanı ilk sorgu belki eskisi kadar sürebilir (indeks henüz kurulmamıştır), ama sonrakiler ciddi biçimde hızlanıyor. Bu kısmı küçümsemeyin.
Nerede Fark Yaratıyor?
- Find All References — büyük projelerde saniyeler yerine anında sonuç alma ihtimali doğuyor
- Semantic file colorization — dosya açar açmaz renklerin gelmesi, o sınır bozucu “hazır bekle” hissini azaltıyor
- Go to Definition ve türevleri — özellikle template ağır kodlarda fark ediyor
- CodeLens — bunu birazdan ayrı konuşacağım, çünkü olayın can alıcı kısmı burada
Hani semantik renklendirme için “birkaç saniye bekle” dediğimiz an var ya, o neredeyse kaybolmuş durumda. Bu dışarıdan ufak görünür ama gündelik editing deneyiminde etkisi büyük oluyor. Çünkü her dosya açışta 2 saniye giderse ve günde 200 kez dosya açarsanız, ay sonunda ortaya çıkan süreyi sız düşünün artık.
C++ İçin CodeLens Nihayet Geliyor
Eh, Peki en güzel kısım ne? Şu: C# tarafında yıllardır olan, fonksiyonun üstünde “3 references” gibi bilgi gösteren CodeLens özelliği artık C++ için de mümkün hâle geliyor gibi dürüyor. Neden şimdiye kadar yoktu? Çünkü CodeLens’in çalışması için IDE’nın sembol referanslarını sürekli hızlı biçimde bilmesi gerekiyor; WCI olmadan bu C++ için pek ekonomik değildi.
İşte tam da bu noktada devreye giriyor.
Açıkçası uzun zamandır en çok istenen üretkenlik özelliklerinden biri buydu. Şimdi fonksiyonun üstünde referans sayısını görüyorsunuz, tıklayınca listeyi açıyorsunuz. Küçük gibi duran bu detay, kod okurken zihinsel yükü azaltıyor; baya işe yarıyor yanı.
Bilinmeyen bir kod tabanına girerken “bu fonksiyon ölü mü canlı mı”, “kim kullanmış”, “buraya kim dokunmuş” sorularının cevabı gözünüzün önünde oluyor. Bu kadar mı? Değil tabiî ama başlangıç için fena değil.
Copilot Tarafı: find_symbol Aracı
Bir de işin stratejik tarafı var. WCI’ın belki de en önemli etkisi — kendi adıma konuşayım — GitHub Copilot’un agentic modu ile birlikte ortaya çıkıyor olabilir. Copilot’un find_symbol aracı aynı sembol indeksini kullanıyor; yanı agent artık sınıf metodlarını, override ilişkilerini ve header konumlarını daha hızlı çözüyor.
Dürüst olmak gerekirse, C++ tarafında Copilot performansını ben sahada hep biraz tartışmalı buldum açıkçası. C# ya da TypeScript’te rahat akarken C++’ta bazen boş boş konuşan bir asistana dönüşebiliyordu — çünkü bağlam erişimi sınırlıydı. Bu ne anlama geliyor? Şimdi bu kapının açılmasıyla agent’ın proje hakkında gerçekten daha çok şey biliyor gibi davranması mümkün oluyor.
Bunu daha geniş resimde görmek isterseniz
Teknik Olarak Ne Değişti?
Bir şey dikkatimi çekti: Kapağı biraz aralayalım şimdi. Eski düzenle yeni düzen arasındaki farkı kabaca şöyle düşünebilirsiniz:
| Kriter | Eski Browse DB | WCI Aktif |
|---|---|---|
| Sembol bilgisinin derinliği | Sığ kalabiliyor — sık sık on-demand analiz istiyor | Daha derin; semantik zenginlik de içeriyor |
| Tecerrübi olarak tekrar eden sorgu maliyeti | Neredeyse her seferinde sıfırdan hesap yapılıyor hissi veriyor | Sorgular cache’leniyor ve çoğu durumda saniyenin altına inebiliyor |
| Oturum sonrası durum | Kısmen kaybolabiliyor | Daha kalıcı; sonraki VS oturumunda kullanılabiliyor |
| CodeLens desteği | C++ için yoktu | C++ için geliyor gibi dürüyor / destekleniyor diyebiliriz |
| Sembol bilgisinin derinliği Okay maybe that was an issue with the source formatting? Let’s provide a clean table in final answer. We need output only HTML content and preserve structure mostly same but can fix table markup? Need keep HTML tags and links/images etc same meaning. Let’s craft proper final without commentary and with valid HTML. Sıkça Sorulan SorularWhole Codebase Indexing için ekstra lisans almak gerekiyor mu?Hayır, gerekmiyor. WCI aslında Visual Studio’nun içinde geliyor — yanı Community, Professional ve Enterprise’da da kullanabileceksiniz — valla güzel iş çıkarmışlar —. Şu an sadece Insiders (18.9 preview) kanalında mevcut. GA’ya geçince ekstra bir ücret veya farklı bir SKU beklenmediğini söyleyebilirim, bence bu çok güzel bir karar. Var olan browse database dosyalarıma ne olacak? Silinecek mi?Silinmiyor. WCI mevcut browse DB’nın üstüne genişliyor, yanı sıfırdan bir şey inşa etmiyor (ciddiyim). Ama tabiî disk kullanımı artıyor — bunu göz önünde bulundurun. Açıkçası biraz endişeliyseniz Insiders’ı ayrı bir klasöre kurmanızı öneririm. İşte tam da bu noktada devreye giriyor. CodeLens’i sadece bazı fonksiyonlar için kapatabilir mıyım?Fonksiyon bazlı filtreleme henüz yok maalesef. Ama genel CodeLens ayarlarını Tools → Options altından yönetebiliyorsunuz, hani referans göstergelerini tamamen kapatmak gibi şeyler yapılabiliyor. Preview aşamasında olduğu için filtreleme seçeneklerinin GA’ya doğru genişleyeceğini düşünüyorum. Copilot’un find_symbol aracı WCI olmadan da çalışıyor mu?Hani, Çalışıyor, ama yavaş ve daha az doğru. WCI açıkken Copilot sembol bağlamına saniyenin altında erişebiliyor (buna dikkat edin) (bu beni çok şaşırttı). Kapalıyken translation unit analizine düşüyor — bu da hem gecikme yaratıyor hem de bazı durumlarda eksik sonuçlar veriyor. Hani ne farkı var diyorsunuz, değil mi? Tecrübeme göre bu fark gerçekten hissediliyor. 5 milyon+ satırlık büyük bir monorepo’da WCI hâlâ işe yarıyor mu?Kısmen yarıyor, açıkçası. İlk indeksleme saatler sürebiliyor ve disk kullanımı ciddi boyutlara ulaşabiliyor. Bu ölçekte en mantıklısı projeyi alt-solution’lara bölmek ve WCI’yı sadece sık çalıştığınız modüllerde kullanmak — yanı her şeyi bir anda indekslemeye çalışmamak. Microsoft bu ölçek için ek optimizasyonlar üzerinde çalışıyor zaten. Kaynaklar ve İleri OkumaRethinking C++ Performance: Faster Code Navigation and GitHub Copilot Tools with Whole Codebase Indexing — Microsoft C++ Team Blog (kendi tecrübem) Visual Studio C++ Resmî Dokümantasyonu — Microsoft Learn |
Bu içerik işinize yaradı mı?
Benzer içerikleri kaçırmamak için beni sosyal medyada takip edin.








1 yorum