Giới thiệu về ngôn ngữ C/C++
Trước C++, đã có C
Ngôn ngữ C được Dennis Ritchie phát triển vào năm 1972 tại phòng thí nghiệm Bell Telephone, chủ yếu là ngôn ngữ lập trình hệ thống (ngôn ngữ để viết hệ điều hành). Mục tiêu chính của Ritchie là tạo ra một ngôn ngữ tối giản dễ biên dịch, cho phép truy cập hiệu quả vào bộ nhớ, tạo ra mã hiệu quả và độc lập (không phụ thuộc vào các chương trình khác). Đối với một ngôn ngữ cấp cao, C được thiết kế để cung cấp cho lập trình viên nhiều quyền kiểm soát, đồng thời cho phép các nhà phát triển viết một chương trình có thể chạy trên các nền tảng khác nhau.
C cuối cùng trở nên hiệu quả và linh hoạt đến mức vào năm 1973, Ritchie và Ken Thompson đã viết lại hầu hết hệ điều hành Unix bằng C. Nhiều hệ điều hành trước đó đã được viết bằng hợp ngữ. Không giống như hợp ngữ, tạo ra các chương trình chỉ có thể chạy trên các CPU cụ thể, C có khả năng di động tuyệt vời, cho phép Unix dễ dàng được biên dịch lại trên nhiều loại máy tính khác nhau và đẩy nhanh quá trình áp dụng. C và Unix đã gắn bó với nhau và sự phổ biến của C một phần gắn liền với sự thành công của Unix như một hệ điều hành.
Năm 1978, Brian Kernighan và Dennis Ritchie đã xuất bản một cuốn sách có tên là “The C Programming Language”. Cuốn sách này, thường được gọi là K&R (theo họ của tác giả), cung cấp một thông số kỹ thuật không chính thức cho ngôn ngữ và trở thành một tiêu chuẩn thực tế. Khi cần khả năng di động tối đa, các lập trình viên sẽ tuân thủ các khuyến nghị trong K&R, vì hầu hết các trình biên dịch tại thời điểm đó đều được triển khai theo các tiêu chuẩn K&R.
Năm 1983, Viện Tiêu chuẩn Quốc gia Hoa Kỳ (ANSI) đã thành lập một ủy ban để thiết lập một tiêu chuẩn chính thức cho C. Năm 1989 (các ủy ban mất rất nhiều thời gian để làm bất cứ điều gì), họ đã hoàn thành và phát hành tiêu chuẩn C89, thường được gọi là ANSI C. Năm 1990, Tổ chức Tiêu chuẩn hóa Quốc tế (ISO) đã áp dụng ANSI C (với một vài sửa đổi nhỏ). Phiên bản C này được gọi là C90. Các trình biên dịch cuối cùng đã tuân thủ ANSI C/C90 và các chương trình mong muốn khả năng di động tối đa đã được mã hóa theo tiêu chuẩn này.
Năm 1999, ủy ban ISO đã phát hành phiên bản C mới có tên gọi không chính thức là C99. C99 đã áp dụng nhiều tính năng đã có trong trình biên dịch dưới dạng phần mở rộng hoặc đã được triển khai trong C++.
C++
C++ (phát âm là “see plus plus”) được Bjarne Stroustrup tại Bell Labs phát triển như một phần mở rộng của C, bắt đầu từ năm 1979. C++ bổ sung nhiều tính năng mới vào ngôn ngữ C và có lẽ được coi là siêu tập của C, mặc dù điều này không hoàn toàn đúng (vì C99 đã giới thiệu một số tính năng không có trong C++). Sự đổi mới đáng chú ý nhất của C++ so với C là nó hỗ trợ lập trình hướng đối tượng. Còn về “đối tượng” là gì và nó khác với các phương pháp lập trình truyền thống như thế nào, thì chúng ta sẽ đề cập đến điều đó trong các chương sau.
C++ đã được chuẩn hóa vào năm 1998 bởi ủy ban ISO. Điều này có nghĩa là ủy ban tiêu chuẩn ISO đã phê duyệt một tài liệu (gọi là tài liệu tiêu chuẩn) cung cấp mô tả chính thức về ngôn ngữ C++. Mục tiêu của việc chuẩn hóa là giúp đảm bảo rằng mã C++ hoạt động nhất quán trên các trình biên dịch và nền tảng khác nhau.
Một bản cập nhật nhỏ cho ngôn ngữ này đã được phát hành vào năm 2003 (có tên gọi không chính thức là C++03).
Năm bản cập nhật lớn cho ngôn ngữ C++ (được đặt tên không chính thức là C++11, C++14, C++17, C++20 và C++23) đã được thực hiện kể từ đó, mỗi bản đều bổ sung thêm chức năng. Riêng C++11 đã bổ sung một số lượng lớn các khả năng mới và được coi rộng rãi là phiên bản cơ sở mới của ngôn ngữ. Các bản nâng cấp trong tương lai cho ngôn ngữ này dự kiến sẽ được thực hiện sau mỗi ba năm hoặc lâu hơn.
Vì tên chính thức của các tiêu chuẩn được chấp thuận rất phức tạp (tên chính thức của C++20 là ISO/IEC 14882:2020), nên các tiêu chuẩn thường được gọi bằng tên không chính thức, bao gồm hai chữ số cuối của năm xuất bản (hoặc năm dự kiến xuất bản). Ví dụ, C++20 đề cập đến phiên bản ngôn ngữ được xuất bản vào năm 2020.
Triết lý của C và C++
Triết lý thiết kế cơ bản của C và C++ có thể được tóm tắt là “tin tưởng lập trình viên - trust the programmer” — điều này vừa tuyệt vời vừa nguy hiểm. C++ được thiết kế để cho phép lập trình viên có mức độ tự do cao để làm những gì họ muốn. Tuy nhiên, điều này cũng có nghĩa là ngôn ngữ này thường sẽ không ngăn bạn làm những việc vô nghĩa, vì nó sẽ cho rằng bạn đang làm như vậy vì một lý do nào đó mà nó không hiểu. Có khá nhiều cạm bẫy mà các lập trình viên mới có thể mắc phải nếu không biết. Đây là một trong những lý do chính tại sao việc biết những gì bạn không nên làm trong C/C++ cũng quan trọng như việc biết những gì bạn nên làm.