2012-04-06 62 views
7

Tôi đang làm việc cho một sản phẩm sử dụng C++ chủ yếu cho các thành phần cốt lõi của nó. Mặc dù nó sử dụng C++ thị giác làm trình biên dịch chính cho nền tảng windows và nó là trình soạn thảo và trình gỡ rối làm môi trường phát triển chính, không sử dụng bất kỳ công nghệ cụ thể nào của Microsoft. Đối với các nền tảng khác, nó sử dụng gcc để biên dịch.di chuyển đến C++ 11

Cơ sở mã của tôi sử dụng rất nhiều tham chiếu giá trị giả lập (sử dụng thư viện tăng chuyển động), mẫu variadic (sử dụng bộ xử lý tăng cường) và trong một số trường hợp mẫu biểu thức.

Tôi bị cám dỗ chuyển sang C++ 11 để có cơ sở mã sạch hơn bằng cách sử dụng tham chiếu rvalue, chuyển tiếp hoàn hảo, mặc định và xóa cho nhà xây dựng, mẫu variadic và tự động và decltype.

Nếu tôi làm như vậy, tôi có thể làm một số việc làm lại trên mã hiện có để đơn giản hóa nó (sử dụng bí danh mẫu và có thể là constexpr). Trong trường hợp đó, tôi phải chuyển sang gcc cho nền tảng windows bằng cách sử dụng mingw, vì studio trực quan không thực hiện mặc định và xóa, và mẫu variadic. Ngoài ra tôi phải chuyển sang gdb dưới dạng trình sửa lỗi và trình soạn thảo mã khác.

Đối với tôi, lợi ích có vẻ rất lớn về hiệu suất và tính đơn giản của mã, tuy nhiên tính ổn định, khả dụng (trên một số nền tảng như Android), gỡ lỗi (di chuyển từ studio trực quan sang gdb, vì chúng tôi có nhiều công cụ trực quan được phát triển cho trình gỡ lỗi studio trực quan)) và trình soạn thảo mã (không quá nhiều đối với mã mẫu rất lớn, tôi không tìm thấy nhiều công dụng tự động hoàn thành, tái cấu trúc vv, và codelite, codeblocks, qt creator hoạt động tốt với hệ thống xây dựng của chúng tôi).

Tôi muốn biết liệu có bất kỳ dự án quy mô trung bình/lớn nào là thương mại hoặc nguồn mở, đang sử dụng/có ý định sử dụng bất kỳ tính năng nào ở trên C++ 11 không? Và cần bao nhiêu nỗ lực để thực hiện việc di cư như vậy?

Bất kỳ trải nghiệm thực tế, mẹo hay lời khuyên nào sẽ giúp tôi đưa ra quyết định.

+1

Câu hỏi thường gặp và câu hỏi về danh sách thường không phải là những gì mà giao dịch Stack Overflow thỏa thuận. –

+1

Tôi khuyên bạn nên đợi lâu hơn một chút. Chờ cho đến khi hỗ trợ VC++ thích hợp. Các tập tin tiêu đề trong mingw32 là vấn đề. –

+0

có một cái nhìn tại dự án clang họ có [C++ 11 Migrator] [1] trong kho [1]: http://blog.llvm.org/2013/04/status-of-c11- migrator.html – Alex

Trả lời

7

Trước hết: tùy thuộc vào chính sách.

Giống như tất cả các công nghệ, việc chuyển đổi từ một cái gì đó hoạt động sang một cái gì đó mới là một rủi ro trong chính nó. Tùy thuộc vào suy nghĩ của bạn và sự phê phán của dự án của bạn, mức độ rủi ro mà bạn chấp nhận có thể khác nhau (ví dụ, tôi sử dụng phần trên cùng của phiên bản Clang cho các dự án cá nhân nhưng gcc trưởng thành tại nơi làm việc).

Cá nhân, tôi khuyên bạn không nên không lặn đầu tiên cho các dự án sẵn sàng sản xuất, nhưng thay vào đó thực hiện lựa chọn từng phần các tính năng hoạt động.

Bạn mentionned:

  • rvalue tham chiếu & hoàn hảo chuyển tiếp
  • default/delete
  • mẫu variadic
  • suy luận kiểu (auto/decltype)
  • mẫu bí danh và constexpr

VC++ 11 đi kèm với support for many C++11 features. Bạn có thể bắt đầu sử dụng tham chiếu rhodue rvaluesuy luận loại ngay bây giờ, chẳng hạn. Và những người có thể được sử dụng với chi nhánh gcc 4.5.x nếu tôi nhớ chính xác, mà đã được hơn một năm tuổi, rất tốt.

Một sự vắng mặt đáng chú ý trong danh sách của bạn là lambdas chẳng hạn, được cả VC++ 11 và gcc hỗ trợ.

Nếu bạn muốn di chuyển xa hơn, thì bạn sẽ phải chuyển trình biên dịch và môi trường. Nỗ lực này lớn hơn đáng kể vì bạn sẽ cần phải đào tạo lại nhóm (cá nhân tôi đã có một số mụn cóc với gdb trên mingw ...).

Tôi khuyên bạn nên chọn lựa những gì hoạt động trên cả hai trình biên dịch, hiện tại, trừ khi bạn cảm thấy mạo hiểm. Tuy nhiên, di chuyển luôn là rủi ro kinh doanh.

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