2010-06-11 2 views
20

DC과 쉽게 인터페이스합니다.C++과 D 사이의 링크 호환성

D 마찬가지로 C++과 쉽게 인터페이스 할 수 있지만 그 크기는 크지 만 C++은 매우 사소해야합니다. 코드는 사용할 수 없습니다

  • 이름 공간이 아닌 가상의 방법
  • 더와
  • 다중 상속
  • 혼합 가상
  • 템플릿?

전적으로 상속 제한을 이해합니다. 그러나 나머지는 인위적 한계로 느껴집니다. 이제 std::vector<T>을 직접 사용할 수 있기를 원치는 않지만 실제로 외부 템플릿으로 std::vector<int>과 연결할 수 있기를 바랍니다.

C++ interfacing page에는 특히 우울한 의견이 있습니다.

D 템플릿은 C++ 템플릿을 사용하여 공통으로 조금 가지고, 합리적인 방법 의 어떤 종류가 D.

와 링크 호환 방식 에서 C++ 템플릿을 표현하기 위해 볼 수 있습니다 그 매우 어렵다

이것은 가능성이 인정 하듯이

내가 probabl 것이다 D.

에서 접근 수 없을 것 C의 ++의 STL 및 C++ 부스트 것을 의미한다 D으로 코딩하는 동안 std::vector은 필요하지 않지만 QT 또는 boost을 사용하고 싶습니다.

그럼 거래가 무엇입니까? 왜 평범하지 않은 C++ 클래스를 D로 표현하는 것이 그렇게 어렵습니까? 적어도 특별한 네임 스페이스를 추가하거나 네임 스페이스를 표현할만한 가치가 없을까요?


업데이트 : Walter Bright에서 "D는 작품의 네임 스페이스 지원을하고 있습니다."

+11

심지어 주류 C++ 컴파일러에서 지원되지 않습니다. 왜 다른 언어가 그것을 지원할 것으로 기대합니까? –

+5

@ 한스, 무슨 뜻이야? –

+3

그가 의미하는 바는 "컴파일러 X에서 생성 된 C++로 링크"가 {주류 C++ 컴파일러} \ X에서도 지원되지 않는다고 생각합니다. – FeepingCreature

답변

27

FWIW Qt는이 적극적으로 D 바인딩 개발 : http://www.dsource.org/projects/qtd

내가 부스트에서 많은 구성 요소가 너무 높은 ++ C에 연결되어 다른 언어에 의미있는 휴대용 생각합니다.

std :: vector는 적절한 멤버 함수로 전달하는 정규 함수 (예 : 네임 스페이스 수준)를 작성하는 데 시간을 소비 할 수 있습니다. 지루하고, 저렴하지만 (더 높은 수준의 구성 요소에 대해서는 아마도 std :: vector가 아닙니다).

또한 매우 최근에 표준 라이브러리에서 가비지 수집 (참조 : http://www.dsource.org/projects/phobos/browser/trunk/phobos/std/container.d) 대신 참조 카운팅, malloc/free 및 결정적 파괴를 사용하는 봉인 된 배열 및 봉인 된 바이너리 힙 구현을 확인했습니다. 다른 컨테이너가 따라옵니다. 이 용기는 프로그램 안전을 해치지 않으면 서 결정 론적 파괴를 달성하기 위해 3 가지 특정 기술을 사용합니다 ("Sealed Containers"에서 설명 됨).

가비지 수집을 할 여력이없는 타이트한 애플리케이션의 경우에도 밀폐 컨테이너를 사용하면 STL 컨테이너와 연결할 필요가 없기를 바랍니다.

+0

BoL에 대해 많이 알지 못했지만 STL에 대해 조금만 알려져 있기 때문에 D에서 더 잘 수행 할 수없는 것보다 Boost에 대해 많이 알지 못할 것입니다. 더 높은 수준의 C++ 코드와의 상호 작용을 향상시킬 수 있다고 말했다. – BCS

+2

내가 원했던 부스트 라이브러리는 Boost.Asio입니다. 비교할 수있는 교차 플랫폼 네트워킹 라이브러리에 대해서는 잘 모릅니다. 나는 다른 사람들을 찾을 수있을 것이라고 확신한다. 또한 유사한 라이브러리가 D로 작성 될 수 없다는 것은 아닙니다. 이미 작성되고 테스트되었으며 다른 프로젝트를 많이 사용했기 때문입니다. –

17

Hans Passant가 주석에서 언급했듯이 D와 C++ 사이에서 원하는 상호 운용성 수준은 다른 C++ 컴파일러에서도 지원되지 않습니다. 몇 가지 지원이있는 것으로 보이는 C++ ABI (Application Binary Interface) 표준이 있지만 인텔, GCC 및 ARM 컴파일러가 얼마나 광범위하게 ABI를 따르는 지 확실하지 않습니다. 필자는이를 사용할 필요가 없었으며 x86 또는 x64 컴파일러에서 Microsoft가 준수하는지 여부를 확신하지 못합니다 (ABI 표준이 시작된 이후로 ia64 용으로 상상할 수도 있음).

C++ ABI에 대한 자세한 내용은 "Interoperability & C++ Compilers" by Joe Goodman을 참조하십시오.

아마도 월터 브라이트 (Walter Bright)는 ABI 표준을 따르는 C++ 라이브러리/개체와의 D 상호 운용성을 지원할 것으로 확신 할 수 있습니다.하지만 어디에서 그가 우선 순위를 지정할 지 모르겠습니다.

2

재미 있기 때문에 일부 C++ 코드와 인터페이스했습니다.

아마 당신의 질문에 대답하지 않을 것입니다,하지만 당신 (그리고 D 공동체 가운데 일부 사람들)이 내가 작성한 메모에 관심이있을 것 같아요. 여기에 그것은 간다 : TechNotes.

+0

오류 모드 문서의 경우 1 – Quonux