모든 언어가 다른 모든 언어의 모든 기능을 통합하려고 시도해서는 안됩니다.
C ++은 본질적으로 매우 정교한 매크로 어셈블러입니다. C #, Java, Objective-C, Smalltalk 등과 같은 고급 언어는 아닙니다.
작업마다 다른 도구를 사용하는 것이 좋습니다. 우리가 망치 만 가지고 있다면 모든 것이 손톱처럼 보일 것입니다. 스크립트 언어를 갖는 것은 일부 작업에 유용하며, 반사 형 OO 언어 (Java, Obj-C, C #)는 다른 작업 클래스에 유용합니다. 기계에 가까운 효율적인 베어 본은 또 다른 작업 클래스 (C ++, C, 어셈블러)에 유용합니다.
C ++는 어셈블러 기술을 놀라운 수준의 복잡성 관리로 확장하고 추상화를 통해 더 크고 복잡한 작업을 인간에게 훨씬 더 가능하게하는 놀라운 작업을 수행합니다. 그러나 엄격하게 높은 수준의 관점 (Lisp, Smalltalk, Java, C #)으로 문제에 접근하는 사람들에게 가장 적합한 언어 일 필요는 없습니다. 문제에 대한 솔루션을 가장 잘 구현하기 위해 이러한 기능을 갖춘 언어가 필요한 경우 우리 모두가 사용할 수 있도록 그러한 언어를 만든 사람들에게 감사하십시오!
그러나 C ++은 어떤 이유에서든 코드와 기본 시스템 작동간에 강한 상관 관계가 필요한 사람들을위한 것입니다. 효율성, 프로그래밍 장치 드라이버 또는 하위 수준 OS 서비스와의 상호 작용 등 무엇이든 C ++은 이러한 작업에 더 적합합니다.
C #, Java, Objective-C는 모두 실행을 지원하기 위해 훨씬 더 크고 풍부한 런타임 시스템이 필요합니다. 해당 런타임은 문제의 시스템에 제공되어야합니다. 소프트웨어 작동을 지원하기 위해 사전 설치되어 있습니다. 그리고 해당 플랫폼에서 작동하도록 일부 다른 언어로 사용자 정의 된 다양한 대상 시스템에 대해 해당 계층을 유지 관리해야합니다. 그리고 그 중간 계층 (호스트 OS와 코드 사이의 적응 계층)은 거의 항상 C 또는 C ++와 같은 언어로 작성되며 효율성은 1 위이며 소프트웨어와 하드웨어 사이의 정확한 상호 작용을 예측할 수 있습니다 이해하고 최대 이득으로 조작했습니다.
Smalltalk, Objective-C를 좋아하고 리플렉션, 메타 데이터, 가비지 수집 등이 포함 된 풍부한 런타임 시스템을 보유하고 있습니다. 이러한 기능을 활용하기 위해 놀라운 코드를 작성할 수 있습니다! 그러나 이는 스택의 상위 계층, 하위 계층에 있어야하는 계층이며 궁극적으로 OS 및 하드웨어에 있어야합니다. 그리고 우리는 항상 C ++ / C / Assembler라는 해당 계층을 구축하는 데 가장 적합한 언어가 필요합니다.
부록 : C ++ 11 / 14는 C ++ 기능을 계속 확장하여 더 높은 수준의 추상화 및 시스템을 지원합니다. 스레딩, 동기화, 정확한 메모리 모델,보다 정확한 추상 기계 정의를 통해 C ++ 개발자는 이러한 고급 언어 중 일부만 독점 도메인을 가졌던 기존의 여러 가지 고급 추상화를 달성 할 수 있습니다. 금속 성능 및 우수한 예측 성 (즉, 최소 런타임 서브 시스템). 아마도 리플렉션 기능은 C ++의 향후 개정판에서 선택적으로 활성화 될 것입니다. 필요한 사람들을 위해 또는 라이브러리가 그러한 런타임 서비스를 제공 할 것입니다.