C ++. Net은 광범위하게 사용됩니까?


25

나는 전통적으로 C ++ 코더입니다. 지난 12 개월 동안 저는 많은 C # 코딩 작업을 해왔으며 C #의 실용적인 접근 방식에 놀랐습니다 (한 번은 "가비지 수집 기능이있는 C ++"인 것처럼 코딩을 중단했습니다).

우리는 최근에 일부 졸업생을 보유하고 있으며 그중 한 명을 도울 때 C ++에서 .Net을 사용하고 있음을 깨달았습니다. 이유를 묻자 그녀는 "매니저가 C ++을 사용하라고 말했다"고 말했다. 명백한 통신 문제는 제쳐두고, 그녀가 .Net을 사용하고 있다고 가정합니다. 왜냐하면 그것이 그녀가 노출 된 유일한 프레임 워크이기 때문입니다.

그런 다음 C ++을 사용하여 Forms 프런트 엔드를 구동하는 선임 개발자가 오래된 프로젝트를 보았습니다. 이제 이것은 .Net이 처음 등장했을 때쯤에 쓰여졌을 것이므로 .Net을 가지고 노는 것이 학습 연습이라고 가정합니다. 작은 유틸리티 앱이었습니다.

이 응용 프로그램에서 약간의 수정을해야했지만 C ++을 사용하여 .Net을 구동하면 두 세계에서 최악의 상황이 발생하는 것 같습니다. 가비지 수집이나 메모리 안전성은 없지만 관리되는 프레임 워크를 처리하므로 실질적인 속도 / 최적화 기회는 없습니다.

그래서 내 질문은 사람들이 큰 독립형 (예 : 비 배관) 생산 코드에 C ++ .Net을 사용하는지 여부입니다. 그렇다면 그렇게하는 이유는 무엇입니까? 나는 C ++ .Net 확장에 깊숙이 파고 들지 않았다는 것을 자유롭게 인정한다.

답변:


32

C ++. NET (또는 정확하게 C ++ / CLI) 에는 .NET에서 실행되는 다른 모든 것과 마찬가지로 가비지 수집 있습니다. C ++와 호환되는 상태로 유지하려면 ^구문과 gcnew가비지 수집 ( '안전한') 포인터를 사용하십시오.

C ++ / CLI는 많은 사람들에 의해 가증 한 것으로 간주되며 C # 또는 C ++보다 적절하게 작업하는 것이 훨씬 더 불쾌하며, 그보다 더 복잡합니다. .NET을 사용하여 혼합). 학습 C #은 보통 중간 규모의 단일 프로젝트 범위 내에서도 보상을받습니다. 그러나 C #이나 네이티브 C ++가 할 수없는 일이 있습니다. 기존 C ++를 .NET에 대해 컴파일하고 다른 .NET 구성 요소와 통신하도록하는 것입니다.

결과적으로 스크래치에서 시작하는 프로젝트에 C ++ / CLI를 사용하는 것은별로 의미가 없습니다. .NET과 관련하여 수행 할 수있는 모든 .NET은 C #에서도 수행 할 수 있습니다. 기본적으로 포인터. 가장 두드러진 raison-d'etre는 기존 코드베이스를 .NET으로 이식하는 것입니다. .NET을 사용하기로 결정했지만 지금까지 제작 한 모든 소프트웨어를 다시 작성하지 않으려는 (또는 리소스 및 시간 제약으로 인해 불가능한) 회사는 C ++ / CLI를 사용하여 최소한의 변경만으로 기존 코드베이스를 계속 사용할 수 있습니다. 시스템의 구성 요소를 C #으로 하나씩 다시 작성하십시오. 적어도 그것은 이론입니다. 나는 실제로 그것을 실제로 본 적이 없기 때문에 그것이 얼마나 잘 작동하는지 말할 수 없다.

또한 C # 자체는 기본 라이브러리와 인터페이스 할 수 있으므로 기존 C ++ 코드베이스를 사용해야하더라도 반드시 .NET에 대해 다시 컴파일 할 필요는 없습니다. 종종 COM 또는 P / Invoke를 통해 인터페이스와 인터페이스하는 것이 더 나은 솔루션입니다. .


10
P / Invoke를 사용한 '기본 라이브러리와의 인터페이스'는 정적 함수를 사용하는 dll로 제한되며 COM은 그 자체로 번거 롭습니다. C ++ / CLR의 래퍼를 사용하면 C # 코드에서 전체 크기 기본 백엔드 / 프로젝트에 거의 제한없이 액세스 할 수 있습니다. 개발에는 사용하지 않지만 접착제로는 P / Invoke보다 훨씬 깨끗하며 마샬링입니다.
Max

두 번째-그리고 마이크로 소프트는 C ++을 네이티브 개발의 올바른 위치로 재정렬 한 방식으로 판단하여 암묵적으로 동의했다고 생각합니다.
Josh Greifer

2
언어는 실제로 C ++. NET이 아니라 C ++ / CLI라고합니다.
svick

@ svick : 맞습니다. 편집했습니다.
tdammers

1
@Max TBH Microsoft는 모든 것을 네이티브로 만들었습니다. 이제 C ++ / CLI가 전혀 필요하지 않습니다. C #을 네이티브 코드에 인터페이스하기 위해 불쾌한 래퍼를 작성할 필요가 없습니다. WinRT / COM 객체인지 확인하십시오.
gbjbaanb
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.