2010-08-03 13 views
18

Tôi hiếm khi/hiếm khi sử dụng C++ trong thập kỷ qua, và bây giờ có vẻ như tôi sẽ làm điều gì đó trong đó một lần nữa. Tôi đang mong chờ nó, nhưng phải tự hỏi nó đã thay đổi như thế nào kể từ khi tôi sử dụng nó lần cuối.C++ đã thay đổi như thế nào trong thập kỷ qua?

Có bất kỳ trang web tốt/ngắn gọn, bài đăng trên blog hoặc thậm chí cả sách về cách C++ đã thay đổi trong thập kỷ qua không?

Xin lưu ý câu hỏi này liên quan đến ngôn ngữ cũng như các công cụ hoặc bất kỳ thông tin bổ sung nào về cách làm việc trong C++. Cụ thể là tôi đang làm việc trong Windows, sử dụng VC++ 2008.

+4

Bạn đang hỏi về tiêu chuẩn hiện tại, trong trường hợp đó câu trả lời là "không nhiều" hoặc tiêu chuẩn sắp tới, trong trường hợp đó câu trả lời là "khá nhiều". Điều tốt nhất trong trường hợp thứ hai là kiểm tra trang web của Stroustrup để có mô tả tốt về các tính năng mới. –

+0

Tôi hỏi về tiêu chuẩn hiện tại (thực sự là của VS2008) –

+1

Nó bắt đầu trông giống như perl chỉ phức tạp hơn. – msw

Trả lời

17

Trong khi tiêu chuẩn chính thức không thay đổi nhiều trong thập kỷ qua, hay như vậy, có một số điều quan trọng đã xảy ra:

  • trong khi nó không phải là một tiêu chuẩn chính thức nào, một tiêu chuẩn mới sắp tới (thường được gọi là C++ 0x) là 'quanh góc'. GCC và MSVC 2010 đã kết hợp các bộ phận quan trọng của tiêu chuẩn mới đó, nhưng tôi không chắc chắn bao nhiêu là sử dụng phổ biến.
  • Boost library đã trở thành người chơi chính trong việc cung cấp hỗ trợ bổ sung cho ngôn ngữ - đến mức nó ảnh hưởng đáng kể đến các kỹ thuật lập trình chuẩn mới, có thể vượt qua các kỹ thuật tái sử dụng mã 'kế thừa' cũ hơn (điều này có thể đã được tiến hành khi bạn xem xét C++ lần cuối tùy thuộc vào các thực hành mà cửa hàng của bạn có thể đang sử dụng vào thời điểm đó).
  • trình biên dịch (và đặc biệt của Microsoft) đã đi một chặng đường dài trong việc tuân thủ các tiêu chuẩn
+0

+1 Cảm ơn, tôi chưa bao giờ nghe nói đến Thư viện Boost. Trong khi các mẫu được sử dụng trong ATL & STL, tôi nghĩ nhiều nhà phát triển thấy chúng quá phức tạp. Tôi nghĩ chúng thật tuyệt vời, vì vậy tôi rất vui khi biết rằng chúng đã trở nên phổ biến hơn rất nhiều. –

+7

@John: Boost là một phần HUGE của C++ hiện đại. Hầu như tất cả các dự án nghiêm túc đều phụ thuộc vào Boost. – Puppy

+1

Vâng, tôi sử dụng Boost trong một trong các dự án của tôi (cho thư viện số ngẫu nhiên), nhưng đối với nó là HUGE, tôi sẽ nói khá diffuse và rất xấu tài liệu. Vài bit thực sự quan trọng bây giờ là một phần của C++ 0x. –

11

Sự thay đổi lớn nhất là tiêu chuẩn C++ thực sự hoạt động trong tất cả các trình biên dịch chính hiện nay. Những thứ như các mẫu thành viên được sử dụng để được iffy.

+0

và Thư viện mẫu chuẩn thực sự là một tiêu chuẩn có thể dựa vào hầu hết các nhà cung cấp trình biên dịch chính. –

+3

Vâng, Thư viện chuẩn có thể. –

2

VS2008 đi kèm với TR1, một bổ sung lớn cho tiêu chuẩn có chứa những thứ như mảng tĩnh, con trỏ đếm tham chiếu và tương tự. Ngoài ra, sự thay đổi lớn nhất chỉ là trình biên dịch biên dịch tiêu chuẩn định nghĩa như thế nào.

+0

Cảm ơn bạn đã chỉnh sửa liên kết. – Puppy

10

Bản thân ngôn ngữ không thay đổi nhiều. Tuy nhiên, các thực hành tốt nhất và thành ngữ đã làm rất nhiều.

Tôi đề nghị bạn hãy xem cuốn sách "C++ Coding Standards: 101 Rules, Guidelines, and Best Practices" của Herb Sutter và Andrei Alexandrescu để xem C++ hiện đại trông như thế nào hiện nay.

+0

+1: Tôi cũng muốn viết cùng một câu trả lời - thay đổi trong "tư duy" của các nhà phát triển là điều quan trọng nhất. – IanH

9

Tôi nghĩ rằng một trong những thay đổi lớn nhất là một trong những tư duy: (! Cuối cùng) nhiều người có nhận ra rằng mẫu là vô cùng mạnh mẽ và không cần phải chậm, và sử dụng STL và tăng cường phổ biến rộng rãi hơn 10 năm trước.

+6

Và có thể trong 10 năm nữa, mọi người sẽ ngừng gọi Thư viện chuẩn "STL". –

+0

