İçeriğe atla
cd /languages
  • Ölçekte yerel kod
  • Programlama
  • AST ve sembol desteği

Maguyva'da C++: büyük kod tabanları için sınıf ve çağrı grafları

Maguyva, C++'ı AST, sembol ve graf desteğiyle sunar; böylece yapay zeka ajanları büyük C++ kod tabanlarında sınıfları, ad alanlarını, sanal geçersiz kılmaları ve çağıranları izleyebilir.

C++ neden metin aramasına değil yapıya ihtiyaç duyar

C++’ta adlar benzersiz değildir. send bir serbest fonksiyon, üç sınıfın üyesi ve dördüncü bir sınıfta geçersiz kılma olabilir. Ad alanları, şablonlar ve bir .cpp dosyasındaki Socket::send gibi sınıf dışı tanımlar bir türü birçok dosyaya böler. Metin araması her eşleşmeyi döndürür, ama ajana bir çağrının hangisine vardığını söylemez.

Maguyva sınıfları, üyeleri ve çağrıları sahipleriyle birlikte dizinler; böylece ajan düzenlemeden önce gerçek yapıyı izler.

Maguyva C++’tan neleri çıkarır

Maguyva aralarında .cpp, .cc, .cxx, .hpp, .hh ve .hxx bulunan yaygın C++ kaynak ve başlık dosyası uzantılarını kapsar. Sınıflar, struct’lar ve fonksiyonlar çıkarılır; void Socket::send() gibi sınıf dışı bir tanım sahip sınıfa ve ad alanına atfedilir. Sanal üyeler kaydedilir ve şablon parametreleri imzaların parçasıdır.

Alıcı türlemesi parametreleri, yerel bildirimleri, alanları, aralık tabanlı for döngülerini ve auto ifadesini izler; unique_ptr, shared_ptr ve optional içini görür, böylece conn->send() gibi bir çağrı doğru sınıfa çözülür. Temel sınıf yan tümceleri kalıtımı besler ve new ifadeleri örnekleme sayılır.

C ile aynı dışa aktarma ve anotasyon makrosu maskelemesi uygulanır. Yaklaşık 273 standart kütüphane adı (std::cout, std::endl, printf ve benzerleri) ilişkilerden filtrelenir. Graf çağrıları, include’ları, kalıtımı, geçersiz kılmaları, örneklemeyi, tür referanslarını, okuma ve yazmaları ve throw kenarlarını kaydeder.

Örnek ajan istemleri

  • “Hangi sınıflar Renderer::draw yöntemini geçersiz kılıyor ve onu kim çağırıyor?” (dependency_search)
  • “Bana OrderBook::match yöntemini ve onu çağıran herkesi göster.” (find_symbol)
  • “Bir piyasa verisi mesajının strateji motoruna nasıl ulaştığını açıkla.” (get_task_context)

Bilinen sınırlar

  • .h, C, C++ ve Objective-C uzantı listelerinde yer alır; bu nedenle C ve C++ karışık ağaçlarda başlık dosyaları bu profiller arasında paylaşılır.
  • Nesne benzeri makroların gövdeleri ayrıştırılmaz ve filtrelenen standart kütüphane adlarına yapılan çağrılar graf kenarı değildir. Makrolar ve std:: kullanımları için text_pattern_search kullanın.

Sonraki adımlar

Hızlı başlangıç ile bir repo bağlayın, ardından destek matrisi için uyumluluk sayfasına bakın. Ağacın bir bölümü saf C ise C rehberini de okuyun.

En uygun kullanım

  • > Bir başlık dosyası değişikliğinin ağacın yarısını yeniden derlettiği oyun motorları, alım satım sistemleri, tarayıcılar ve diğer büyük C++ kod tabanları.
  • > Çalışan yöntemin, çağrıldığı yerden başka bir yerde tanımlandığı sanal yöntemli sınıf hiyerarşileri.
  • > Bir imza değişikliğinden önce çağıranlara ve geçersiz kılmalara ihtiyaç duyan, ajan destekli yeniden yapılandırma.

Ajan iş akışları

  • > Temel sınıf değişmeden önce bir sanal yöntemin her geçersiz kılmasını bulmak.
  • > `net::Socket::send` gibi ad alanına sahip bir fonksiyonu veya sınıf yöntemini çağıranları kod tabanı genelinde listelemek.
  • > Bir sınıfın `new` ile nerede oluşturulduğunu ve ardından hangi üyelere dokunduğunu izlemek.

Motor ayrıntıları

  • > `void Socket::send()` gibi sınıf dışı tanımlar sahip sınıflarına ve ad alanlarına atfedilir; sanal üyeler kaydedilir.
  • > Alıcı türlemesi parametreleri, yerel değişkenleri, alanları, aralık tabanlı `for` döngülerini ve `auto` ifadesini izler; `unique_ptr`, `shared_ptr` ve `optional` içini görür.
  • > Temel sınıf yan tümceleri kalıtımı besler, `new` ifadeleri örnekleme sayılır ve yaklaşık 273 standart kütüphane adı ilişkilerden filtrelenir.

Yararlı MCP giriş noktaları

  • find_symbol

    Tanıma ve çağıranlara ihtiyacınız olduğunda `OrderBook::match` gibi tam nitelenmiş bir adla kullanın.

  • dependency_search

    Bir imza değişikliğinden önce geçersiz kılmaları ve çağıranları bulmak için bir temel sınıfta veya sanal yöntemde kullanın.

  • get_task_context

    "Bir piyasa verisi mesajının strateji motoruna nasıl ulaştığını açıkla" gibi istemler için kullanın.