10 điểm bởi GN⁺ 2024-11-26 | 3 bình luận | Chia sẻ qua WhatsApp
  • Giấc mơ về một C++ thống nhất không có phương ngữ dường như đã tan biến từ lâu
  • Có rất nhiều tranh luận về tương lai của C++ trên Reddit, trang web màu cam đó (HN), và trong các cuộc họp chính thức của ủy ban tiêu chuẩn C++

Tình trạng hiện tại của C++

  • Nhóm làm việc tiến hóa của C++ (EWG) đã đồng ý thông qua P3466 R0.
    • Duy trì khả năng tương thích liên kết với C và C++ cũ mà không phá vỡ ABI (giao diện nhị phân ứng dụng).
    • Không sử dụng “chú thích lan truyền”.
    • Vẫn bám vào các mục tiêu xung đột nhau là không phá vỡ ABI và nguyên tắc zero-overhead.
  • Chính phủ Mỹ khuyến cáo ngừng sử dụng C++.
    • Nhiều cơ quan như CISA, NSA và Nhà Trắng đã công bố cảnh báo về việc sử dụng các ngôn ngữ không an toàn bộ nhớ.
  • Các công ty công nghệ lớn đang áp dụng Rust.
    • Microsoft, Google, AWS và các công ty khác đang sử dụng Rust.
    • Google thậm chí còn phát triển công cụ tương tác C++/Rust
  • Xung đột nội bộ trong cộng đồng C++
    • Có thông tin Herb Sutter rời Microsoft và MSVC triển khai chậm các tính năng C++23.
    • Google đang giảm mức độ tham gia vào quy trình phát triển C++ và phát triển ngôn ngữ kế nhiệm C++ của riêng mình.
    • Thiếu niềm tin vào quy trình hiện tại của ủy ban tiêu chuẩn C++
    • Tính năng module vẫn còn chưa hoàn thiện
    • “Hồ sơ an toàn (‘Safety Profiles’)” đang ở trong trạng thái khá kỳ lạ

Hai nền văn hóa của C++

  • Nhóm sử dụng công cụ hiện đại và tự động hóa
    • Các công ty công nghệ lớn như Google là ví dụ tiêu biểu
    • Sử dụng các tiêu chuẩn C++ mới nhất (C++17 trở lên), với sự hỗ trợ của các công cụ build và kiểm thử tự động
    • Đầu tư để duy trì chất lượng mã và liên tục hiện đại hóa codebase
  • Nhóm C++ legacy
    • Các codebase vận hành trong môi trường và công cụ cũ
    • Hoạt động mà không có mã nguồn hoặc có hệ thống build đã lỗi thời
    • Chi phí bảo trì cao và rào cản hiện đại hóa lớn
  • Khác biệt chính là công cụ và quy trình
    • Nhóm C++ hiện đại dựa vào hệ thống build tích hợp và các công cụ như static analyzer, formatter, linter
    • Nhóm legacy vận hành kém hiệu quả do thiếu các công cụ và quy trình này

Kết quả và tác động

  • Hồ sơ an toàn
    • Mục tiêu là tăng cường độ an toàn mà không cần thay đổi code legacy hiện có
    • Tập trung vào việc duy trì mã hiện có hơn là đáp ứng các yêu cầu của C++ hiện đại
  • Module
    • Được thiết kế để có thể nhập các tệp header dưới dạng module một cách đơn giản
    • Được thiết kế có tính đến khả năng tương thích với code legacy
  • Sự chia rẽ trong cộng đồng C++
    • Xung đột trong cộng đồng ngày càng sâu sắc do yêu cầu không khớp giữa nhóm hiện đại và nhóm legacy
    • Cách tiếp cận bảo thủ của ủy ban tiêu chuẩn C++ có vẻ là một nỗ lực nhằm xoa dịu những xung đột này

Góc nhìn thay thế

  • Các ý tưởng thay thế như Safe C++ không được chào đón trong cộng đồng
  • Có ý kiến chỉ trích rằng một số thành viên của ủy ban tiêu chuẩn bám vào các tiêu chuẩn thẩm mỹ cá nhân và kháng cự thay đổi

3 bình luận

 
aer0700 2024-11-27