+1 - Tôi ước bạn sẽ nói điều đó với những người làm việc, những người đã trải qua 10 năm FUD cũ về các mẫu và ngoại lệ. –

+1

Bjarne Stroustrup vẫn đề cập đến nó như là STL nhiều lần trên trang web của mình, vì vậy tôi nghĩ rằng đó là công bằng để nói rằng nó khá khắc. Cá nhân, miễn là mọi người sử dụng nó, tôi không thể quan tâm đến những gì họ gọi nó :-) –

2

Một câu hỏi thú vị khi tôi sắp tới kỷ niệm 10 năm lập trình C++ cho tiền xu.

Quan điểm cá nhân của tôi là tôi hơi cảnh giác - nhưng chỉ một chút - vì tôi chưa từng thấy tất cả (mặc dù tôi nghĩ mình có thể đoán nó như thế nào) - chú ý đến internet buồng vang. Đó là sự thật, một số người đã đi đầy đủ cho phong cách hiện đại của C + +, với tất cả mọi thứ hoàn toàn mẫu và sử dụng các kỹ thuật hiện đại để có được trình biên dịch làm điều Prolog của nó để có hiệu quả tốt nhất. Tuy nhiên điều này chắc chắn không phải là phổ quát, và, trong chính, mã C++ tôi thấy ngày nay là rất giống nhau trong hầu hết các cách để mã C++ tôi thấy mười năm trước đây.Sẽ là một ý tưởng hay khi đánh vào thời trang hiện đại, bởi vì một số thứ hiếm hoi cách đây mười năm (con trỏ thông minh, sử dụng thường xuyên RAII, thùng chứa và thư viện chuẩn) hiện nay phổ biến hơn. Nhưng trừ khi bạn chắc chắn rằng mã bạn sẽ làm việc với được festooned với các mẫu và thúc đẩy và như vậy, bạn đứng một cơ hội tốt để làm việc với một cái gì đó là trái tim rất giống như những gì bạn sử dụng để làm việc với.

Có thể không thể hiểu được điều đó, nhưng điều đó không làm cho nó kém hiệu quả hơn: bất kể trình độ kỹ năng, nhiều người không quan tâm đến C++ hiện đại. Một số, bởi vì họ không hiểu nó. Một số, bởi vì họ hiểu nó. Và đối với một số người, có lẽ "chăm sóc" thậm chí không phải là từ đúng - họ thậm chí không biết nó tồn tại. Và như bạn có thể mong đợi những người này tất cả các mã cho phù hợp.

Có lẽ tôi di chuyển trong vòng kết nối sai, nhưng kinh nghiệm của tôi là những người không hoặc không thể hoặc không viết mã theo phong cách hiện đại cao hơn những người có thể thực hiện bởi một số lợi nhuận lớn. Và những người có thể làm, thường thì không, bởi vì họ đông hơn. Mã của họ được viết lại, hoặc bỏ qua, cho đến khi họ bắt đầu viết những thứ mà người khác có thể hiểu được. Vì vậy, có lẽ điều này là tốt, hoặc có thể điều này là xấu - nó hầu như không liên quan, theo quan điểm của tôi, bởi vì kết quả là như nhau: rằng nếu kinh nghiệm của bạn hóa ra là bất cứ thứ gì giống tôi, bạn có cơ hội gặp phải mã ngày hôm nay khá giống với những gì bạn đã thấy trong năm 1999.

PS Nicolai Josuttis đã viết một vài cuốn sách mà chuyên gia mẫu cư trú của chủ nhân cuối cùng của tôi có vẻ thích. Ngoài ra hãy thử Modern C++ Design (Alexandrescu) - có thể là một chút ngày nay, nhưng nó giải thích nhiều nguyên tắc. Herb Sutter's Exceptional C++ cho, như tôi nhớ lại từ một skim của một bản sao làm việc, một cái nhìn tổng quan tốt về một số kỹ thuật hiện đại mà không đi quá hạt trên mặt trước mẫu. Và dĩ nhiên, boost thể hiện tất cả những thứ như thế này (và nhiều hơn thế nữa - sau đó là một số vật liệu tiền thưởng) được đưa vào thực hành trên một loạt các trình biên dịch.

(Hy vọng rằng danh sách trên không phải là quá đề ngày;. Như câu trả lời của tôi có thể đề nghị, tôi đã tìm thấy ít nhiều của một nhu cầu để theo kịp cập nhật với các xu hướng mới nhất trong C++ hơn tôi sẽ không bao giờ có dự kiến)

+3

Nếu con trỏ thông minh và RAII là hiếm hoi 10 năm trước, những người bạn biết làm gì với ngôn ngữ? theo như tôi liên quan đến RAII, và luôn là tính năng sát thủ của C++. –

+0

Vâng ... họ đã lập trình nó giống như nó là Mục tiêu C, hoặc Java, hoặc một cái gì đó của ilk đó. Hoặc giống như C. Nhưng luôn sử dụng đủ các công cụ C++ để làm cho nó chắc chắn là C++ chứ không phải cái gì khác! (Kiểu mã hóa này thực sự không phát huy được sức mạnh của ngôn ngữ, để nói ít nhất, đó là lý do tại sao tôi tưởng tượng RAII, trong số những thứ khác, đã trở nên phổ biến hơn.) –

+1

@Neil: Không thể đồng ý hơn. RAII là thứ giúp tôi trở lại thời gian và thời gian C++ lần nữa. Tôi sẽ không chạm vào Java vì lý do đó thôi! –

Các vấn đề liên quan