Lựa chọn C++ của EloqDB gây ra cuộc tranh luận gay gắt trong cộng đồng lập trình viên về An toàn Bộ nhớ so với Hiệu suất

Nhóm Cộng đồng BigGo
Lựa chọn C++ của EloqDB gây ra cuộc tranh luận gay gắt trong cộng đồng lập trình viên về An toàn Bộ nhớ so với Hiệu suất

Thông báo gần đây của EloqData về việc xây dựng cơ sở dữ liệu phân tán EloqKV chủ yếu bằng C++ đã châm ngòi cho một cuộc thảo luận sôi nổi trong cộng đồng lập trình viên. Trong khi công ty đã nêu ra những lý do kỹ thuật để chọn C++ thay vì các lựa chọn hiện đại khác như Rust, nhiều lập trình viên đang đặt câu hỏi liệu những lý giải này có thực sự thuyết phục hay không.

Tranh cãi về An toàn Bộ nhớ trở thành Tâm điểm

Phần gay gắt nhất của cuộc thảo luận tập trung xung quanh các vấn đề an toàn bộ nhớ nổi tiếng của C++. Các thành viên cộng đồng đặc biệt hoài nghi về tuyên bố của EloqData rằng các vấn đề bộ nhớ có thể được giảm thiểu đáng kể bằng cách sử dụng các thực hành C++ hiện đại. Nhiều lập trình viên chỉ ra rằng ngay cả những lập trình viên C++ có kinh nghiệm cũng thường xuyên tạo ra những lỗi tinh vi mà gần như không thể phát hiện được trong quá trình review code.

Thách thức trở nên phức tạp hơn khi làm việc với các nhóm lớn. Các lập trình viên lưu ý rằng C++ đòi hỏi sự cảnh giác liên tục và hiểu biết sâu sắc về toàn bộ codebase để tránh tạo ra các lỗi hỏng bộ nhớ. Một thành viên cộng đồng đã nêu bật một vấn đề cơ bản: ngay cả những người dùng C++ hàng ngày vẫn mắc lỗi an toàn bộ nhớ, chỉ là ít thường xuyên hơn những người dùng thỉnh thoảng.

Lập luận về Tích hợp Hệ sinh thái gặp phản ứng trái chiều

EloqData đã biện minh cho lựa chọn C++ của họ bằng cách nói đến khả năng tích hợp tốt hơn với các thư viện cơ sở dữ liệu hiện có và các API hệ thống cấp thấp. Tuy nhiên, phản hồi từ cộng đồng cho thấy lý luận này có thể đã lỗi thời. Một số lập trình viên cho rằng khả năng tương tác của Rust với các thư viện C đã trưởng thành đáng kể, khiến lập luận về tích hợp trở nên kém thuyết phục hơn trước đây.

Cuộc thảo luận tiết lộ rằng nhiều thư viện quan trọng về hiệu suất được EloqData đề cập, chẳng hạn như io_uring và DPDK, thực ra khá đơn giản để sử dụng từ Rust. Điều này đã khiến một số người đặt câu hỏi liệu các rào cản kỹ thuật để sử dụng Rust có thực sự quan trọng như bài viết đề cập hay không.

Các lập luận chính của EloqData cho C++:

  • Tích hợp tốt hơn với các thư viện và tài nguyên cơ sở dữ liệu C/C++ hiện có
  • Hỗ trợ nguyên bản cho các thư viện quan trọng về hiệu suất ( DPDK , RDMA , liburing , mimalloc )
  • Sự ổn định lâu dài của ngôn ngữ và bộ công cụ trưởng thành cho các dự án kéo dài hàng thập kỷ
  • Hệ sinh thái rộng lớn của các công nghệ cơ sở dữ liệu đã được thiết lập để tận dụng

Lập luận về Tính bền vững gây ra phản ứng trái chiều

