CXXStateTree Đối Mặt Với Thách Thức Từ Cộng Đồng Về Tuyên Bố Phân Bổ Bộ Nhớ Và Cạnh Tranh Với Boost SML

Nhóm Cộng đồng BigGo
CXXStateTree Đối Mặt Với Thách Thức Từ Cộng Đồng Về Tuyên Bố Phân Bổ Bộ Nhớ Và Cạnh Tranh Với Boost SML

Cộng đồng C++ đang tích cực thảo luận về CXXStateTree, một thư viện máy trạng thái phân cấp mới cho C++20, với sự tập trung đặc biệt vào các tuyên bố về phân bổ bộ nhớ và cách nó so sánh với các giải pháp hiện có. Trong khi thư viện hứa hẹn các tính năng hiện đại và lợi ích về hiệu suất, một số mối quan tâm kỹ thuật đã xuất hiện từ phản hồi của các nhà phát triển.

Các Tính Năng Chính Của Thư Viện

  • API xây dựng linh hoạt với DSL dựa trên lambda
  • Chuyển đổi trạng thái dựa trên sự kiện
  • Bảo vệ và hành động tùy chọn cho các chuyển đổi
  • Tích hợp Google Test
  • Độ bao phủ mã với Codecov
  • Triển khai chỉ bằng header
  • Giấy phép MPL2.0

Tranh Cãi Về Phân Bổ Bộ Nhớ Gây Ra Mối Quan Tâm Trong Phát Triển Hệ Thống Nhúng

Tuyên bố của thư viện về việc không phân bổ heap đã thu hút sự xem xét kỹ lưỡng từ các nhà phát triển khi họ nhận thấy mã nguồn sử dụng các container tiêu chuẩn như lists và unordered maps. Người duy trì dự án đã làm rõ rằng điều này có nghĩa là không có phân bổ sau khi xây dựng cây trạng thái, nhưng sự phân biệt này đã đặt ra những câu hỏi quan trọng cho các nhà phát triển hệ thống nhúng. Các ứng dụng quan trọng về an toàn, đặc biệt là những ứng dụng tuân theo hướng dẫn MISRA, thường yêu cầu loại bỏ hoàn toàn việc phân bổ heap và bộ nhớ được phân bổ trước tại thời điểm khởi tạo hệ thống. Điều này đã dẫn đến các yêu cầu tính năng cho một phiên bản thực sự không phân bổ bộ nhớ phù hợp với các thiết bị nhúng có tài nguyên hạn chế.

MISRA: Hướng dẫn của Hiệp hội Độ tin cậy Phần mềm Công nghiệp Ô tô cho an toàn phần mềm ô tô

Cạnh Tranh Với Các Thư Viện Đã Được Thiết Lập Đặt Ra Câu Hỏi Về Sự Khác Biệt

Các thành viên cộng đồng đã đặt câu hỏi về cách CXXStateTree tạo sự khác biệt so với các lựa chọn thay thế đã được thiết lập tốt như Boost.Ext.SML (State Machine Language). Việc so sánh đã khơi dậy các cuộc thảo luận kỹ thuật về các phương pháp triển khai, với một số nhà phát triển lưu ý những khác biệt thú vị trong cách các thư viện này xử lý string literals và tối ưu hóa thời gian biên dịch. Trong khi SML sử dụng các user-defined literals tinh vi để xử lý strings tại thời gian biên dịch, CXXStateTree dường như có một cách tiếp cận đơn giản hơn có thể có các đặc tính hiệu suất khác nhau.

Cuộc Tranh Luận Về Tiêu Chuẩn Mã Nguồn Xuất Hiện Xung Quanh Việc Sử Dụng Pragma Once

Một cuộc thảo luận bất ngờ nhưng sôi nổi đã xuất hiện xung quanh việc thư viện sử dụng #pragma once cho include guards. Cộng đồng chia thành hai phe giữa những người coi nó là tiêu chuẩn hiện đại được hỗ trợ bởi tất cả các trình biên dịch chính (GCC, Clang, MSVC) và những người theo truyền thống thích include guards tuân thủ tiêu chuẩn. Cuộc tranh luận này phản ánh những căng thẳng rộng lớn hơn trong cộng đồng C++ giữa sự tiện lợi thực tế và việc tuân thủ tiêu chuẩn nghiêm ngặt, với một số nhà phát triển cho rằng các tính năng không chuẩn tạo ra những rủi ro không cần thiết.

Yêu cầu Trình biên dịch

  • Cần hỗ trợ trình biên dịch C++20
  • GCC >= 10
  • Clang >= 11
  • MSVC >= 2019
  • GoogleTest (tự động tải xuống qua CMake )

Phát Triển Tương Lai Và Sự Tham Gia Của Cộng Đồng

Người duy trì dự án đã thể hiện sự phản hồi tích cực với phản hồi của cộng đồng, khuyến khích người dùng mở các GitHub issues cho các đề xuất khác nhau bao gồm đóng gói vcpkg, Python bindings, và các compilation switches cho các target nhúng. Lộ trình của thư viện cho thấy các kế hoạch đầy tham vọng bao gồm hỗ trợ coroutine và tài liệu đầy đủ, cho thấy sự phát triển tích cực bất chấp những thách thức hiện tại.

Các cuộc thảo luận làm nổi bật sự phức tạp của việc tạo ra các thư viện C++ mới trong một hệ sinh thái trưởng thành nơi các tuyên bố về hiệu suất, tuân thủ tiêu chuẩn, và sự khác biệt so với các giải pháp hiện có đều phải đối mặt với sự xem xét kỹ lưỡng gay gắt từ cộng đồng.

Tham khảo: CXXStateTree