Search…

Ngôn Ngữ C++ - Lịch Sử Hình Thành và Phát Triển

18/09/20208 min read
Lịch sử phát triển và lý do tại sao C++ lại là nền tảng cho tất cả lập trình viên.

Tổng quan về C++

C++ là một ngôn ngữ lập trình đa dụng –  có thể dùng C++ để lập trình cho các hệ thống lớn, lập trình hệ điều hành cho đến các ứng dụng, game hay thậm chí có thể dùng C++ để lập trình web. Với C++, có thể thấy được sự mềm dẻo của nó qua việc C++ hỗ trợ cho các tính năng cao cấp như lập trình hướng đối tượng, lập trình generic trong khi vẫn cung cấp khả năng can thiệp sâu vào bên trong bộ nhớ máy tính thông qua con trỏ.

C++ là ngôn ngữ biên dịch – tùy thuộc vào các hệ thống khác nhau có thể có các trình biên dịch tương ứng như với Windows sẽ có CL (nằm trong bộ IDE Visual Studio) trong khi đó với Linux có gcc / g++.

C++ được chuẩn hóa bởi Tổ chức tiêu chuẩn hóa quốc tế (International Organization for Standardization – ISO), phiên bản tiêu chuẩn mới nhất được phê duyệt và công bố bởi ISO là ISO/IEC 14882:2011 vào tháng 9 năm 2011 hay còn được biết đến với tên C++11.

Theo các tài liệu ghi chép lại thì C++ bước đầu được chuẩn hóa vào năm 1998 với tên gọi ISO/IEC 14882:1998 (hay còn gọi là C++98). Sau đó được cập nhật với tên gọi ISO/IEC 14882:2003 – C++03. Và đến nay được thay thế dần bởi C++11 với các tính năng cũng như các thư viện mới. Bạn đọc có thể tham khảo các tính năng này qua loạt bài về C++11.

Tính đến thời điểm hiện tại, có rất nhiều ngôn ngữ lập trình hiện đại chịu ảnh hưởng bởi ngôn ngữ C++, trong đó có thể kể đến như: Java, C#, PHP, Lua, Perl, …

Lịch sử hình thành

Bjarne Stroustrup – cha đẻ của ngôn ngữ lập trình C++
Bjarne Stroustrup – cha đẻ của ngôn ngữ lập trình C++

Bjarne Stroustrup, một nhà khoa học máy tính người Đan Mạch, đã bắt đầu làm việc với tiền thân của ngôn ngữ C++ - "C with Classes" vào năm 1979.

Động lực để ông xây dựng một ngôn ngữ lập trình mới bắt nguồn từ kinh nghiệm của ông trong quá trình làm luận án tiến sĩ. Stroustrup thấy được rằng Simular – tên của 2 ngôn ngữ lập trình mô phỏng, Simula I và Simula 67, được phát triển vào thập niên 60 – có những tính năng rất hữu ích cho việc phát triển các phần mềm lớn, tuy nhiên bản thân ngôn ngữ này lại quá chậm trong thực tế. Trong khi đó BCPL – Basic Combined Programming Language – có tốc độ thực thi nhanh nhưng quá thấp cấp nên không phù hợp trong việc phát triển các phần mềm lớn.

Khi Stroustrup bắt đầu làm việc tại phòng thí nghiệm AT & T Bell, ông gặp vấn đề trong việc phân tích nhân UNIX trên phương diện tính toán phân tán. Áp dụng những kinh nghiệm trong luận án tiến sĩ, Stroustrup bổ sung các tính năng giống Simular cho ngôn ngữ C và gọi nó là C with classes. Sở dĩ ngôn ngữ C được chọn vì tính đa dụng, hiệu năng cao, tính linh động và phổ biến của nó. Cùng với C và Simular, C++ cũng chịu ảnh hưởng bởi một số ngôn ngữ khác như ALGOL 68, Ada, CLU và ML.