Rust vẫn chưa thể được áp dụng vì hệ sinh thái phát triển GUI vẫn chưa có nhiều.
Mong là sẽ sớm có một framework GUI ổn để dùng với Rust...

 
ndrgrd 2024-11-26

Tôi không rõ liệu Rust có thể thay thế C++ hay không, nhưng
đúng là gần như không còn thấy các dự án C++ mới nữa...
Có vẻ như ủy ban C++ đã quyết định rằng hướng đi đúng là coi trọng những giá trị vốn có hơn là sự lột xác.

 
GN⁺ 2024-11-26
Ý kiến Hacker News
  • Mã C++ của Google thường không chạy được trên các phiên bản mới nhất, và trong nhiều trường hợp các lập trình viên cũng không có ý định sửa điều đó. Điều này là vì mã của Google đang mắc kẹt ở điểm trung gian giữa cũ và hiện đại

    • Mã C++ của Google có thể gây hỏng bộ nhớ do state machine và weak pointer thủ công
    • Xem việc Google rời khỏi hệ sinh thái C++ là điều tích cực
    • Cho rằng sự quan tâm của Google đối với hệ sinh thái Rust sẽ không mang lại tác động tích cực
  • Khuyên những người làm tiêu chuẩn C++ hãy ủng hộ định hướng hiện tại của C++ và bỏ qua những tiếng ồn trên mạng về tương lai của C++

    • Khuyến nghị những ai muốn kiểm tra vòng đời tĩnh hãy dùng Rust
    • Đề xuất các nhà thầu chính phủ nên dùng Rust
    • Cho rằng quy trình phát triển C++ hiện tại đang vận hành tốt
  • Lập luận rằng nhóm duy nhất còn dùng C++ sẽ là những nhóm có codebase legacy quá lớn để refactor

    • Những nhóm khác đã mất niềm tin vào WG21 đang chuyển sang ngôn ngữ mới
    • Nhắc đến việc Herb Sutter nói rằng thêm chú thích vòng đời vào C++ sẽ tạo ra một "lối thoát" sang các ngôn ngữ khác
  • Đánh giá hệ thống edition của Rust hoạt động rất tốt

    • Đề xuất rằng nếu C++ cũng có hệ thống như vậy, dù có thể bị giới hạn ở ranh giới module, thì đây vẫn có thể là cách khiến cả hai phe đều hài lòng
  • Lo ngại tin Herb Sutter rời Microsoft sẽ gây ảnh hưởng không tốt cho Microsoft

    • Đánh giá Herb là người đã dẫn dắt việc chấp nhận tiêu chuẩn C++ và nỗ lực vì một tầm nhìn tương lai tốt hơn
    • Nhắc đến việc std::span, vốn là đề xuất từ Microsoft, đã được chấp nhận nhưng không có kiểm tra phạm vi, và cho rằng rất cần những nỗ lực như của Herb
  • Nhấn mạnh rằng kiểm thử tự động là yếu tố chính phân biệt hai phe

    • Giải thích rằng trong các ứng dụng C++ legacy, nếu không có kiểm thử tự động thì thay đổi mã có thể làm hỏng ứng dụng
    • Cảnh báo rằng do đặc tính của C++, ngay cả những thay đổi mã trông vô hại cũng có thể gây ra vấn đề
  • Lập luận rằng yếu tố chính làm giảm sức hấp dẫn của C++ là sự thiếu vắng module

    • Đánh giá rằng nếu có module thì cộng đồng C++ đã có thể được hình thành
  • So sánh rằng Herb Sutter rất giỏi trong việc dẫn dắt thỏa hiệp, còn Google thì lại thúc đẩy chương trình nghị sự của riêng mình

  • Nhắc rằng các khách hàng có codebase quy mô lớn không muốn thay đổi dù chỉ 1% mã để đáp ứng các quy tắc nghiêm ngặt

    • Cho rằng nhiều công ty đang đầu tư thời gian để nâng cấp lên các tiêu chuẩn mới
  • Giải thích rằng Python và Javascript/Node/Typescript cũng tồn tại nhiều phe khác nhau

    • Đánh giá rằng Rust đã cố tránh các phe phái như vậy, nhưng đổi lại đường cong học tập trở nên cao hơn
    • Nhắc rằng Go đã cố ngăn phe phái và hướng tới được chấp nhận rộng rãi, nhưng cuối cùng vẫn phải đưa generics vào