2008-09-30 24 views
12

Tôi đã làm việc như một lập trình viên C++ bản địa trong vài năm qua. Bây giờ chúng tôi đang bắt đầu một dự án mới từ đầu. Vậy bạn nghĩ gì về việc chuyển sang C++ \ CLI với chi phí mất mã độc lập nền tảng. Có bất kỳ lợi thế đặc biệt nào mà người ta có thể đạt được bằng cách chuyển sang C++ \ CLI không?Bạn có đề xuất Native C++ cho C++ CLI shift không?

+3

Hãy xem bài viết ngắn gọn của Bjarne Stroustrup về C++/CLI. Trong khi nó hầu như không đáng ngạc nhiên rằng ông không thích nó, lý do của ông không làm như vậy là khá chiếu sáng. http://www2.research.att.com/~bs/bs_faq.html#CppCLI –

+0

@Chinmay: Tại sao bạn không đăng câu trả lời này? Tôi đã ngứa ngáy lên! –

Trả lời

31

Tôi muốn giới thiệu sau đây, dựa trên kinh nghiệm của tôi với C++, C# và .NET:

  • Nếu bạn muốn đi theo con đường .NET, sử dụng C#.
  • Nếu bạn không muốn .NET, hãy sử dụng C++ truyền thống.
  • Nếu bạn phải kết nối C++ truyền thống với mã .NET, hãy sử dụng C++/CLI. Hoạt động với cả lớp .NET gọi C++ và C++ gọi các lớp .NET.

Tôi thấy không có ý nghĩa trong việc chuyển đến C++/CLI nếu bạn không cần.

+0

Và, hãy xem xét rằng VS2010 không có mã hoàn thành (IntelliSense) cho C++/CLI, vì vậy bạn phải sử dụng công cụ của bên thứ 3 hoặc VS2008. – maxwellb

3

Có lợi ích nào cho bạn không? Bạn có thể sẽ mất khả năng chuyển đổi sang một hệ điều hành khác.

2

đừng bận tâm trừ khi bạn đang tích hợp với ứng dụng .NET. Chắc chắn không sử dụng STL/CLR vì hiệu suất của nó thực sự khủng khiếp.

Sự cám dỗ của nó để lật chuyển đổi đó để sử dụng thư viện lớp .NET, nhưng có các lựa chọn thay thế. Nếu bạn làm điều này, bạn sẽ không thể chuyển mã của bạn dễ dàng như vậy.

Dường như sự gia tăng của PMNM ngày càng tăng, vì vậy bây giờ có thể là thời gian để điều tra bằng cách sử dụng các thư viện và công cụ đa nền tảng. Bạn có thể triển khai một ứng dụng Linux dễ dàng hơn nhiều so với một cửa sổ (bằng cách vận hành một hệ điều hành được cấu hình đầy đủ!), Và bạn có được ROI tốt hơn nhiều nếu bạn triển khai các máy khách Linux (vì chúng miễn phí).

Nếu tôi là một doanh nhân, tôi sẽ tìm kiếm ít nhất có khả năng triển khai trên linux hoặc mac hơn chỉ dành cho cửa sổ. Về mặt chiến lược, tôi sẽ không muốn đặt cược rằng thế giới ở lại với Microsoft trong thời gian 5 năm.

6

Một số câu hỏi cần cân nhắc trước khi chuyển đổi:

[1] Bạn có ổn với việc gắn bó với Windows không? Có các bản sao .NET cho các hệ điều hành khác, nhưng ứng dụng của bạn sẽ không chạy một cách rõ ràng. Một phức tạp bạn có thể không cần.

[2] Bạn đang cân nhắc chuyển đổi chỉ để hỗ trợ thu gom rác? Nếu vậy, bạn chỉ có thể sử dụng một số thư viện thu gom rác C++. Và nếu bạn tìm ra cách để tận dụng std :: shared_ptr, bạn có thể không cảm thấy cần thiết cho các nhà sưu tập rác. Một chi phí bạn có thể không cần.

[3] Bạn đang xem xét C++/CLI vì bộ sưu tập rác & tất cả các lớp .NET hữu ích mà bạn có thể tận dụng? Nếu vậy, tại sao không chỉ chuyển sang C#. C++/CLI là một công nghệ chuyển tiếp, và tốt nhất là không nên đầu tư tài nguyên vào những thứ như vậy. C# đang trở nên khá trưởng thành và có thể sử dụng được.

Cá nhân, tôi sẽ chỉ gắn với C++;).

2

Lợi thế chính bạn sẽ chuyển sang C++/CLI là truy cập vào các thư viện .NET và khung chính (thu gom rác, v.v.). Tuy nhiên, như xa như tôi có thể nói lý do chính C++/CLI tồn tại là để dễ dàng porting của mã C + + hiện có để chạy trong khuôn khổ .NET. Các dự án mới được khuyến khích sử dụng C#.

Nếu bạn cần sử dụng mã C++ hiện có được kết hợp với .NET framework, thì bạn nên sử dụng C++/CLI, nhưng nói chung bạn chỉ nên bắt đầu với C#.

Nếu có thứ gì đó trong .NET mà dự án mới cần sử dụng rộng rãi (có thể là thiết kế GUI đơn giản hơn hoặc thứ gì đó), thì hãy sử dụng C#. nếu không, sau đó gắn bó với C++ gốc. Tôi không nghĩ rằng bạn sẽ mất bất cứ điều gì bằng cách làm điều đó.

1

Tôi không thích C++/CLI nhiều đến nỗi tôi khuyên bạn nên chỉ đạo rõ ràng, như tôi mô tả here. Một số gợi ý sử dụng C++/CLI như một cầu nối giữa C++ và C#, nhưng nhờ cách C++/CLI được thiết kế, nó rất tẻ nhạt để sử dụng theo cách đó (bạn phải tự tạo trình bao bọc của mã C++ bình thường có thể được gọi từ C#). Do đó, tôi muốn giới thiệu SWIG thay vì giao tiếp chuẩn C++ với C# (mặc dù được thừa nhận, SWIG có đường cong học tập đáng kể).

1

Hãy nhìn vào những hai bài báo:

A Critical Overview of C++/CLI, Part I

A Critical Overview of C++/CLI, Part II

Tôi tin rằng bây giờ bạn đang thuyết phục như tôi rằng C++/CLI là không phải là một "thiết lập của các phần mở rộng tới C++ " (trong nhiều khía cạnh, nó thực sự là một tập con của C++), cũng không liên quan đến C++ nhiều hơn bất kỳ phần nào khác ngôn ngữ với dấu chấm phẩy và dấu ngoặc nhọn. Hơn nữa, C++/CLI chắc chắn là Ngôn ngữ lập trình hướng Windows; chắc chắn đó không phải là ngôn ngữ mà một máy chủ Solaris 10 hoặc điện thoại di động Nokia sẽ vui vẻ chạy. nó có gì để làm với C++?

0

Một bất lợi chính khi sử dụng C++/CLR là khả năng mất IP của bạn (sở hữu trí tuệ) nếu mã không bị che khuất một cách suôn sẻ. Nói chung tôi đồng ý với các tuyên bố của các thành viên khác ở đây. Nếu bạn muốn độc lập mã di động của MS .net vm sau đó bản địa C/C++ là con đường để đi.