오늘날 C ++의 역할은 무엇입니까?


41

현재 저는 IT 학생이며 오늘날 C ++에서 여전히 중요한 것이 무엇인지 궁금합니다. 어떤 용도로 사용됩니까? 대학에서 기본 C ++ 과정을 수료했지만 지식을 어디에서 사용할 수 있고 C ++을 배우는 방향을 상상할 수 없습니다.

다시 말해 성공적인 C ++ 프로그래머가되기 위해 무엇을 배워야합니까?

현재 C ++이 어떤 영역에서 유용 할 수 있는지 명확하게 알지 못하기 때문에 Java를 배우고 있지만 Java 프로그래머로 어떤 종류의 작업을 수행 할 것인지 분명히 알고 있습니다. 그러나 여전히 C ++이 죽지 않기를 바랍니다.


2
이것이 나의 관점이다. C ++은 실시간 상황 (및 비디오 게임)에서 매우 유용합니다. 또한 성능상의 이유로 데스크톱 응용 프로그램 (Qt를 잊지 마십시오)에 C ++을 사용합니다.
hosomaki

1
@stign IMO 오늘날 모든 언어가 사용되지 않는 시간이 있기 때문에 결국에는 죽을 가능성이 높습니다 (아마도 사용되는 하드웨어의 큰 변화로 인해).
Kenneth

17
C ++은 죽지 않았습니다 (매일 새로운 코드를 작성합니다). COBOL이 표시되면 앞으로 몇 년 동안 일할 것입니다.
Michael Kohne

2
The Programming Languages ​​Beacon을 살펴보고 스스로 결론을 내 립니다
Nemanja Trifunovic

1
최근에 나는 마이크로 소프트 채널 9 에서 흥미로운 비디오를 보았다 . Microsoft는 시장 조사에 수백만 달러를 투자했으며 C ++ 르네상스에 대한 연구를 기반으로하고 있습니다. 참조 동영상을 .
grokus

답변:


57

C ++의 킬러 기능은 범위 제한 리소스 관리 , SBRM (일반적으로 " RAII "라고 함)입니다. 이 개념을 기반으로 하는 유일한 산업용 프로그래밍 언어입니다. C ++에서 모든 객체의 수명은 정확히 알려져 있으며 (잘 작성된) C ++ 프로그램은 리소스가 완전히 결정적인 방식으로 수집 및 해제되도록 보장합니다. 이에 비해 가비지 수집 또는 관리 언어는 그러한 보증을 제공하지 않습니다. 실제로 해당 언어의 객체는 수명이 다한 후에도 지속될 수 있습니다.

이것이 C ++이 금융, 비디오 게임, 고성능 임베디드 및 실시간 시스템, 운송, 제조 및 결정론과 정밀도가 중요한 기타 산업에서 사용되는 이유입니다. 대안이 없습니다.

물론, 이것보다 많은 작업에 사용되었으며 이러한 작업은 C # 및 Python 및 기타 더 적합한 언어로 손실되지만 핵심 틈새에는 영향을 미치지 않습니다.


20
C ++에서 malloc을 사용하는 사람은 단단한 물체로 머리를 때리고 싶습니다. 또한 newC ++에는 배치라는 연산자의 기능이 덜 알려져 있습니다 . 현재 점유 된 메모리 공간을 재사용 할 수 있습니다. 따라서 누군가가 조각화를 피하거나 최소화하려는 경우 이론적으로 그렇게 할 수 있습니다. 그리고 예측 가능한 것은 결정론 적이 아닙니다.
Tamás Szelei

4
@Apalala C ++에는 참조 카운트도 있지만 객체 수명 관리 측면에서 SBRM보다 훨씬 나쁩니다. 저는 단지 hard-RT 결정론에 대해서만 말하는 것이 아니라 객체 모델의 결정 론적 행동에 대해서도 이야기하고 있습니다.
Cubbi

4
C ++을 배웠을 때 RAII는 특별히 널리 알려지지 않았습니다. 나는 새로운 삭제 및 두뇌 기반 포인터 관리를 배웠습니다. 그래서 나는 당신이 그것을 "개념을 바탕으로 구축 된"것으로 특징 지을 수 있다고 생각하지 않습니다. 오늘날 사용되는 라이브러리 및 기타 지원 구조에는 핵심 언어 나 구문이 없을 수 있습니다.
jprete

7
@jprete 많은 C ++의 장점이 디자인 된 것이 아니라 발견되었다는 사실은 사실입니다. 이 포스트는 2005 년 이후의 언어에 관한 것입니다.
Cubbi

