Siirry sisältöön
cd /languages
  • Natiivia suuressa mittakaavassa
  • Ohjelmointi
  • AST- ja symbolituki

C++-tuki Maguyva-palvelussa: luokka- ja kutsugraafit suurille koodikannoille

Maguyva tukee C++:aa AST-jäsennyksellä, symboleilla ja graafilla, jotta tekoälyagentit voivat seurata luokkia, nimiavaruuksia, virtuaalisia ylikirjoituksia ja kutsujia suurissa C++-koodikannoissa.

Miksi C++ tarvitsee rakennetta eikä tekstihakua

C++:ssa nimet eivät ole yksilöllisiä. send voi olla vapaa funktio, kolmen luokan jäsen ja ylikirjoitus neljännessä. Nimiavaruudet, mallipohjat ja luokan ulkopuoliset määrittelyt, kuten Socket::send tiedostossa .cpp, levittävät yhden tyypin moneen tiedostoon. Tekstihaku palauttaa jokaisen osuman mutta ei kerro agentille, mihin niistä kutsu päätyy.

Maguyva indeksoi luokat, jäsenet ja kutsut omistajineen, jotta agentti voi seurata todellista rakennetta ennen muokkaamista.

Mitä Maguyva poimii C++:sta

Maguyva kattaa yleiset C++:n lähde- ja otsaketiedostojen päätteet, muun muassa .cpp, .cc, .cxx, .hpp, .hh ja .hxx. Luokat, rakenteet ja funktiot poimitaan, ja luokan ulkopuolinen määrittely kuten void Socket::send() kohdistetaan omistavaan luokkaan ja nimiavaruuteen. Virtuaaliset jäsenet tallennetaan, ja mallipohjien parametrit kuuluvat allekirjoituksiin.

Vastaanottajan tyypitys seuraa parametreja, paikallisia esittelyjä, kenttiä, aluepohjaisia for-silmukoita ja auto-avainsanaa ja katsoo tyyppien unique_ptr, shared_ptr ja optional läpi, joten kutsun kuten conn->send() voi ratkaista oikeaan luokkaan. Kantaluokkalausekkeet syöttävät periytymisen, ja new-lausekkeet lasketaan ilmentymän luonniksi.

Samaa vienti- ja annotaatiomakrojen peittämistä sovelletaan kuin C:ssä. Noin 273 standardikirjaston nimeä (std::cout, std::endl, printf ja vastaavat) suodatetaan pois suhteista. Graafi tallentaa kutsut, include-lauseet, periytymisen, ylikirjoitukset, ilmentymien luonnin, tyyppiviittaukset, luvut ja kirjoitukset sekä throw-kaaret.

Esimerkkikehotteita agenteille

  • “Mitkä luokat ylikirjoittavat metodin Renderer::draw, ja kuka sitä kutsuu?” (dependency_search)
  • “Näytä OrderBook::match ja kaikki sen kutsujat.” (find_symbol)
  • “Selitä, miten markkinadataviesti päätyy strategiamoottoriin.” (get_task_context)

Tunnetut rajoitukset

  • .h on C:n, C++:n ja Objective-C:n tiedostopäätteiden luetteloissa, joten C:tä ja C++:aa sekoittavissa puissa otsakkeet jaetaan näiden profiilien kesken.
  • Oliomaisten makrojen runkoja ei jäsennetä, eivätkä suodatettujen standardikirjaston nimien kutsut ole graafin kaaria. Käytä makroille ja std::-käytöille työkalua text_pattern_search.

Seuraavat vaiheet

Yhdistä repositorio pikaoppaan avulla ja tarkista sitten tukimatriisi yhteensopivuussivulta. Jos osa puusta on puhdasta C:tä, lue myös C-opas.

Parhaiten sopii

  • > Pelimoottorit, kaupankäyntijärjestelmät, selaimet ja muut suuret C++-koodikannat, joissa yhden otsakkeen muutos kääntää puolet puusta uudelleen.
  • > Virtuaalisia metodeja sisältävät luokkahierarkiat, joissa suoritettava metodi on määritelty muualla kuin missä sitä kutsutaan.
  • > Agenttiavusteinen refaktorointi, joka tarvitsee kutsujat ja ylikirjoitukset ennen allekirjoituksen muutosta.

Agenttien työnkulut

  • > Löytää virtuaalisen metodin kaikki ylikirjoitukset ennen kuin kantaluokkaa muutetaan.
  • > Listata koko koodikannasta nimiavaruuteen kuuluvan funktion tai luokan metodin kutsujat, esimerkiksi `net::Socket::send`.
  • > Jäljittää, missä luokka luodaan `new`-lausekkeella ja mihin jäseniin se koskee seuraavaksi.

Moottorin yksityiskohdat

  • > Luokan ulkopuoliset määrittelyt kuten `void Socket::send()` kohdistetaan omistavaan luokkaan ja nimiavaruuteen, ja virtuaaliset jäsenet tallennetaan.
  • > Vastaanottajan tyypitys seuraa parametreja, paikallisia muuttujia, kenttiä, aluepohjaista `for`-silmukkaa ja `auto`-avainsanaa ja katsoo tyyppien `unique_ptr`, `shared_ptr` ja `optional` läpi.
  • > Kantaluokkalausekkeet syöttävät periytymisen, `new`-lausekkeet lasketaan ilmentymän luonniksi, ja noin 273 standardikirjaston nimeä suodatetaan pois suhteista.

Hyödylliset MCP-liittymäkohdat

  • find_symbol

    Käytä sitä tarkennetulla nimellä kuten `OrderBook::match`, kun tarvitset määrittelyn ja kutsujat.

  • dependency_search

    Käytä sitä ennen allekirjoituksen muutosta kantaluokkaan tai virtuaaliseen metodiin löytääksesi ylikirjoitukset ja kutsujat.

  • get_task_context

    Käytä sitä kehotteisiin kuten "selitä, miten markkinadataviesti päätyy strategiamoottoriin".