C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[74796] Re:Re:Re:엠바에 대한 기대요? 헛된 기대입니다
빌더(TWx) [builder] 3637 읽음    2018-02-14 00:44
뽀뽀중 님이 쓰신 글 :
: 빌더(TWx) 님이 쓰신 글 :
: : 뽀뽀중 님이 쓰신 글 :
: : : 안녕 하세요
: : :
: : : Boost Python을 사용을 고려 중입니다.
: : : Python은 2.x 와 3.x 버전이 호환성이 많이 떨어진다고 하여 3.x 버전을 사용할 생각 입니다
: : :
: : : 그런데, Rad Studio 최신버전에서 지원하는 Boost는 32-bit Windows BCC32 1.39.0버전, BCC32C 1.55.0버전 인데,,
: : : Boost 1.55에서는 Python 2.0을 지원하는 것 같습니다,
: : :
: : : 인터넷으로 Boost 최신버전을 Rad Studio에서 사용하는 방법을 찾아보고 있는데, 참고할 자료가 거의 없습니다.
: : :
: : : 불가능 한 것인가요?
: : :
: :
: :
: : 답변:
: :
: :
: : Boost  Python 최신 버전을 Rad Studio 에서 사용할 수 있도록 누군가에게 포팅을 의뢰한다고 해봅시다.
: :
: : Boost는 C++ Template 테크닉을 이용해서 구현되기 때문에 포팅이 가능하려면 우선 C++ Template을
: : 완벽하게 다룰 수 있는 사람이어야 합니다.
: :
: : Boost 라이브러리가 아래와 같이 C++17 랭귀지 파워를 이용해서 작성되어 있다면
: :
: : void fun(std::string_view id, std::unique_ptr<Foo> foo)
: : {  
: :     if (auto [pos, inserted] = items.try_emplace(id, std::move(foo)); inserted)
: :         pos->second->launch();  
: :     else
: :         standby.emplace_back(std::move(foo))->wait_for_notification();   
: : }
: :
: : C++17 Template 테크닉을 모르고 있으면 소스코드 해석 마저도 못할테니까
: : C++11만 지원하는 컴파일러에 맞게 포팅하는 것 자체가 불가능 할 것이기 때문이죠.
: :
: :
: : 그리고...
: :
: : Boost Python은 Jam 빌드시스템에 의해서 빌드되게 되어있고, Bootstrap 과정에서 Jam 빌드 시스템 자체를
: : 컴파일 해서 사용하는 환경이기 때문에 Rad Studio 컴파일러를 지원하도록 하기 위해선 Jam 빌드 시스템도
: : 수정해야 합니다.
: :
: : 이뿐이 아니고...
: :
: : Rad Studio 에서는 bcc32, bcc32c, bcc64의 3개의 C++ 컴파일러가 존재하는데...
: : 각각의 컴파일러를 지원하도록 하려면 Boost 전체 템플릿 코드를 확인해서 각기의 컴파일러의 C++11, C++14, C++17
: : 지원 여부에 맞게 템플릿 코드를 조건부로 컴파일 할 수 있도록 Boost 라이브러리 전체를 확인해서 수정 해줘야 합니다.
: :
: : 이건 완전 노가다죠. 엠바에선 C++ Template 다룰주 아는 직원들 동원해서 작업을 나눠서 하면 되겠지만 혼자서 작업하기엔
: : 작업이 너무 커지고. 저 같은 경우라도 누군가 포팅 비용으로 3천에 해달라고 의뢰한다고 하면 작업에 착수하겠지만
: : 그리 즐거운 일이 되지는 않을 겁니다.
: :
: : 오픈소스 생태계에서 엠바 컴파일러는 메인스트림 컴파일러로 취급 자체를 안할 정도로 별볼일 없는 컴파일러에
: : 불과한 게 현실이고, 파이썬에서 C++ 모듈을 사용하는 게 목적이라면 그냥 VC++ 컴파일러 이용하세요.
: :
: :
: :
:
: BCC32는 Boost 1.39.0버전, BCC32C는 Boost 1.55.0버전 인것을 보면, 컴파일러 종류에 따라 작업을 따로 한것 같습니다.
: 다음 버전에서는 Boost 가 최신것이 포팅 되어 포함되었으면 좋겠네요.
:
: 엠바 컴파일러가 마이너 컴파일러라서, 많은 최신의 유용하거나 최신기술을 사용할수 없다는 것은 큰 문제인것 같습니다,
:
: 마지막 문장이 엠바 컴파일러의 현실인듯 합니다.
: 최신의 좋은 라이브러리를 사용할수 없다는 점 때문에 VC++  을 사용해야 할것 같습니다.
:
: 답변 감사 합니다.
:


답변:


