2009-04-01 16 views
8

C++/CLI là ngôn ngữ rất mạnh. Đó là ngôn ngữ CLR duy nhất mà bạn có thể kết hợp liền mạch mã được quản lý và không được quản lý. Có bao nhiêu nhà phát triển phần mềm (trên trang web này) đang sử dụng ngôn ngữ này? Bạn sử dụng loại dự án nào? Nó là một sự thích nghi của mã di sản hay tạo ra một phần mềm gốc? Bạn có thể so sánh Managed C++ cũ với C++/CLI mới không? Bạn nghĩ gì về chất lượng hiện tại và về tương lai của C++/CLI?Vui lòng mô tả trải nghiệm sử dụng Microsoft C++/CLI

Trả lời

5

Tôi đã sử dụng C++/CLI cho một dự án mô phỏng. Công cụ mô phỏng của tôi thực hiện tính toán thực tế là một cơ sở mã hiện có được viết bằng C++. Tôi cần phải có một giao diện đồ họa cho nó, mà tôi đã được mã hóa thành công trong C++/CLI.

Theo quan điểm của tôi, ngôn ngữ cũng dễ dàng mã hóa dưới dạng C# mặc dù có sự lúng túng về cú pháp nhỏ. Điều đó nói rằng, cú pháp là đơn giản hơn nhiều so với điều mà Extensions Extensions mà Microsoft đã đưa ra trước đó.

Một trong những tính năng mạnh mẽ nhất của C++/CLI phải là khả năng biên dịch lại mã nguồn C++ bản địa hiện tại của bạn thành MSIL. Tất nhiên có thể có trục trặc, nhưng đối với hầu hết các ứng dụng nó phải là một bài tập không gặp rắc rối.

Đối với sự phù hợp của C++/CLI, tôi nghĩ rằng nó sẽ vẫn nghiêm chỉnh một ngôn ngữ cho khả năng tương tác với C++. Nếu bạn đang viết một ứng dụng hoàn toàn mới, hoàn toàn không có lý do gì để chọn C++/CLI, C#. Như tôi đã nói, nó một chút khó xử hơn để sử dụng hơn sau này.

3

C++/CLI đã xuất sắc đơn giản để đưa số CLR into FreeSWITCH. Dễ dàng hơn nhiều so với giao dịch với API lưu trữ hoặc sử dụng Mono.

Lần cuối cùng trước khi tôi sử dụng C++ được quản lý là vào năm 2003 hoặc lâu hơn. Tôi nhớ nó hơi đau và không hoạt động liên tục.

+1

Tôi tự hỏi, Có thể sử dụng các tính năng C++/CLI khi trộn mã được quản lý và không được quản lý trong các ứng dụng nền tảng không? Hoặc nó chỉ có thể có trong phiên bản Windows? – macropas

+0

Cuối cùng tôi đã kiểm tra, Mono không hỗ trợ nó. – MichaelGG

8

Tôi đã sử dụng nó để viết các lớp tích hợp mỏng giữa mã được quản lý và mã gốc. Đó là tất cả mặc dù.

Tính năng độc đáo nổi tiếng nhất của nó là khả năng liên tục nghiên cứu mã không được quản lý và sửa đổi (hoặc vô tình hỏng) bất kỳ bộ nhớ ghi trong toàn bộ quá trình - đó không phải là lợi thế trong lập trình chung, nhưng khi bạn cần , Thật tuyệt vời. Nhưng tôi nghĩ rằng tôi sẽ cần nó ít hơn và ít hơn. Bạn có thể biên dịch C++/CLI bằng một cờ/tinh khiết, nhưng sau đó nó thực sự trở thành một ngôn ngữ hoàn toàn mới.

