Chuyển tới nội dung
cd /languages
  • Mã native ở quy mô lớn
  • Lập trình
  • Hỗ trợ AST và symbol

C++ trên Maguyva: đồ thị lớp và lời gọi cho codebase lớn

Maguyva hỗ trợ C++ với AST, ký hiệu và đồ thị, để agent AI có thể lần theo lớp, namespace, ghi đè virtual và nơi gọi trong codebase C++ lớn.

Vì sao C++ cần cấu trúc chứ không phải tìm kiếm văn bản

Trong C++, tên không duy nhất. send có thể là hàm tự do, thành viên của ba lớp và một bản ghi đè trong lớp thứ tư. Namespace, template và định nghĩa ngoài lớp, như Socket::send trong một tệp .cpp, chia một kiểu ra nhiều tệp. Tìm kiếm văn bản trả về mọi kết quả khớp, nhưng không cho agent biết lời gọi dẫn tới cái nào.

Maguyva lập chỉ mục lớp, thành viên và lời gọi cùng chủ sở hữu của chúng, để agent lần theo cấu trúc thực trước khi chỉnh sửa.

Maguyva trích xuất gì từ C++

Maguyva bao phủ các phần mở rộng tệp nguồn và header C++ phổ biến, bao gồm .cpp, .cc, .cxx, .hpp, .hh và .hxx. Lớp, struct và hàm được trích xuất, và một định nghĩa ngoài lớp như void Socket::send() được gán cho lớp sở hữu và namespace của nó. Thành viên virtual được ghi lại, và tham số template là một phần của chữ ký.

Việc xác định kiểu receiver theo dõi tham số, khai báo cục bộ, trường, vòng lặp for theo phạm vi và auto, và nhìn xuyên qua unique_ptr, shared_ptr và optional, để một lời gọi như conn->send() được phân giải về đúng lớp. Mệnh đề lớp cơ sở cung cấp dữ liệu cho kế thừa, và biểu thức new được tính là khởi tạo.

Việc che macro export và annotation giống như ở C cũng được áp dụng. Khoảng 273 tên thư viện chuẩn (std::cout, std::endl, printf và tương tự) bị lọc khỏi quan hệ. Đồ thị ghi lại lời gọi, include, kế thừa, ghi đè, khởi tạo, tham chiếu kiểu, đọc và ghi, cùng các cạnh throw.

Ví dụ prompt cho agent

  • “Những lớp nào ghi đè Renderer::draw, và ai gọi nó?” (dependency_search)
  • “Cho tôi xem OrderBook::match và mọi nơi gọi nó.” (find_symbol)
  • “Giải thích cách một thông điệp dữ liệu thị trường tới được engine chiến lược.” (get_task_context)

Giới hạn đã biết

  • .h xuất hiện trong danh sách phần mở rộng của C, C++ và Objective-C, nên trong các cây mã trộn C và C++, header được chia giữa các profile này.
  • Thân của macro dạng đối tượng không được phân tích, và lời gọi tới các tên thư viện chuẩn đã bị lọc không phải là cạnh đồ thị. Dùng text_pattern_search cho macro và các chỗ dùng std::.

Bước tiếp theo

Kết nối một kho mã bằng hướng dẫn bắt đầu nhanh, sau đó xem ma trận hỗ trợ trên trang tương thích. Nếu một phần cây mã là C thuần, hãy đọc thêm hướng dẫn C.

Phù hợp nhất

  • > Game engine, hệ thống giao dịch, trình duyệt và các codebase C++ lớn khác, nơi sửa một header là phải build lại nửa cây mã.
  • > Hệ phân cấp lớp có phương thức virtual, nơi phương thức thực sự chạy được định nghĩa ở chỗ khác với chỗ nó được gọi.
  • > Refactor có agent hỗ trợ, cần biết nơi gọi và các ghi đè trước khi đổi chữ ký.

Workflow agent

  • > Tìm mọi ghi đè của một phương thức virtual trước khi lớp cơ sở thay đổi.
  • > Liệt kê nơi gọi một hàm hoặc phương thức lớp có namespace, như `net::Socket::send`, trên toàn codebase.
  • > Lần theo nơi một lớp được tạo bằng `new` và những thành viên nó chạm vào sau đó.

Chi tiết engine

  • > Định nghĩa ngoài lớp như `void Socket::send()` được gán cho lớp sở hữu và namespace của chúng, và thành viên virtual được ghi lại.
  • > Việc xác định kiểu receiver theo dõi tham số, biến cục bộ, trường, `for` theo phạm vi và `auto`, và nhìn xuyên qua `unique_ptr`, `shared_ptr` và `optional`.
  • > Mệnh đề lớp cơ sở cung cấp dữ liệu cho kế thừa, biểu thức `new` được tính là khởi tạo, và khoảng 273 tên thư viện chuẩn bị lọc khỏi quan hệ.

Điểm khởi đầu MCP hữu ích

  • find_symbol

    Dùng với tên định danh đầy đủ như `OrderBook::match` khi bạn cần định nghĩa và nơi gọi.

  • dependency_search

    Trước khi đổi chữ ký, dùng trên một lớp cơ sở hoặc phương thức virtual để tìm các ghi đè và nơi gọi.

  • get_task_context

    Dùng cho các prompt như “giải thích cách một thông điệp dữ liệu thị trường tới được engine chiến lược”.