Rad Studio 다음 버전에서 Boost 최신버전이 포함되면 Python과의 바인딩이 가능할 거라는 헛된 기대 갖지마세요.
엠바에서 Get-It을 통해 배포하는 Boost는 Python과의 바인딩 모듈이 빠진채 컴파일 되어있는 라이브러리 형태로만 배포됩니다.

Boost를 이용해서 Python 바인딩 기능을 사용하려면 Jam 빌드시스템을 이용해서 컴파일해야 해서, 엠바가 파이썬 바인딩 기능을
지원하려 했다면, 엠바 컴파일러를 타겟으로 지원할 수 있도록 포팅한 Jam 빌드시스템도 같이 배포 되었어야 합니다.

확장자 .jam 파일은 일종의 스크립트 형식의 언어고, 이 언어를 파싱하기 위해, LALR 파싱 테크닉을 이용하는 yacc 파서 제네레이터를
이용해서 랭귀지 정의 파일인 jamgram.y 를 통해 1차적으로 .jam 파일을 파싱하는 jam0.exe 컴파일러를 빌드해서 만들고..
각기 컴파일러 타겟을 지원할 수 있도록 하는 빌드시스템을 만들기 위해, 먼저 빌드된 jam0.exe를 이용해서 최종 빌드시스템인
b2.exe 를 2차적으로 컴파일 해서 만들어 냅니다.  부트스트랩 과정을 거치는 거죠. yacc는 학부에서 컴파일러 이론 배울 때
밥 먹듯이 사용해 보셨을 테고.

엠바에서 Jam 빌드시스템을 포팅해서 배포한다고 하면 Python 바인딩 기능을 사용할 수 있을까요? 없습니다.

Boost를 이용해서 C++과 Python과의 바인딩 기능을 사용할 수 있으려면 파이썬의 설치 디렉토리에 있는 헤더파일들과
파이썬 라이브러리 파일이 컴파일 시 같이 링크 되어야 합니다.


그런데 여기엔 구조적인 문제가 있습니다.

배포되는 파이썬의 라이브러리 파일구조가 COFF 포맷 입니다.
확장자가 .a 인 아키브 형태의 라이브러리 파일이더라도 안에 포함되어있는 오브젝트 파일들도 COFF 포맷 입니다.
윈도우즈 플렛폼에서 사용되는 표준 오브젝트 파일포맷이 COFF 이기 때문에, 오픈소스 생태계에서도 이 포맷을 사용하는 거죠.

엠바 컴파일러는 참 골때립니다.

bcc32.exe 는 도스 시절에나 사용됐던 구닥다리 OMF 포맷. clang 을 포팅한 bcc32c.exe 와 bcc64.exe는 다를 까요?
같은 clang 오픈소스를 베껴서 컴파일러를 만들었음에도 불구하고 bcc32c.exe는 구닥다리 OMF 포맷을 사용하고,
bcc64.exe 는 리눅스에서 사용하는 ELF 포맷을 사용합니다. 거기다 디버깅 포맷 까지도 따로 국밥이죠.

엠바에서 Jam 빌드시스템을 포팅해서 배포한다고 하더라도, COFF 포맷인 파이썬 라이브러리 파일과 링크하는 게 불가능
하다는 겁니다. 따로 국밥으로 노는 bcc32, bcc32c, bcc64를 지원하기 위해선 Python까지 포팅해야 하는 닭짓을 해야 합니다.

엠바 컴파일러가 세계 각지의 개발자들로 부터 컴파일러 취급 받지 못하고 외면 받는 것은, 엠바 스스로 자초한 일 입니다.
컴파일러 3개를 따로 국밥으로 노는 괴상 망칙한 물건으로 만들어 놓았으니...

앞으로도... 윈도우즈 플렛폼 표준인 COFF 포맷 하나로 통합하지 않거나, 더 나아가서 소스코드 까지 오픈되어 있는
PDB 디버깅 포맷을 사용하지 않고 지금 처럼 폐쇄적인 닭짓을 계속한다면... 결과는 뻔한 거죠.

만들기 어려운 Modern C++ 컴파일러는 오픈소스 베껴서 만들고. 만들기 쉬운 파스칼에만 목을 매달고 있으니
메인스트림 컴파일러로 취급 받지도 못하면서 변방에 머물러 있을 수 밖에...

+ -

관련 글 리스트
74792 Boost 최신 버전을 사용할수 없나요? 뽀뽀중 3395 2018/02/07
74793     Re:Boost 최신 버전을 사용할수 없나요? 빌더(TWx) 3617 2018/02/11
74795         Re:Re:Boost 최신 버전을 사용할수 없나요? 뽀뽀중 3436 2018/02/12
74796             Re:Re:Re:엠바에 대한 기대요? 헛된 기대입니다 빌더(TWx) 3637 2018/02/14
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.