C ++ 라이브러리를 사용하는 것이 왜 그렇게 복잡한가?


14

우선, 나는 C ++을 좋아하고 Java보다 C ++로 코딩하는 것이 더 쉽다고 생각하는 사람들 중 하나입니다. 하나의 작은 것을 제외하고 라이브러리.

Java에서는 단순히 jar를 빌드 경로에 추가하면 완료됩니다.

C ++에서는 일반적으로 헤더 파일과 라이브러리 자체에 여러 경로를 설정해야합니다. 경우에 따라 특수 빌드 플래그를 사용해야 할 수도 있습니다. 주로 Visual Studio, 코드 블록을 사용했으며 IDE는 전혀 사용하지 않았습니다. 외부 라이브러리 사용에 관해 이야기 할 때 세 가지 옵션 모두 크게 다르지 않습니다.

왜 이것에 대한 간단한 대안이 없었는지 궁금합니다. IDE가 빌드 플래그 설정을 위해 모든 작업을 수행 할 수 있도록 필요한 모든 것을 한 곳에 갖춘 특수한 .zip 파일이있는 것처럼. 이에 대한 기술적 장벽이 있습니까?

답변:


15

C ++는 객체 지향 프로그래밍을 지원하여보다 쉽고 자동화 된 언어를 만들어 C 언어를 향상 시키도록 설계되었습니다. 그러나 C가 외부 라이브러리와 헤더 파일을 처리하는 방식을 변경하거나 개선하기 위해 아무런 조치도 취하지 않았습니다. C ++에는 최신 언어와 같은 모듈 시스템이 없습니다. 여전히 C 전처리 기와 링커 시스템을 사용합니다. C ++의 목표 중 하나는 C 코드와의 하위 호환성 이었기 때문에 이것은 놀라운 일이 아닙니다. 모든 C ++ 모듈 시스템은 이전 C 헤더 파일 / 링커 시스템과 함께 작동해야합니다. C ++ 표준위원회는 더 현대적인 모듈 시스템을 설계하지 않았습니다. (그들이 노력하고 있지만 아래의 Klaim의 의견을 참조하십시오.)


8
마지막 행은 완전히 정확하지는 않습니다. 모듈 시스템은 2004 년부터 작동 해 왔지만 (첫 번째 문서), 구현에 대한 부족이 있었기 때문에 마지막 표준에 대해 실제로는 상상조차 할 수 없었습니다. 제안을지지하십시오. 그 구현은 다음 C ++ 표준을 타트하기 위해 다른 초안과 함께 wortk로 구현되었습니다. 그것은 C ++ 디자이너의 우선 순위가 아니라, 잘못 할 수없는 이러한 기능 중 하나 일 뿐이며 (대부분의 C 코드 및 C ++ 11과 함께) 역 호환성을 유지해야하며 제대로 이해하기가 어렵습니다. 시간이 많이 걸립니다.
Klaim

대박. 정보 감사합니다, 클라 임. 확실히 확인하겠습니다. 즉 : 매우 흥미로운입니다
Pijusn

메커니즘은 운영 체제마다 다를 수 있기 때문에 대부분의 언어는 연결 표준화 작업을하지 않습니다. Java의 어느 곳에서나 작동하려면 특정 연결 및 라이브러리 형식이 필요합니다. 아무 문제가 없지만 모든 경우에 바람직하지 않은 오버 헤드가 발생합니다.
Blrfl

솔직히, 저는 C ++ 표준위원회가 언어 자체를 위한 모듈 시스템에서 일하고 있다는 것을 매우 두려워 합니다. C ++은 이미 거대하고 복잡한 언어이므로 이러한 민감한 기능을 추가하는 것은 매우 위험 할 수 있습니다. 아래의 Karl Bielefeldt가 지적한 바와 같이,이 문제는 이미 플랫폼 수준 (Linux 패키지 시스템) 에서 좋은 솔루션을 찾았 으며 거의 ​​노력하지 않아도 대부분의 IDE에서 매우 잘 해결 될 수 있습니다. 예를 들어 Qt 라이브러리와 Qt Creator가이 문제를 어떻게 처리하는지 살펴보십시오.
AlexBottoni

1
@AlexBottoni, 나는 그들이 세기에 언제든지 표준화 된 모듈 시스템을 생각해 낼지 의심합니다. 그들은 정확한 구현에 동의 할 수 없었기 때문에 C ++ 11에 개념을 포함시키지 않았습니다. 헤더 / 링커 시스템과 함께 작동하는 모듈 시스템은 훨씬 까다로워서 오랫동안 보지 못할 것입니다.
Charles Salvia

2

기술적 장벽이 아닙니다. Linux에서 "특수 zip 파일"은 패키지 관리자와 함께 설치하는 라이브러리 -dev 패키지이며, include 및 linker 플래그 를 설정하는 것은 pkg-configconfigure.ac사용 하여 설정 하는 몇 줄을 추가하는 것만 큼 간단 합니다.

Pkg-config는 Windows에서도 사용할 수 있지만 문화적 장벽으로 인해 널리 채택되지 못했습니다. 유닉스는 소스 코드를 배포함으로써 이식성을 가능하게하는 강력한 역사를 가지고 있기 때문에 무료로 개발 툴을 포함하고있다. Windows는 바이너리 배포 만 장려하고 개발자에게 도구를 청구하는 강력한 역사를 가지고 있습니다. 돈을 판매하는 도서관을 만들 때, 제 3자가 도서관을 더 쉽게 제공 할 수 있도록하는 것은 의미가 없습니다.

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