5
RAII C ++ 설계되었습니다. 그러나 대부분의 C ++ 프로그래머는 malloc을 새로운 것으로 바꾸고 delete를 사용하여 무료로 C를 계속 작성했습니다.
케빈 클라인

40

C와 C ++에는 몇 가지 시장이 있습니다 (제한적인 이해는 있지만)

  1. 기존 코드 C와 C ++에는 가장 큰 기존 코드베이스가 있습니다. 이 크기의 코드는 단순히 "다음으로 새로운 언어"가 등장했기 때문에 그냥 버릴 수 없습니다. C 바인딩은 대부분의 플랫폼에서 언어 간 상호 작용의 표준과 거의 비슷하므로 C 또는 C ++에서 랩퍼 라이브러리를 작성하는 것이 유용합니다.
  2. 고성능 애플리케이션 (예 : 고주파 금융). C 및 C ++는 여전히 대부분의 다른 프로그래밍 언어보다 전반적인 성능을 향상시킵니다. C ++에서 가장 중요한 것은 템플릿과 같은 컴파일러 전용 항목으로 추상화를 작성하는 경우가 많으며 런타임에서 컴파일 시간으로 계산을 이동하여 전반적인 응용 프로그램을 더 빠르게 만듭니다.
  3. (2와 유사) 낮은 대기 시간 응용 프로그램. 예를 들어 CLR 또는 JVM에서 실행되는 언어는 응용 프로그램에 따라 C ++만큼 빠를 수 있지만 프로그램을 실행하려면 먼저 CLR 또는 JVM을 메모리에로드해야합니다. 하드 시작 요구 사항이있는 경우 중요합니다. 주석 편집 : 그 문제에 대한 모든 설명의 하드 대기 시간 요구 사항은 여기에주의하십시오. 가비지 수집을 실행하는 것이 결정적인 프로세스가 아니기 때문에 가상 컴퓨터에서 실행되는 언어는 어려운 시간 제한을 거의 제공하지 않습니다.
  4. 임베디드 시스템. 일부 임베디드 시스템에는 JVM (Google의 Android (실제로 JVM은 아니지만 가깝습니다), RIM의 Blackberry) 또는 CLR (Windows Phone)과 같이 실행할 하드웨어가 있지만 대부분의 임베디드 시스템에는 전원이 공급되지 않습니다. C 또는 C ++에 필요한 것보다 더 많은 런타임 지원이 필요한 언어를 실행하십시오 (런타임 지원이 전혀 없음).
  5. 배포가 제한된 응용 프로그램. 전체 프로그램이 수백 KB에 불과한 경우 JVM 또는 CLR 설치가 필요한 경우가 있습니다. (예를 들어 내가 작업하는 대부분의 프로그램 .EXE 어떤 종류의 설치 프로그램이나 그와 유사한 것없이 단일 파일 로 배포 해야합니다 .이를위한 대안은 없습니다)

2
시작 대기 시간이 고려해야 할 유일한 대기 시간 유형은 아닙니다. 어려운 실시간 요구 사항이 훨씬 더 큰 문제가 될 수 있습니다.
greyfade

1
특정 제작자 (C # 또는 Objective-C)에 갇히고 싶지 않거나 언어가 수많은 소송 (자바)에서 사라지는 것을 원하지 않는 곳에 추가
Martin Beckett

@ greyfade : 그것은 (2)의 의미와 같지만 명확하지 않다는 데 동의합니다. 편집했습니다. @ 마틴 : 그것이 C ++의 좋은 강점이라고 생각하지만 C ++이 일반적으로 사용되는 시장에 관한 질문에 대답하지는 않습니다. 또한 <S> BSD </ S> (OOPS : LGPL) 라이센스 버전의 CLR (모노)이있을 때 특정 제조업체에 고정 된 C #이라고 부르지 않을 것입니다.
Billy ONeal

1
또한 5. 운영 체제 및 핵심 프레임 워크. 가상 머신에서 많은 작업을 수행 할 수 있지만 가상 머신은 여전히 ​​C 및 / 또는 C ++로 구현해야합니다.
Jan Hudec

1
@ 1 월 : 그렇습니다. 반성과 친구 같은 것들은 문제 2-4를 유발할 것입니다. 가비지 수집기를 실제로 작성해야하는 유일한 하위 집합은 실제 메모리를 나타내는 일부 개체입니다.
Billy ONeal

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.