Hỏi về việc việc tối ưu compiler time khi dùng auto generate model trong c++

Chào mọi người, khi làm việc với data, thường mọi người sử dụng các auto generate model, ví dụ như parse json backend thì có thể dùng quicktype, dùng protobuf thì dùng protoc compiler. Các tool này tự động sinh model rất tiện,… nhưng với project c++ thì lại nảy sinh vấn đề, đó là mỗi lần generate model là phải build lại toàn bộ project, vì tất cả được xây dựng qua model. Em thực sự muốn tìm một giải pháp đủ tốt để vừa tận dụng được ưu thế của việc auto sinh model và việc optimize build time. Em có nghĩ đến việc nếu xây dựng một application có model phức tạp và thay đổi liên tục thì nên chuyển sang các ngôn ngữ có compiler time nhanh, nhưng vẫn rất muốn phát triển thêm ở c++. Mong nhận được lời khuyên, nguồn hay bất cứ thứ gì hữu ích ạ, em cảm ơn.

em thử mò cái này xem: https://en.cppreference.com/w/cpp/language/pimpl

giải thích sơ qua là xài thêm 1 con trỏ trỏ tới model :V thêm 1 level of indirection để giảm dependencies, từ đó tăng tốc cho compile time :V Đương nhiên là cho debug build thôi chứ release build thì bỏ đi để tốc độ tối ưu nhất. Nhưng tùy compiler, có thể nó optimize away cái pimpl này :V

3 Likes

Em có thể hiểu technique này giống như là đưa implementation vào file .cpp và đưa hết method,… lên file .h, build theo shared library,… dù như vậy thì các model được sinh ra cũng thay đổi file .h. Các file .h thay đổi thì sẽ build lại hết các dependencies. Như em nói, vì sử dụng tool sinh model nên các file .h của model thay đổi rất thường xuyên, và tình hình là sử dụng cmake nhưng project hiện tại của em cũng build hơn 30p rồi ạ. :frowning:

thì cách này thay vì em #include <model.h> thì chỉ cần forward declaration struct model;, nên mấy header ko phụ thuộc vào model.h, nó có thay đổi thì nhiều file khác cũng ko bị recompile lại :V

bao nhiêu file mà compile tới 30’ :V có parallel compile như cmake --build build --parallel [<jobs>] ko :V ngần đấy file mà bắt sửa theo kiểu này thì chắc mấy tháng :V :V

2 Likes

Máy em cùi lắm anh ơi, build 2 core là tự kill hết rồi, em thắc mắc là tại sao vcpkg nó build make -j 10 mà máy em không bị crash, lại build rất nhanh.

Nhiều lắm, nhiều đến độ chẳng buồn đếm nữa.

Cảm ơn anh về cái này, sẽ nghiên cứu và tích lũy kinh nghiệm cho project sau. :smiley:

2 Likes

mua con AMD 5800X 8-core 16-thread compile cho sướng :triumph: bảo đảm nhanh hơn gấp chục lần, 30 phút còn 3 phút :triumph:

5800X3D thì chơi game sướng luôn :relieved:

laptop thì 4800H 4600H hoặc 5600H 5800H gì đấy là được :triumph:

3 Likes

Skill này cần thêm thời gian nữa, góp ít lúa nữa mới học được :sweat_smile:

1 Like

Nếu việc thay đổi model làm bạn cảm thấy tốn quá nhiều thời gian, thì bạn nên tìm cách giảm số lần thay đổi
Model thường dính đến design, 1 ngày đổi vài lần thì chứng tỏ khâu design khá kém

3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?