Xem thêm

Orthodox C++: Giới hạn C++ đơn giản hóa cho sự dễ hiểu và xây dựng

Huy Erick
Hình ảnh: Orthodox C++, nguồn: nanado.edu.vn Cùng với sự phát triển của C++, chúng ta đã chứng kiến sự ra đời của Modern C++, với nhiều tính năng mới và hứa hẹn mang lại hiệu...

Orthodox C++ Hình ảnh: Orthodox C++, nguồn: nanado.edu.vn

Cùng với sự phát triển của C++, chúng ta đã chứng kiến sự ra đời của Modern C++, với nhiều tính năng mới và hứa hẹn mang lại hiệu suất cao hơn. Tuy nhiên, Orthodox C++ đã đến để phản đối xu hướng này. Nó là một tập con nhỏ của C++, giảm bớt sự phức tạp và chỉ tập trung vào những gì thực sự cần thiết.

Trong những năm 1990, chúng ta đã là những "hipster" C++ đương đại, sử dụng các tính năng mới nhất và khuyên mọi người cũng nên làm vậy. Nhưng theo thời gian, chúng ta nhận ra việc sử dụng một số tính năng ngôn ngữ chỉ vì chúng có sẵn không hề cần thiết, hoặc những tính năng chúng ta đã sử dụng lại không tốt (như RTTI, exceptions và streams), hoặc chúng gây phức tạp không đáng có cho mã nguồn. Nếu bạn cho rằng điều này vô lý, hãy chờ thêm vài năm nữa và bạn sẽ ghét Modern C++ ("Tại sao tôi không dành thời gian với Modern C++ nữa" - bài viết trên LinkedIn đã được lưu trữ).

Việc viết mã nguồn giới hạn theo Orthodox C++ sẽ dễ hiểu hơn, đơn giản hơn và có thể dựng được với các trình biên dịch cũ hơn. Dự án viết bằng Orthodox C++ sẽ được các dự án C++ khác chấp nhận hơn, vì tập con được sử dụng bởi Orthodox C++ khó có thể vi phạm sự ưu thích tập con C++ của người sử dụng.

#include  int main()  {     printf("Xin chào, thế giới\n");     return 0;  }

C++ giống như C, nhưng tốt hơn

C-like C++ là một khởi đầu tốt, nếu mã nguồn không yêu cầu sự phức tạp hơn, hãy tránh thêm những phần phức tạp của C++. Tổng quát thì mã nguồn nên dễ đọc đối với bất kỳ ai đã quen thuộc với ngôn ngữ C.

Exceptions - Đừng sử dụng chúng

Exception handling là tính năng duy nhất của C++ yêu cầu hỗ trợ mạnh mẽ từ hệ thống runtime phức tạp, cũng như có chi phí chạy thời gian ngay cả khi không sử dụng (gây sự kiện ẩn phụ cho mỗi khởi tạo, hủy bỏ đối tượng, và trạng thái nhập/xuất thực thi khối try-catch). Hơn nữa, các chuẩn xác định exception của C++ không được thi hành vào thời gian biên dịch, do đó bạn ngay cả không biết bạn đã quên xử lý một số trường hợp lỗi nào đó! Về mặt phong cách, cách xử lý lỗi theo kiểu exception không phù hợp với phong cách xử lý lỗi trả về mã trong ngôn ngữ C, điều này tạo ra sự khác biệt thực sự trong phong cách lập trình vì một lượng lớn mã C++ buộc phải gọi vào các thư viện C cơ bản.

RTTI - Đừng sử dụng nó

Đừng sử dụng RTTI (Run-time Type Information).

Stream IO - Sử dụng hàm printf

Đừng sử dụng Stream IO như iostream, stringstream, hãy sử dụng hàm printf thay thế.

Không sử dụng STL liên quan đến quản lý bộ nhớ

Hãy cẩn trọng khi sử dụng các thành phần STL cấp phát bộ nhớ, trừ khi bạn không quan tâm đến quản lý bộ nhớ. Hãy tìm hiểu thêm từ diễn giả Andrei Alexandrescu trong bài diễn thuyết "std::allocator Is to Allocation what std::vector Is to Vexation" tại CppCon 2015, và tại sao nhiều hãng phát triển game AAA không chọn STL để biết thêm thông tin.

Sử dụng metaprogramming một cách hợp lý

Hãy cẩn trọng với việc sử dụng metaprogramming một cách quá mức vì mục đích học thuật. Chỉ sử dụng nó khi cần thiết và khi nó giúp giảm phức tạp của mã nguồn.

Đừng sốt ruột với các tính năng mới

Hãy cảnh giác với các tính năng mới được giới thiệu trong chuẩn C++ hiện tại, tốt nhất là chờ đợi các cải tiến của chúng trong phiên bản chuẩn kế tiếp. Ví dụ, từ C++11, constexpr trở nên sử dụng được trong C++14. Hãy kiên nhẫn đợi những cải tiến của các tính năng đó trong chuẩn tiếp theo. Đừng làm điều này nếu bạn đang phát triển dự án mã nguồn mở, vì bạn không tạo ra điều gì mà người khác có thể sử dụng.

Cập nhật mới nhất: Kể từ ngày 14 tháng 1 năm 2022, Ủy ban Orthodox C++ đã phê duyệt việc sử dụng C++17.

Orthodox C++ trong thực tế

Orthodox C++ không chỉ là một lý thuyết, nó đã được thể hiện trong nhiều dự án thực tế và thành công, bao gồm:

  • Any C source that compiles with C++ compiler.
  • DOOM 3 BFG
  • Qt (khi được xây dựng không sử dụng rtti và exceptions)
  • dear imgui
  • bgfx
  • TheForge
  • Oryol
  • Network Next SDK

Orthodox C++ mang đến sự đơn giản và sự dễ hiểu cho mã nguồn C++, giúp chúng ta tập trung vào những gì thực sự cần thiết. Hãy cùng thử áp dụng Orthodox C++ vào các dự án của bạn và cảm nhận sự khác biệt!

1