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

자유게시판
세상 살아가는 이야기들을 나누는 사랑방입니다.
[1942] Delphi하구 C++Builder하구 성능에 차이가 있을까....
박지훈.임프 [cbuilder] 4648 읽음    2001-09-22 03:09
임프랍니다.

며칠 전에도, 한델에 두 개발툴을 비교를 부탁하는 글이 올라와서 답변을 하고, 또 여기에도 다시 올렸었는데...
오늘 보니 또 델마당에 비슷한, 하지만 조금은 다른 질문이 올라왔더군요.
그냥 저번 답변을 처억 갖다붙이고 말까.. 하다가, 이번 질문은 퍼포먼스 비교가 메인이어서, 다시 글을
써봤습니다.

C++Builder가 관련된 글인데 여기 안올릴 수 없겠지요?
다시 긁어다 붙입니다. 처억~~

http://www.delmadang.com/cwb-bin/CrazyWWWBoard.cgi?mode=read&num=9811&db=dmdtalk&backdepth=1
---------------------------------------------------------------------------------
VCL로만 작성할 경우 아래 양병규님이 말씀하신 것이 대체로 맞습니다.
VCL을 사용할 경우 C++Builder와 델파이가 만들어내는 코드는 동일합니다.
적어도 VCL 코드 자체만은 기계어 레벨까지 같아집니다. 그렇게 되는 이유는
C++Builder에 델파이 컴파일러인 dcc32.exe가 포함되어 있고, C++Builder에서
파스칼 코드를 컴파일하는 것은 이넘이기 때문이지요.
(C++Builder에는 C++ 컴파일러와 파스칼 컴파일러가 모두 포함되어 있습니다.)
그래서 나오는 코드가 dcu이건 obj이건 vcl에서 나온 기계어 코드는 완전히
동일합니다. 사실 델파이에 포함된 dcc32.exe에서도 C++ 헤더파일과 obj
파일을 생성할 수 있습니다.

그리고...
조그만 변수 몇개 사용까지도 중요한 아주 크리티컬한 문제가 아니라면
리소스 문제는 C++을 사용하든 파스칼을 사용하든 별로 큰 차이가 없습니다.

조그만 차이가 생기는 이유는 C++의 유연한 표현력 때문입니다. 변수 몇개를
더 사용해야 하는가 아닌가의 차이가 복합문을 만들 수 있는가 없는가에
달려있습니다.

단지, C++이 근원적으로 시스템 프로그래밍 언어로서 만들어졌다는 점은
간과할 수 없습니다. 자원에 대단히 크리티컬한 문제를 접하게 되면 C++과
파스칼의 차이는 극명하게 벌여집니다.

예를 들어서, 몇메가 단위의 크기의 문자열을 파싱한다고 합시다.
이것을 델파이 스트링으로 파싱하려면 대단히 비효율적인 코드가 됩니다.
안시스트링은 그 막강한 범용성만큼 미션 크리티컬한 작업에는 약합니다.
이런 경우 C/C++의 Null-terminated string(델파이의 PChar)을 효율적으로
사용하면 최상의 결과를 얻을 수 있습니다.

실제로 웹 프로그래밍에서 업로드 파싱을 다룰 때는 몇백메가가 되기도 합니다.
이런 경우에 안시스트링을 사용하면 일단 메모리 할당 때문에 시간을 십몇초
정도 더 먹음은 물론, 새로 할당되는 메모리를 스와핑하기 위해 서버가
무지하게 버벅거리게 됩니다. 서버에서는 최대한 피해야 하는 경우이지요.
물론 C++로 작성한 코드가 얼마나 최적화되느냐는 프로그래머의 능력에 달려
있겠지요. 제가 C++로 작성한 업로드 파싱 클래스에서는 단 한번도 메모리
할당과 포인터 역진행이 없습니다.

서버프로그래밍을 위한 제 개인 라이브러리 중 대부분이 델파이로 작성되어
있지만 이런 파싱 루틴들과 같이 퍼포먼스가 크리티컬할 때만은 C++로 작성
합니다. 물론 그중 몇개는 델파이 버전도 만들었었고, 양쪽의 벤치마크도
수없이 했습니다. 퍼포먼스가 그만큼 중요한 작업들이니까요.

물론 델파이에서도 PChar를 쓰면 알고리즘 레벨에서 C++의 포인터 연산을
동일하게 할 수 있습니다. 하지만 어디까지나 알고리즘 레벨입니다.
소스레벨에서 C++만큼 최적화할 수는 없습니다. C/C++은 유연성과 시스템
접근성이 최대의 무기인만큼 이 분야에서는 따라올 언어가 없습니다.

이곳에는 델파이 프로그래머가 절대다수이신데, 이런 발언에 흥분하실
필요는 없습니다. 일단 저 또한 델파이 프로그래머이기도 합니다.
지금까지 프로젝트의 반은 델파이로 해왔고, 대부분의 경우 한 프로젝트에서
델파이와 C++Builder를 섞어서 써왔습니다.
그렇게 했던 이유는, 역시 델파이도 C++이 따라오지 못할 장점이 있기 때문
입니다.

