Μετάβαση στο περιεχόμενο
cd /languages
  • Εγγενής κώδικας σε κλίμακα
  • Προγραμματισμός
  • Υποστήριξη AST και συμβόλων

C++ στο Maguyva: γράφοι κλάσεων και κλήσεων για μεγάλες βάσεις κώδικα

Το Maguyva υποστηρίζει C++ με AST, σύμβολα και γράφο, ώστε οι πράκτορες AI να παρακολουθούν κλάσεις, χώρους ονομάτων, εικονικές επικαλύψεις και καλούντες σε μεγάλες βάσεις κώδικα C++.

Γιατί η C++ χρειάζεται δομή και όχι αναζήτηση κειμένου

Στη C++ τα ονόματα δεν είναι μοναδικά. Το send μπορεί να είναι ελεύθερη συνάρτηση, μέλος τριών κλάσεων και επικάλυψη σε μια τέταρτη. Οι χώροι ονομάτων, τα πρότυπα και οι ορισμοί εκτός κλάσης, όπως το Socket::send σε ένα αρχείο .cpp, μοιράζουν έναν τύπο σε πολλά αρχεία. Η αναζήτηση κειμένου επιστρέφει κάθε αντιστοιχία, αλλά δεν λέει στον πράκτορα σε ποια καταλήγει μια κλήση.

Το Maguyva ευρετηριάζει κλάσεις, μέλη και κλήσεις μαζί με τους κατόχους τους, ώστε ένας πράκτορας να ακολουθεί την πραγματική δομή πριν επεξεργαστεί.

Τι εξάγει το Maguyva από τη C++

Το Maguyva καλύπτει τις συνηθισμένες επεκτάσεις αρχείων πηγαίου κώδικα και κεφαλίδων της C++, μεταξύ των οποίων .cpp, .cc, .cxx, .hpp, .hh και .hxx. Εξάγονται κλάσεις, structs και συναρτήσεις, και ένας ορισμός εκτός κλάσης όπως το void Socket::send() αποδίδεται στην κλάση-κάτοχο και στο namespace της. Τα εικονικά μέλη καταγράφονται και οι παράμετροι προτύπων αποτελούν μέρος των υπογραφών.

Η τυποποίηση δεκτών ακολουθεί παραμέτρους, τοπικές δηλώσεις, πεδία, βρόχους for εύρους και το auto, και βλέπει μέσα από unique_ptr, shared_ptr και optional, ώστε μια κλήση όπως conn->send() να επιλύεται στη σωστή κλάση. Οι προτάσεις βασικών κλάσεων τροφοδοτούν την κληρονομικότητα και οι εκφράσεις new μετρούν ως δημιουργία στιγμιοτύπου.

Ισχύει η ίδια κάλυψη μακροεντολών εξαγωγής και επισημείωσης με τη C. Περίπου 273 ονόματα της τυπικής βιβλιοθήκης (std::cout, std::endl, printf και παρόμοια) φιλτράρονται από τις σχέσεις. Ο γράφος καταγράφει κλήσεις, συμπεριλήψεις, κληρονομικότητα, επικαλύψεις, δημιουργία στιγμιοτύπων, αναφορές τύπων, αναγνώσεις και εγγραφές, καθώς και ακμές throw.

Παραδείγματα προτροπών για πράκτορες

  • «Ποιες κλάσεις επικαλύπτουν το Renderer::draw και ποιος το καλεί;» (dependency_search)
  • «Δείξε μου το OrderBook::match και όλους όσους το καλούν.» (find_symbol)
  • «Εξήγησε πώς ένα μήνυμα δεδομένων αγοράς φτάνει στη μηχανή στρατηγικής.» (get_task_context)

Γνωστοί περιορισμοί

  • Το .h εμφανίζεται στις λίστες επεκτάσεων της C, της C++ και της Objective-C, οπότε σε δέντρα που αναμειγνύουν C και C++ οι κεφαλίδες μοιράζονται ανάμεσα σε αυτά τα προφίλ.
  • Τα σώματα των μακροεντολών τύπου αντικειμένου δεν αναλύονται, και οι κλήσεις σε φιλτραρισμένα ονόματα της τυπικής βιβλιοθήκης δεν είναι ακμές του γράφου. Για μακροεντολές και χρήσεις του std:: χρησιμοποιήστε το text_pattern_search.

Επόμενα βήματα

Συνδέστε ένα αποθετήριο με τον γρήγορο οδηγό εκκίνησης και έπειτα δείτε τον πίνακα υποστήριξης στη σελίδα συμβατότητας. Αν μέρος του δέντρου είναι καθαρή C, διαβάστε και τον οδηγό για τη C.

Ιδανική χρήση

  • > Μηχανές παιχνιδιών, συστήματα συναλλαγών, προγράμματα περιήγησης και άλλες μεγάλες βάσεις κώδικα C++, όπου η αλλαγή μιας κεφαλίδας ξαναχτίζει το μισό δέντρο.
  • > Ιεραρχίες κλάσεων με εικονικές μεθόδους, όπου η μέθοδος που εκτελείται ορίζεται αλλού από εκεί όπου καλείται.
  • > Αναδιάρθρωση με υποστήριξη πρακτόρων, που χρειάζεται καλούντες και επικαλύψεις πριν από μια αλλαγή υπογραφής.

Ροές εργασίας πρακτόρων

  • > Εύρεση κάθε επικάλυψης μιας εικονικής μεθόδου πριν αλλάξει η βασική κλάση.
  • > Καταγραφή σε όλη τη βάση κώδικα όσων καλούν μια συνάρτηση ή μέθοδο κλάσης με namespace, όπως `net::Socket::send`.
  • > Εντοπισμός του σημείου όπου μια κλάση δημιουργείται με `new` και των μελών που αγγίζει στη συνέχεια.

Λεπτομέρειες μηχανής

  • > Οι ορισμοί εκτός κλάσης, όπως το `void Socket::send()`, αποδίδονται στην κλάση-κάτοχο και στο namespace τους, και τα εικονικά μέλη καταγράφονται.
  • > Η τυποποίηση δεκτών ακολουθεί παραμέτρους, τοπικές μεταβλητές, πεδία, `for` εύρους και `auto`, και βλέπει μέσα από `unique_ptr`, `shared_ptr` και `optional`.
  • > Οι προτάσεις βασικών κλάσεων τροφοδοτούν την κληρονομικότητα, οι εκφράσεις `new` μετρούν ως δημιουργία στιγμιοτύπου και περίπου 273 ονόματα της τυπικής βιβλιοθήκης φιλτράρονται από τις σχέσεις.

Χρήσιμα σημεία εισόδου MCP

  • find_symbol

    Χρησιμοποιήστε το με ένα πλήρως προσδιορισμένο όνομα όπως `OrderBook::match` όταν χρειάζεστε τον ορισμό και τους καλούντες.

  • dependency_search

    Πριν από μια αλλαγή υπογραφής, χρησιμοποιήστε το σε μια βασική κλάση ή εικονική μέθοδο για να βρείτε επικαλύψεις και καλούντες.

  • get_task_context

    Χρησιμοποιήστε το για προτροπές όπως «εξήγησε πώς ένα μήνυμα δεδομένων αγοράς φτάνει στη μηχανή στρατηγικής».