Làm thế nào để ủy ban tiêu chuẩn C ++ kiểm tra ý tưởng thiết kế của họ?


29

Ủy ban C ++ có kiểm tra các thông số thiết kế mới của họ với một số trình biên dịch nguyên mẫu trước khi phát hành một tiêu chuẩn mới không? Hay họ phát hành một tiêu chuẩn, thực tế, chỉ là lý thuyết cho đến khi các trình biên dịch lớn thực hiện nó?



4
Boost đóng vai trò là nguyên mẫu cho một số lượng lớn các cải tiến thư viện. Ví dụ boost::shared_ptr=> std::shared_ptr.
MSalters

6
Tôi mong đợi một "họ không" đơn giản.
Ngày

@MSalters: Boost cũng đã hoạt động như một nguyên mẫu cho một số lượng cải tiến ngôn ngữ cốt lõi (ví dụ: boost.lambda>> C ++ 11 biểu thức lambda).
Jerry Coffin

Câu trả lời:


26

Các Ủy ban Tiêu chuẩn ++ C có văn bản dưới luật và các quy tắc, nhưng hầu hết trong số này là tập trung vào cấu trúc của tổ chức, làm thế nào để trình đề xuất, bỏ phiếu, công bố tiêu chuẩn, vv và không quá nhiều vào các chi tiết kỹ thuật của tiêu chuẩn riêng của mình hoặc làm thế nào nó có thể được thử nghiệm.

Không có yêu cầu chính thức để "thử nghiệm" một tính năng hoặc thiết kế của nó theo như tôi biết. C ++ cũng hơi độc đáo ở chỗ không có tham chiếu hoặc triển khai "chính" (ví dụ: Microsoft CLR, Oracle JDK, Zend PHP). Tuy nhiên, các thành viên ủy ban bao gồm nhiều tổ chức có kiến ​​thức sâu về ngôn ngữ và trình biên dịch. Ví dụ: nếu bạn theo liên kết trước đó, bạn sẽ thấy các đại diện của Microsoft và Intel, cả hai đều có trình biên dịch C ++ được tôn trọng. Red Hat và một vài công ty khác đóng góp cho GCC cũng tham gia.

Khi đề xuất một tính năng mới, các thành viên ủy ban đã có một ý tưởng khá hay là liệu nó có khả thi hay không, nếu nó có thể mâu thuẫn với các tính năng khác hoặc khiến ngữ pháp trở nên mơ hồ theo cách làm phức tạp việc phân tích cú pháp một cách không cần thiết. ( đây là một câu hỏi hay về ngữ pháp của C ++ )

Câu trả lời ngắn gọn là "không, ủy ban không yêu cầu thử nghiệm thiết kế của họ bằng cách sử dụng nguyên mẫu." Tuy nhiên, không có nhiều nhu cầu bởi vì các thành viên của ủy ban là các chuyên gia về C ++, người hiểu tất cả các chi tiết tốt ở mức độ mà đại đa số các lập trình viên không làm được. Hãy nhớ rằng, những người này là kiến trúc sư ngôn ngữ là chuyên gia về lý thuyết ngôn ngữ và thiết kế trình biên dịch.

Với sự tham gia của các nhà cung cấp trình biên dịch trong quá trình, có khả năng một hoặc nhiều trong số họ có thể tạo ra một tính năng mới, nhưng một lần nữa, không có yêu cầu chính thức nào về điều này cũng không phải là điều tôi đã đọc về các tài liệu có sẵn công khai từ Ủy ban C ++.

Họ cũng có xu hướng rất bảo thủ, tăng dần các tính năng mới có nhu cầu trong thế giới thực mà không chỉ định số lượng lớn các tính năng mới có thể gây rủi ro. Trong thực tế trong những năm gần đây, họ đã thêm các tính năng mới tồn tại dưới dạng tiện ích mở rộng độc quyền hoặc thư viện nguồn mở đã hoạt động trong thế giới thực. Ví dụ, C ++ 11 và C ++ 14 kết hợp các phần của Boost , đã được thử nghiệm trong thế giới thực trong nhiều trình biên dịch và môi trường thực thi. Không cần phải kiểm tra một cái gì đó đã được thử nghiệm.


5
ConceptGCCConceptClang là hai ví dụ về trình biên dịch (hay đúng hơn là các trình biên dịch) được tạo rõ ràng để tạo nguyên mẫu và thu được kinh nghiệm thực tế với tính năng ngôn ngữ phức tạp. Các khái niệm cũng là một ví dụ về cách các tính năng ngôn ngữ kỹ lưỡng được thiết kế trong C ++: Các khái niệm đã có từ năm 1998, đầu tiên là một ý tưởng không chính thức để nói về Mẫu C ++, sau đó vào năm 2006 như một tính năng ngôn ngữ được đề xuất bởi chính Bjarne và cũng được triển khai trong ConceptGCC kể từ đó Họ có thể ...
Jörg W Mittag

3
Kết thúc trong C ++ 17, có nghĩa là họ sẽ trưởng thành trong khoảng 10 năm như một triển khai và 20 năm như một ý tưởng.
Jörg W Mittag

2
Điều này chủ yếu là sai, tôi nghĩ. Các tính năng mới thường đòi hỏi một thực hiện đầu tiên. Một lần điều này đã không xảy ra, chúng tôi đã xuất khẩu.
isanae

5
Đoạn cuối là (nói một cách nhẹ nhàng) vô nghĩa. Ủy ban C rất bảo thủ, nhưng C ++ luôn bổ sung tất cả các loại công cụ mới với rất ít sự cân nhắc về những gì nó gây ra cho ngôn ngữ hoặc liệu nó có thực sự giải quyết được vấn đề mà mọi người muốn giải quyết hay không.
R ..

1
@R .. Tôi không đồng ý. C ++ 11 là một sự bất thường, nhưng nó bao gồm rất nhiều thứ đã tồn tại (ví dụ, xem bình luận Boost của tôi). Trong phần lớn cuộc đời của C ++, nó đã phát triển rất chậm, đó là một trong những phàn nàn lớn mà nhiều nhà phát triển có về ngôn ngữ.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.