델파이와 C++Builder의 차이는 그야말로 오브젝트 파스칼과 C++의 차이입니다.
가장 중요한 두 언어의 차이점을 종종 많은 분들이 간과하시는데, C/C++은
원래 범용 언어로 만들어진 것이 아니고 파스칼은 범용언어로서 만들어진
것이라는 것입니다. 범용언어는 어떤 상황에서도 평균 이상의 개발 퍼포먼스와
실행 퍼포먼스를 가져야 하지만, 시스템 프로그래밍에 특화된 C/C++에서는
그런 점들을 고려할 필요가 없었습니다. 애초에 C/C++은 당시에 실무에서
가장 많이 사용되고 있던 포트란이나 코볼을 대체하기 위한 것이 아니라
어셈블리를 대체하기 위해 만들어진 것입니다. 그런만큼 퍼포먼스 최적화
가능성에 대한한 C/C++에 파스칼을 비교하는 것은 무의미합니다.
물론 파스칼이 볼랜드에 의해 오브젝트 파스칼, 현재의 델파이로 발전해오는
동안 C/C++의 많은 특징들을 차용해 점점 더 강력한 언어로 만들어왔습니다만,
언어 자체의 근원적인 설계방향만은 바꿀 수가 없지요.
예를 들어서, 지금의 델파이에 더 성능을 강화하겠다고 C++의 포인터들이
복잡하게 얽혀있는 복합문 구조를 도입한다면 그것은 더이상 파스칼이 아닐
것입니다.

파스칼은 C++에 비해 문법구조가 구조적입니다. 거꾸로 말하면 딱딱하고
유연하지 못하다는 말도 되지만, 그만큼 C++에 비해 더 논리적입니다.
다시 말해, 초보자의 입장에서 더 빨리 배울 수 있고, 적은 퍼포먼스의
차이가 크리티컬하지 않은 프로젝트라면 델파이를 사용하는 것이 개발 기간
면에서 더 낫다는 것입니다.

가끔, 오브젝트 파스칼이 C++을 모든 면에서 동등하거나 뛰어넘는다는 델파이
매니아분들의 글이 올라오는 것을 보아왔습니다. 듣기 거북하실지도 모르겠
습니다만, 오브젝트 파스칼이 C++이 C를 완전히 포함했듯이 C++에서 출발한
언어가 아닌 한, C++을 모든 면에서 대등하거나 우월하다는 것은 불가능합니다.
물론, 그 반대로, C++이 오브젝트 파스칼에 대해서도 마찬가지입니다.
두 언어의 치이는 단순히 키워드 몇개의 차이가 아니기 때문입니다.
델파이와 C++Builder에서 동일한 알고리즘으로 코드를 작성해도, 각각
소스레벨에서 최대한 최적화했을 때는 양쪽의 코드 모양도 엄청 달라지고
퍼포먼스의 차이도 상당히 벌어질 수 있습니다.

성능이 아주 크리티컬하지 않은 작업이 대부분인 경우에 특별히 C++이 더
익숙하지 않다면 델파이를 쓰는 것이 낫습니다.
더 짧은 시간 내에 프로젝트를 완료할 수 있지요.

C++을 범용 언어로 생각하고 공부하시고 개발하시는 분도 많습니다.
시스템 접근언어치고는 범용성이 아주 좋은 편이니까 그것도 가능합니다.
하지만, 역시 범용언어로서 권장하고 싶은 것은 델파이입니다.
또, 정말 최고의 퍼포먼스가 중요한 작업이라면 C++이 최적입니다.
이것은, 디비 프로그래밍에 있어서는 델파이나 C++Builder가 파워빌더를 따라갈
수가 없는 것과 마찬가지의 이치이지요.

아, 한가지 더 말씀드리면, 똑같은 알고리즘을 양쪽의 문법상 대등한 키워드로
똑같이 코딩하면, 보통 델파이로 작성한 루틴이 C++로 작성한 루틴보다 아주!
조금 더 빠릅니다.
하지만 역시, 소스레벨 최적화가 어느정도 가능하느냐는 감안하지 않은
결과입니다.


델피언 님이 올리신 글-----------------------
> 가끔 게시판에서 보면 저수준 처리를 하거나 리소스 문제에 부디칠 경우Delphi대신 C++Builder를 사용하라는 글을 보곤합니다.
>
> 내부적으로 사용하는 .bpl수준 또는 .dcu 수준에서 완벽하게 호환이 되는 줄 알았는데... 조금 다른가 보죠??
> 아님 클래스 구성만 유사하게 만들어 놓구서 개발자입장에서는 개념상 비슷하게 사용하도록 유도하는 것인지...
>
> 아님 내부적으로 기계어 수준까지 완벽하게 동일한 것인지 궁금하네요...
> 정리를 하자면 말만 Pascal, C++ 차이가 있고 내부적으로는 같은 방식으로 처리되는 것인지 아니면 클래스 구조를 같은 VCL로 사용하는 서로 다른 체계인지가 궁금합니다.



관련 글 리스트
1942 Delphi하구 C++Builder하구 성능에 차이가 있을까.... 박지훈.임프 4648 2001/09/22
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.