Chủ Nhật, 12 tháng 9, 2010

Chuẩn C++ mới có gì mới? (Phần II)

Chuẩn C++ mới có gì mớiMở rộng thư viện

Standard Library của C++0x được mở rộng rất nhiều. Dưới đây chỉ liệt kê những cái nổi bật.

Một thư viện mới để thao tác "regular expression" được định nghĩa trong header . Không hỗ trợ regular expression là thiếu sót đáng kể của C++, đặc biệt đối với giới lập trình web, những người thiết kế XML parser và các ứng dụng xử lý chuỗi khác.

Trở lại năm 1997, ràng buộc thời gian đã không cho phép Ủy ban Chuẩn đưa hash table vào chuẩn C++ đầu tiên. Chuẩn C++ mới khắc phục điều này bằng cách thêm 4 container: std::unordered_map, std::unordered_multimap, std::unordered_set và std::unordered_multiset.

Có lẽ mở rộng Standard Library nổi bật nhất là các lớp con trỏ thông minh: std::tr1::shared_ptr và người anh em ít được biết đến, std::tr1::weak_ptr.

Về thuật toán, 11 thuật toán mới được đưa ra, một số trong số đó sửa các lỗi trong chuẩn C++98, trong khi một số khác làm đơn giản hóa các tác vụ thông dụng. Có thể kể một số như:

• all_of( first, last, pred): Trả về giá trị true nếu tất cả phần tử trong dãy thỏa thuộc tính pred.

• any_of( first, last, pred): Trả về true nếu có bất kỳ phần tử trong dãy thỏa pred.

• copy_n( first, n, result): Sao chép n phần tử vào result.

• Iota( first, last, value): Với từng phần tử trong dãy, hàm này gán giá trị value và tăng trước value bằng ++value.

• None_of( first, last, pred): Trả về giá trị true nếu không có phần tử nào trong dãy thỏa pred.

Cuối cùng, các template phạm vi (range) của C++0x gắn cặp với "interator" (lặp vòng), nhờ vậy đơn giản đáng kể các tác vụ tuần tự và làm gọn nhiều thuật toán phổ biến.

Đường dài phía trước
C++0x không phải là ngôn ngữ lập trình mới. Lập trình viên C++ không phải lo vì chuẩn mới sẽ tương thích 100% với chuẩn C++ hiện tại, theo lời giáo sư Bjarne Stroustrup, người tạo ra C++ và là thành viên của Ủy ban ISO C++.

Đến giờ hẳn những người quan tâm đến C++ đều đã biết tin về cuộc họp tại Frankfurt (Đức) hồi tháng 7: Ủy ban ISO C++ đã biểu quyết gỡ bỏ "concept" khỏi C++0x vì lý do "chưa hoàn thiện" . Điều này gây thất vọng cho nhiều người, trong đó có giáo sư Bjarne Stroustrup, người rất tâm huyết với "concept". Việc hoàn thiện ‘concept’ có thể phải mất vài năm.

Ngay cả không có "concept" thì C++0x vẫn là cải tiến đáng kể so với chuẩn C++ hiện tại (C++98). Theo kế hoạch thì Ủy ban Chuẩn sẽ nhóm họp tiếp vào cuối năm nay để phê chuẩn chính thức và đưa ra sử dụng chuẩn C++ mới (và C++0x sẽ thành C++09). Tuy nhiên đến thời điểm thực hiện bài viết này vẫn chưa có động tĩnh gì. Nhiều khả năng chúng ta sẽ có C++10 hay C++0A (nếu Ủy ban Chuẩn thích dùng số hệ thập lục phân!).


Nguyễn Lê

0 nhận xét:

Đăng nhận xét