Có hai khác lớn tính năng độc đáo mặc dù:

  • Destructors rằng làm điều gì đó hữu ích. Trong C# một destructor là một finalizer. Trong C++ nó là một destructor được gọi là xác định đúng. Điều này có nghĩa là C++/CLI có cơ sở hạ tầng hoàn chỉnh nhất để làm việc với IDisposable. C# chỉ giúp khách hàng (thông qua sử dụng câu lệnh), nhưng chỉ C++/CLI cũng hỗ trợ người triển khai. Tôi hy vọng rằng có lẽ một ngày C# sẽ hấp thụ tính năng này.

  • Mẫu nhập văn bản có thể được sử dụng cùng với Generics CLI. Một điều khác sẽ rất hữu ích trong C#, mặc dù nó có thể được thực hiện liền mạch hơn nhiều nếu không có hành lý lịch sử.

Nhưng C# đủ tốt mà không có hai điều cuối cùng mà tôi không muốn sử dụng C++/CLI nói chung.

+1

Bạn có muốn nói rằng C++ có nhiều quyền kiểm soát hơn GC và có thể giải phóng bộ nhớ ngay lập tức không? – macropas

+2

Trong C++/CLI, bạn có thể phân bổ và giải phóng bộ nhớ giống như trong C++ truyền thống, và một trình hủy C++ được tự động tiếp xúc với CLR là Dispose(), tức là bạn có thể thực sự thực hiện C++ RAII với các đối tượng .NET. Nhưng bạn không có quyền kiểm soát nhiều hơn đối với GC - bạn chỉ có thể chỉ định nơi nó được sử dụng và ở đâu không. – OregonGhost

+1

@macropas - OregonGhost là chính xác; nếu bằng GC, bạn có nghĩa là GC của CLR, thì C++/CLI không có quyền kiểm soát nhiều hơn hoặc ít hơn so với bất kỳ ngôn ngữ nào khác. –

4

Chúng tôi sử dụng C++/CLI rộng rãi.Chúng tôi đã sử dụng nó để kéo một ứng dụng MFC cũ vào tuổi .Net để bây giờ chúng ta có thể viết hầu hết các chức năng mới trong C# và tích hợp với mã MFC cũ bằng cách sử dụng C++/CLI. . Trong các hội đồng cũ của chúng tôi, chúng tôi vẫn đang viết chức năng mới trong C++/CLI.

Tôi không có kinh nghiệm với "managed C++" nhưng C++/CLI là một niềm vui để sử dụng so với MFC và Visual C++. Nó có một cú pháp sạch hơn nhiều so với quản lý C++ hoặc Visual C++ và chúng tôi đã không có vấn đề gì ở tất cả các nhà phát triển thậm chí trẻ lên đến tốc độ với nó.

Có một vài hành vi thú vị trong C++/CLI như khi bạn truyền một đối tượng gốc vào một phương thức trên lớp được quản lý, nó đặt một wrapper được quản lý mỏng quanh đối tượng gốc (ẩn với nhà phát triển) chỉ cho mục đích của việc thực hiện cuộc gọi, nhưng shim là riêng tư cho assmebly như vậy không thể được gọi từ bên ngoài. Có những cách xung quanh điều này, như mọi khi, nhưng nó bắt chúng ta ra một vài lần sớm.

Chúng tôi sử dụng Visual Assist X để hỗ trợ tái cấu trúc (chấp nhận được), MbUnit/Gallio để kiểm tra đơn vị các lớp được quản lý và NMock hoặc RhinoMocks cho khuôn khổ mocking của chúng tôi.

Nói chung, tôi muốn nói rằng ngôn ngữ đã lưu sản phẩm của chúng tôi và cho phép chúng tôi tận dụng tất cả những điều thú vị mới đang diễn ra trong thế giới phát triển. Nếu chúng tôi vẫn chỉ sử dụng Visual C++/MFC thì chúng tôi sẽ gặp khó khăn trong việc tuyển dụng các nhà phát triển và bị hạn chế nhiều hơn trong lựa chọn COTS so với chúng tôi đang sử dụng .Net.

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