Có lẽ tuyên bố gây tranh cãi nhất là C++ mang lại sự ổn định lâu dài tốt hơn cho một dự án dự kiến tồn tại hàng thập kỷ. Các thành viên cộng đồng đã chỉ ra một mâu thuẫn thú vị: trong khi EloqData lập luận về tính ổn định của C++, nhiều người lưu ý rằng các codebase C++ thực sự bị hỏng nghiêm trọng theo thời gian do các tiêu chuẩn, công cụ và quy ước liên tục thay đổi.

Theo kinh nghiệm của tôi, không có ngôn ngữ nào bị hỏng và xuống cấp tệ hơn một codebase C++. Tiêu chuẩn ngôn ngữ đã thay đổi rất nhiều, công cụ, thư viện thịnh hành và các quy ước đã được thiết lập... Cần một nỗ lực phi thường để giữ cho một source tree nhất định được cập nhật.

Quan sát này thách thức quan niệm rằng C++ cung cấp nền tảng ổn định hơn cho các dự án dài hạn so với các ngôn ngữ mới hơn có mô hình phát triển nhất quán hơn.

Chuyên môn Nhóm so với Giá trị Kỹ thuật

Bên dưới các lập luận kỹ thuật, nhiều thành viên cộng đồng nghi ngờ lý do thực sự để chọn C++ đơn giản hơn: sự quen thuộc của nhóm. Một số lập trình viên cho rằng lý giải kỹ thuật dài dòng có thể đang che giấu một quyết định đơn giản hơn dựa trên kỹ năng và mức độ thoải mái hiện có của nhóm.

Quan điểm này đã châm ngòi cho các cuộc thảo luận rộng hơn về khi nào nên gắn bó với các công nghệ quen thuộc so với việc áp dụng các lựa chọn mới hơn, có khả năng an toàn hơn. Một số cho rằng việc thừa nhận trung thực về chuyên môn của nhóm như một yếu tố quyết định sẽ có giá trị hơn những lý giải kỹ thuật phức tạp.

Phản bác của Cộng đồng:

  • Khả năng tương tác với C của Rust đã trưởng thành đáng kể, giảm thiểu các rào cản tích hợp
  • Các vấn đề về an toàn bộ nhớ trong C++ vẫn tồn tại ngay cả với các thực hành hiện đại và các nhà phát triển có kinh nghiệm
  • Các codebase C++ gặp phải tình trạng "hư hỏng từng bit" do các tiêu chuẩn và công cụ liên tục phát triển
  • Các thư viện quan trọng về hiệu suất được đề cập có thể dễ dàng truy cập từ Rust
  • Sự quen thuộc của nhóm có thể là yếu tố quyết định thực sự đằng sau các lý do kỹ thuật
Các khối gỗ tượng trưng cho sự tập trung vào ngôn ngữ lập trình C++, làm nổi bật sự quen thuộc của nhóm như một yếu tố quan trọng trong việc lựa chọn công nghệ
Các khối gỗ tượng trưng cho sự tập trung vào ngôn ngữ lập trình C++, làm nổi bật sự quen thuộc của nhóm như một yếu tố quan trọng trong việc lựa chọn công nghệ

Tác động Ngành và Triển vọng Tương lai

Cuộc tranh luận phản ánh những căng thẳng lớn hơn trong cộng đồng lập trình hệ thống về việc cân bằng giữa các công nghệ đã được chứng minh với các lựa chọn thay thế tập trung vào an toàn mới nổi. Trong khi một số lập trình viên đánh giá cao tính linh hoạt và sự trưởng thành của hệ sinh thái C++, những người khác coi việc tiếp tục áp dụng C++ cho các dự án mới là sự kháng cự đối với tiến bộ cần thiết trong an toàn phần mềm.

Cuộc thảo luận cũng làm nổi bật áp lực ngày càng tăng lên các tổ chức để biện minh cho các lựa chọn công nghệ một cách chặt chẽ hơn, đặc biệt khi những lựa chọn đó liên quan đến sự đánh đổi giữa năng suất của lập trình viên, an toàn và hiệu suất. Khi bảo mật phần mềm trở nên ngày càng quan trọng, những cuộc tranh luận này có khả năng sẽ tăng cường trên toàn ngành.

Tham khảo: Why We Develop EloqDB Mainly in C++