Ban đầu, các tính năng như class, derived class, strong typing, inlining và default argument (đối số mặc định) được thêm vào ngôn ngữ C thông qua CpreC with classes compiler.

Sau đó vào năm 1983, C with classes được đổi tên thành C++ (++ là toán tử tăng dần trong C). Các tính năng mới được thêm vào bao gồm: virtual functions (hàm ảo), function overloading (nạp chồng hàm) và operator overloading (nạp chồng toán tử), references (kiểu tham chiếu), constants (hằng số), type-safe free-store memory allocation (new/delete), cải tiến việc kiểm tra kiểu dữ liệu và thêm tính năng chú thích trong code sử dụng hai dấu chéo ngược liền kề ( // ) tương tự như ngôn ngữ BCPL; cũng như phát triển một trình biên dịch phù hợp cho những cải tiến này của ngôn ngữ C++ - Cfront.

Năm 1985, phiên bản đầu tiên của cuốn sách The C++ Programming Language được xuất bản và nghiễm nhiên trở thành tài liệu tham chiếu của ngôn ngữ này mặc dù chưa chính thức được chuẩn hóa. Cũng trong năm này, phiên bản thương mại đầu tiên của C++ được phát hành vào tháng 10.

Năm 1989, C++ 2.0 được công bố và theo sau đó là phiên bản thứ hai của The C++ Programming Language được phát hành vào năm 1991. Trong bản cập nhật này, các tính năng sau được thêm vào: multiple inheritance (đa kế thừa), abstract classes (lớp thuần ảo), static member functions, const member functions và protected members.

Năm 1990, cuốn sách The Annotated C++ Reference Manual được xuất bản, tạo tiền đề cho việc chuẩn hóa ngôn ngữ C++ sau này. Cũng trong thời gian này, C++ được bổ sung các tính năng: templates, exceptions (xử lý ngoại lệ), namespaces, các phương pháp casting mới và kiểu dữ liệu boolean.

Gần đây nhất, vào năm 2011, C++11 được phát hành với nhiều cải tiến đáng kể như việc thêm nhiều tính năng mới cũng như mở rộng các thư viện hỗ trợ (so với C++98) cùng với kế hoạch phát triển trong giai đoạn 2014 – 2017.

Về tên gọi C++

Theo Stroustrup thì:

The name signifies the evolutionary nature of the changes from C

Tên gọi C++ ở đây ám chỉ việc đó là sự tiến hóa từ ngôn ngữ C.

Tên gọi này được đặt ra bởi Rick Mascitti – cũng là một nhà khoa học máy tính – vào khoảng giữa năm 1983 và được sử dụng lần đầu tiên vào tháng 12 năm 1983.

Tên C++ được bắt nguồn từ toán tử ++ trong ngôn ngữ C, mang hàm ý tăng giá trị của một biến, cũng như việc sử dụng toán tử + là một cách đặt tên ám chỉ việc nâng cấp một chương trình.

Về tên gọi C++, có một câu chuyện đùa như thế này. Như đã biết, "++" là toán tử tăng giá trị của một biến; với toán tử này có thể đặt ở hai vị trí – tiền tố và hậu tố.

  • Ở vị trí tiền tố (ví dụ ++x): giá trị của biến x được thay đổi trước khi tham gia tính toán trong biểu thức.
  • Ở vị trí hậu tố (ví dụ x++): giá trị của biến x được sử dụng để tính toán sau đó mới được tăng lên khi biểu thức hoàn tất.

Vậy giả sử có 2 biến x và y có giá trị bằng nhau; khi xét biểu thức so sánh x++ == y thì kết quả trả về sẽ là true (biểu thức đúng) cho dù sau khi xảy ra biểu thức, biến x sẽ lớn hơn y.

Trở lại ngôn ngữ C++, hiển nhiên với cách viết như vậy thì toán tử "++" được đặt ở vị trí hậu tố. Do đó nếu so sánh giữa C++ với C thì C++ cũng chỉ bằng C. Vì vậy nếu muốn chỉ nâng cấp của C++ so với C thì có lẽ ngôn ngữ này nên được đặt là: ++C.

Trong quá trình phát triển của ngôn ngữ C++, ban đầu nó được biết đến là "new C", sau đó là "C with classes" trước khi lấy C++ làm tên cuối cùng.

Quá trình chuẩn hóa

C++ được chuẩn hóa bởi tổ chức ISO - JTC1/SC22/WG21. Tính đến thời điểm viết bài này thì đã có bốn phiên bản C++ được công bố. Bạn đọc có thể tham khảo theo bảng sau:

NĂM TÊN TIÊU CHUẨN TÊN THƯỜNG GỌI
1998 ISO/IEC 14882:1998 C++98
2003 ISO/IEC 14882:2003 C++03
2007 ISO/IEC TR 19768:2007 C++07/TR1
2011 ISO/IEC 14882:2011 C++11
2014 ISO/IEC 14882:2014 C++14
2017 đang được xác định C++17

Năm 1998, C++ được chuẩn hóa lần đầu tiên với tên gọi ISO/IEC 14882:1998 (còn được biết đến là C++98). Đến năm 2003, một tiêu chuẩn mới được phát hành nhằm chỉnh sửa lại những lỗi đã được phát hiện trong phiên bản C++98 - ISO/IEC 14882:2003.

Năm 2005, "Library Technical Report 1" (TR1) – một báo cáo kĩ thuật – được công bố. Mặc dù đây không phải là một phần của tiêu chuẩn C++, báo cáo này quy định một số phần mở rộng (extensions) cho thư viện chuẩn.

Đến năm 2011, C++11 được chấp thuận và công bố vào ngày 12 tháng 8 năm 2011 với tên gọi ISO/IEC 14882:2011 với rất nhiều cải tiến về mặt tính năng cũng như sử dụng.

Phần mở rộng của C++11, C++14 (hay còn gọi là C++1y) tập trung vào việc sửa những lỗi đã tồn tại trong phiên bản C++11. Phiên bản này đã được công bố vào tháng 8 năm 2014.

Sau C++1y, C++17 được lên kế hoạch phát hành vào năm 2017. Toàn bộ quá trình phát triển được tóm gọn theo biểu đồ dưới đây:

ss_2.png

Lời kết

C++ là một trong ít ngôn ngữ mà có thể đảm nhiệm được rất nhiều vai trò trong lập trình: từ lập trình ứng dụng, lập trình web cho đến việc lập trình cho các hệ thống lớn và rất lớn. C++ cho phép lập trình viên sử dụng những kĩ thuật cao cấp như lập trình hướng đối tượng, template, ... mà vẫn có thể linh động cho phép can thiệp vào sâu bộ nhớ bên dưới.

Chính vì lý do đó, mặc dù ngôn ngữ C++ có "tuổi" khá cao nhưng nó vẫn đóng một vai trò cực kì quan trọng trong thế giới máy tính. Và cũng dễ hiểu vì sao C++ được chọn làm nền tảng cho lập trình viên.

Tham khảo

  • http://en.wikipedia.org/wiki/C%2B%2B – 27/1/2015
  • http://en.wikipedia.org/wiki/Simula – 27/1/2015
  • http://en.wikipedia.org/wiki/ISO/IEC_JTC_1/SC_22 – 27/1/2015
  • http://en.wikipedia.org/wiki/C%2B%2B_Technical_Report_1 – 27/1/2015
  • https://isocpp.org/ – 27/1/2015
IO Stream

IO Stream Co., Ltd

30 Trinh Dinh Thao, Hoa Thanh ward, Tan Phu district, Ho Chi Minh city, Vietnam
+84 28 22 00 11 12
developer@iostream.co

383/1 Quang Trung, ward 10, Go Vap district, Ho Chi Minh city
Business license number: 0311563559 issued by the Department of Planning and Investment of Ho Chi Minh City on February 23, 2012

©IO Stream, 2013 - 2024