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

Canonical source: https://maguyva.ai/tr/languages/cpp

License: text under [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/); code samples under [MIT-0](https://opensource.org/license/mit-0); the Maguyva name, logos, brand assets and other code are not covered. Details: [maguyva.ai/license](https://maguyva.ai/license).

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.

## Destek anlık görüntüsü

- Katman: AST ve sembol desteği
- Programlama
- Uzantılar: .c, .c++, .cc, .cpp, .cxx, .h, +4 daha
- Sözdizimi farkında arama ve yapısal bağlam için gerçek AST ayrıştırması.
- Adlandırılmış semboller anlamsal aramayı ve çapraz referansı besler. İlişki çıkarımı etkinleştirildiğinde graf gezinmesi kullanılabilir.
- Bu dil, graf farkındalıklı aramaya semboller ve ilişkiler sağlar; desteklenen kenar türleri dilin yerel yapılarına göre değişir.
- Hem AST ayrıştırma hem de sembol çıkarma kullanılabilir.

## 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.

## 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ıç](/tr/docs/quickstart) ile bir repo bağlayın, ardından destek matrisi için [uyumluluk sayfasına](/tr/docs/compatibility) bakın. Ağacın bir bölümü saf C ise [C rehberini](/tr/languages/c) de okuyun.

## 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.
