C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
분야별 포럼
C++빌더
델파이
파이어몽키
C/C++
프리파스칼
파이어버드
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

자유게시판
세상 살아가는 이야기들을 나누는 사랑방입니다.
[26052] Re:C++빌더와 델파이...
박지훈.임프 [cbuilder] 2511 읽음    2016-06-22 01:02
댓글로 쓰다가 너무 길어져서 답변글로 다시 옮겨씁니다. 링크하신 주소에 나온 에러메시지들로 보면 모두 사소하거나 약간의 소스 수정으로 C++빌더에서도 컴파일할 수 있는 부분들입니다. 물론 그걸 다 모르면 못쓸 수밖에 없기는 합니다만.

델파이 코드를 C++빌더에서 컴파일할 수 없는 가장 대표적인 경우가 E1025 Unsupported language feature: 'Object' 에러입니다. 아주 고질적인 문제죠. 델파이의 object 키워드는 터보파스칼에서 오브젝트 파스칼로 문법이 진화하면서 도입된 키워드로 최근의 델파이 개발자들 사이에서는 거의 안쓰입니다. 실제로 델파이의 헬프나 도큐먼트에도, 아주 오래전부터 object 키워드는 하위 호환성을 위해서만 지원되는 것이므로 쓰지 말라고 되어 있습니다. 그럼에도 간혹 터보파스칼 출신의 올드한 개발자들이 사용하는 경우가 있습니다. (국내에서 이 Object 키워드를 남발하시는 분으로 류종택님이 있습니다 ㅋㅋ)

바로 이 Object 키워드를 C++빌더에 포함된 hpp 생성 로직에서 처리하지 못하는데요. 저 역시 과거에는 이 Object 키워드 때문에 델파이 라이브러리를 C++빌더에서 사용하는 데에 어려움을 많이 겪거나 아예 불가능한 경우도 종종 있었습니다. 그건, Object와 class의 특성이 꽤 다르기 때문에, Object로 설계해놓은 것을 단순히 class로 키워드를 바꿔서는 버그가 발생하는 경우가 대부분이어서입니다. (class는 히프에 생성, object는 스택에 생성되는데, 이 단순한 차이로부터 동작상에 상당히 큰 파생적 차이점들이 생깁니다)

하지만 델파이/C++빌더 2006 버전이 나오던 시점부터 이런 사정이 바뀌었습니다. 델파이의 record 키워드에 메쏘드, 그러니까 멤버 함수가 지원되도록 델파이 문법이 확장되었거든요. class와 달리 구 파스칼 기반인 record와 object은 둘 다 스택에 생성되고 둘 다 기본 생성자를 가지지 않습니다. 따라서 record가 멤버 함수까지 가지게 되면 사실상 object와 문법적 효과가 동일해집니다. 따라서 위와 같은 에러를 보면, 그대로 소스를 열어 object라고 선언된 부분을 record로 변경하면 모든 게 해결됩니다. 그대로 다 컴파일되고 동작도 원 개발자가 설계한 그대로 동작합니다.

이에 대해서는 2006 버전 발표 당시에도 제가 간단히 소개를 했던 적이 있습니다.
http://www.borlandforum.com/impboard/impboard.dll?action=read&db=free&no=12428

이 외에 다른 에러메시지들은, 직접 소스를 열어봐야만 하겠지만 비교적 사소하게 보입니다. 예를 들어 Declaration of ... differs from previous declaration과 같은 에러는 대부분의 경우 약간의 코드 재배치 등으로 없앨 수 있는 에러입니다. 이 부분들은 델파이 문법을 가볍게 아는 개발자도 코드의 맥락만 이해하면 그리 어렵지 않게 수정할 수 있습니다. 바로 위 object 키워드 문제에 비하면 아무것도 아닌 사소한 수준이죠. 그 아래의 Warning들이야 말 그대로 워닝이니까 단순히 경고로서 컴파일에 문제가 생기는 건 아니고요. (일부는 C++빌더여서가 아니라 개발자의 단순 실수가 의심되는 부분도 있습니다)

물론 대부분의 C++ 개발자들은 델파이 문법의 큰 흐름은 알더라도 Object 같은 deprecated에 가까운 소소한 문법까지 해결방법을 알기는 어려운 면이 있습니다. 링크하신 글을 쓴 개발자가 mORMot를 C++빌더에서 사용할 수 없다고 한 것이나 mORMot측 개발자들이 그에 대한 해결책을 제시하지 못한 것도 그런 이유입니다. 불행히도 mORMot에 관계된 개발자들중에 C++과 델파이 문법에 모두 뛰어난 개발자가 없어서 해결을 못한 거죠.

그래서 결론적으로 말하자면, 델파이 문법을 전혀 모르는 사람들은 못쓰는 거 아니냐, 하면 그 말씀은 당연히 맞습니다. 하지만 제가 수많은 라이브러리, 프레임워크 소스들을 다뤄본 경험으로 보면, C++빌더에서 해결 방법이 아예 없는 경우는 한번도 없었습니다. 물론 mORMot가 상당한 규모이기는 하지만, 그보다 더 복잡하거나 더 난잡하고 레거시하거나 훨씬 더 대규모의 라이브러리들도 모두 약간의 수정만으로 C++빌더용 라이브러리 빌드를 했었습니다.

사실은, 제가 mORMot를 2년전인가에 대략이나마 평가를 할 때, 구체적으로 기억나지는 않지만 당시에 C++빌더용 라이브러리 빌드도 동시에 했었습니다. (저는 새로운 델파이용 라이브러리를 테스트할 때마다 보통 C++빌더 라이브러리 빌드도 함께 합니다) 저도 약간의 어려움을 겪기는 했지만 그렇게 아주 오랜 시간이 걸리지는 않았던 걸로 기억합니다.

다만.. 혹시라도 제게 mORMot 문제를 부탁하신다면 그건 좀 곤란하겠습니다. 저로서는 여러가지 검토 끝에 제게는 mORMot가 맞지 않다는 결론을 내리고 삭제해버렸고, 다시 작업을 해보기에는 단순 Q/A 수준을 넘어가는 덩어리 작업이라 제 시간을 빼서 다시 시도하기에는 좀 무리가 많습니다. 다만 가능하다는 것은 확실합니다.



최평안 님이 쓰신 글 :
: 안녕하세요.
:
: 델파이에서 할 수 있는 작업은 C++ 빌더에서도 할 수 있는 건가요?
: 안되는 것이 있다면 어떤 것인지 알려주시면 감사하겠습니다.
:
: 감사합니다.
Observer [bangco]   2016-06-23 20:26 X
상세한 정보 감사합니다. 해외 개발자들도 빌더에서는 못한다고 해서(심지어 만든애들까지도 빌더 지원계획은 없고 불가능하다고 밝힌적 있었죠) 불가능한줄 알았네요. 저도 함 시도해보겠습니다^^

+ -

관련 글 리스트
26047 C++빌더와 델파이... 최평안 2737 2016/06/12
26052     Re:C++빌더와 델파이... 박지훈.임프 2511 2016/06/22
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.