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

자유게시판
세상 살아가는 이야기들을 나누는 사랑방입니다.
[24128] 델파이 XE2, XE3, XE4... 라이브러리 재배치 유감.
박지훈.임프 [cbuilder] 12406 읽음    2013-08-18 12:51
델파이에서 모바일을 지원하기 위해 2년 전의 델파이 XE2 버전부터 기존 라이브러리에 변경이 많은데... 골치아프게도 매 버전마다 유닛의 루틴들과 타입 등을 옮기고 있다. 문제는 이게 윈도우 개발자의 입장에서는 필요한 것이 아니라는 것.

예를 들어 TScrollStyle 타입은 원래 StdCtrls 유닛에 있던 것인데, XE2 버전에부터 UIType이라는 새로운 유닛을 만들어 옮겨버렸다. XE3 버전까지는 양쪽 모두에 있는 상태에서 StdCtrls 쪽에는 deprecated 처리해놔서 워닝만 뜨고 컴파일이 되었었는데, 최신의 XE4 버전에서는 StdCtrls 쪽을 없애버려서 이 타입을 사용한 코드는 에러가 난다. 즉 두번 업그레이드 되는 동안 유예기간을 주고는 막아버린 것.

이런 예는 수도 없이 많다. StrLCopy 함수는 델파이의 첫 버전이 출시되었던 1995년부터 계속 SysUtils 유닛에 있던 함수인데, XE4에서 이것을 AnsiStrings라는 유닛을 만들어 옮겨버리고 기존의 SysUtils 함수는 deprecated 처리해놨다. StrLCopy 하나만이 아니라 당연히 비슷한 용도의 함수들은 다 그래놨는데, StrUpper, StrLower, StrPos, StrNew 등등. XE4의 SysUtils를 보면, 온통 컴파일러 지시어들과 deprecated 선언으로 도배가 되어서 소스가 아주 개차반이다. 그래도 당장은 워닝이 뜨고 컴파일이 되지만, 이것도 역시 XE6 버전 정도에서 없애서 결국 에러가 날 것.

이렇게 각 타입과 루틴들을 유닛들을 옮겨대는 이유는, 당연히 모바일 호환을 위한 라이브러리 재배치다. 즉 모바일에서 윈도우와 공유할 라이브러리 부분과 공유하지 않을 부분들을 분류하여 재배치하고 있는 것. 그런데 이런 라이브러리 재배치 작업이 여러 버전에 걸쳐 찔끔찔끔 일어나고 있어서 혼란이 적지 않고, 대형 코드 라이브러리들을 개발하고 관리해야 하는 입장에서는 델파이의 여러 버전 사이에서 호환성을 유지시키기 위한 작업이 장난이 아니다.

지금도 기존에 XE와 XE2에서 사용하던 서드파티 컴포넌트들을 XE4로 포팅하고 있는데, 제대로 컴파일하고 동작하게 하기 위해 컴파일러 지시어들로 도배를 하고 있다. 보통은 이런 작업이 많아도 짜증까지 내지는 않는데, 델파이의 모바일 지원이 마침내 완성될 2, 3년 후를 생각해보면 또 지금과도 다르게 라이브러리들이 온통 재배치되어 있을 것이고, 그때까지 매 버전이 새로 나올 때마다 이런 작업을 반복해야 한다는 게 열받는 거다.

이렇게 여기저기 찔끔찔끔 뜯어고쳐댈 것이라면, RTL 부분을 억지로 동일 소스 파일로 유지하려고 노력하기보단 차라리 모바일 지원을 위한 RTL 버전을 분리해버리는 게 맞다. SysUtils를 동일 소스 파일로 유지하면 뭐하나. 컴파일러 지시어로 도배질하고 나면 결과적으로 소스 파일을 두개나 그 이상으로 나눈 것과 결과적으로 동일한데다 더 지저분해지기만 할 뿐인데.

결국 엠바카데로의 델파이 개발팀에서도 최종적으로 델파이의 모바일 지원이 완성되었을 때 라이브러리가 어느정도까지 재배치될 것인지 현재로서는 모르는 셈. 이 근본적인 원인은, 델파이와 C++빌더의 버전업 주기가 매.년. 이라는 것이다. 모바일 지원이 최종 완성이 되지 않은 상태에서 당장 돌아가기만 하는 정도에서 새 버전이라고 출시를 해버리니, 고객인 개발자들도 완성되지 않은 버전을 사용하면서 매 버전마다 소스를 고쳐대야 하는 것이다. 이건 물론 델파이의 모바일 지원과 직접적인 관계가 있는 파이어몽키도 마찬가지다.

개발툴의 업그레이드 주기가 1년이라는 건 이래저래 폐해가 많다. 좀 사용할만 하면 다음 버전이 출시되어 압박을 받는 개발자들 입장에서 피로감을 느끼는 것은 물론, 이렇게 개발툴이 걸레가 되어버리는 것을 피하기가 어렵다. 실제로 델파이를 개발하고 있는 엠바카데로 스탭들의 입장에서도 불필요한 혼란과 '이 산이 아닌개벼?' 하는 경우도 자주 발생할 것이다.

매년 출시하던 걸 2년이나 3년 단위로 주기를 늘리면 엠바카데로 입장에서 매출이 줄어들까? 내 생각에는 전혀 매출 감소가 일어나지 않을 뿐더러 장기적으로는 긍정적인 영향이 더 많을 것.

델파이 개발팀 쪽에서 이런 문제를 모를 리는 절대로 없고. 엠바카데로에서 영업이나 마케팅 부문에서 반대를 하더라도 기술진 쪽에서 강력하게 밀어붙일 카리스마 있는 사람이 있어야 하는데, 얼마전에 유명한 마르코 칸투가 프로덕트 매니저로 영입되긴 했어도 그는 이런 문제를 강력하게 밀어붙일 사람이 못될 듯. 닉 하지스가 있었더라면...

하긴 이젠 아예 매년도 아니지. xe3 발표후 반년 정도밖에 안된 상태에서 xe4가 나왔고, 올 가을에 xe5가 나온다니 이젠 업그레이드 주기가 0.5년으로 줄어든 셈. 도대체 델파이 개발자들을 뭘로 보는 거냐. 마루타??
박지훈.임프 [cbuilder]   2013-08-18 12:51 X
비슷한 문제에 부딛힐 개발자들을 위해 써두자면... 이 빌어먹을 deprecated 때문에 일이 오히려 더 늘어난다. deprecated 처리를 하지 말고 아예 없애버리든지. deprecated 워닝을 받지 않기 위해 새 유닛 AnsiStrings를 uses하면, StrLCopy 하뭇가 이전 유닛인 SysUtils와 AnsiStrings 양쪽 모두에 있다고 Ambiguity 에러가 난다. 결국 StrLCopy 함수 앞에 AnsiStrings. 을 더 써넣어주는 수밖에 없다.

그런데 이 작업은 1, 2년쯤 지나 deprecated 기간이 끝나서 SysUtils에서 없어지고 나면 전혀 필요가 없어진다. deprecated된 버전은 없애버릴 거니까. 결국 deprecated 처리로 인해 오히려 일이 몇배로 늘어난다. 개발툴 벤더로서 deprecated 처리를 제대로 하는 방법은, 한 소스 파일에서 deprecated된 버전과 새 버전이 같이 uses 되어 있더라도 Ambiguity 에러는 내지 말아야 하는 것 아닌가.
박지훈.임프 [cbuilder]   2013-08-18 13:04 X
헐!!! TCharacter까지 deprecated되었네??? TCharacter 대신 TCharHelper를 쓰란다.

델파이2009 버전에서 도입하고 CHAR 관련 함수들 대신 TCharacter를 쓰라고 개발자들에게 가이드했던 게 바로 몇년전인데, 몇년 되지도 않아 deprecated시키다니. 이게 도대체 뭐하는 짓이냐.
조대현.Clau [casanebula]   2013-08-18 23:30 X
델7 이후부터는 개발팀의 방향이 실패한게 더 많은거 같습니다.
Kylix도 그렇고 2009(터보?)부터 도입된 새로운 IDE도 그렇고 각종 버그와 에러를 보자면 죽지 못해 땜빵해놓은 툴같습니다.

그래도 XE에서 많이 안정화 되었고 파스칼과 라이브러리 면에서 발전도 되서 정신차리나 했는데...
XE2부터 슬슬 몇가지는 삽질하는거 같습니다.

랭귀지와 라이브러리에서 발전하지 못했다면 IDE라도 발전했어야 하는데 거꾸로 가고있느니...
제발 선대에서 잘 가꾸어논 VCL은 왠만하면 안건들었으면 합니다ㅎㅎㅎ
죽음천사 [azrael]   2013-08-19 09:32 X
그 격변은 오래전 델파이5에서 6으로 넘어가면서 겪기고 했고, 2007에서 2009로 넘어가면서 겪었던 시련이기도 하네요. ㅎㅎㅎ
이번 XE4는 iOS, Android통합이라 라이브러리 재구성이 사실 필연적일 수도 있지만, 앞으로도 계속 이런식이면 델파이 업계에서는 새 버전이 마냥 반갑지 않을 수도... (특히 컴포넌트 제작회사는 더더욱...)
안짐 [dexter]   2013-08-19 09:46 X
오히려 이런게 매출감소 요인이 되는듯한데요 저같은경우도 xe2이후로 일부러 업글을 미루고있는데.....
양병규 [bkyang]   2013-08-19 11:04 X

저는 One Source Multi Platform이 맘에 안듭니다.
지나친 욕심인 것 같습니다.

그냥 각 플랫폼에 최적화된 플래임웍을 따로 따로 만드는 게 가장 좋다고 생각합니다.
Windows, OSX, iOS, Android는 생김새도 많이 다르고 용도도 완전히 똑같지 않아서 한 소스로 컴파일만 다시해서 모든 플랫폼용으로 만들어 내는 것은 의미가 없을 것 같습니다. 어차피 각 플랫폼마다 따로 따로 손을 봐야합니다.
그저 개발 방법만 통일시키는 것은 초보개발자들이나 좋아할 일이라고 생각합니다.

더군다나 파이어몽키가 Common Control을 사용하지 않고 모든 콘트롤을 자체적으로 구현한 것은 정말이지 바보같은 생각인 것 같습니다.

저는 델파이의 가장 큰 불만이,
개발자들이 User Interface인 폼 안에다가 비지니스로직을 포함한 모든 코드를 작성해 넣기 편리하도록 델파이가 디자인되었다는 점이 가장 큰 불만입니다. RAD툴의 특성일 수도 있겠지만, 조금만 그 부분에 신경을 쓴다면 얼마든지 장치를 마련할 수도 있는데말이죠.

한 소스로 여러 플랫폼을 지원하기 위해서 플레임웍을 하나로 통일하는 것은 그 문제를 더 악화시킬 수 있다고 봅니다.
차라리 플랫폼마다 소스가 다르다면 화면 콘트롤이나 파일입출력등은 따로 독립을 안시킬 수가 없을테니 자연스럽게 비지니스로직하고 분리가 될텐데 말이죠.


이제라도 파이어몽키도 아닌, One Source Multi Platform도 아닌,
각 플랫폼에 최적화된 플래임웍을 사용하는 버전의 델파이가 있었으면 좋겠습니다.
그걸 먼저 발표하고 나서 현재 버전을 조금 천천히 발표하는 게 어떨까 싶습니다.

에휴..... 답답해......
박지훈.임프 [cbuilder]   2013-08-19 21:06 X
사실 XE 버전까지 올라가면서도 여러번 삽질이 있기는 했지만, 득보다 실이 많았을지언정 나름 의미가 있는 변경들이긴 했습니다.
그런데 XE2부터 변경된 부분들은, 도무지 윈도우 개발자들에겐 거의 도움도 안되면서 이것저것 바꾸고 뜯어고치기만 합니다.

장단점이 모두 수두룩한 델파이, C++빌더의 가장 큰 미덕은, 새로운 기능을 지원하더라도 기존의 기능들과 사용법, UI, 프로그래밍 인터페이스는 최대한 개발자가 수정하지 않아도 되도록 최대한의 배려를 한다는 거였는데요. 이런 고객 개발자들에 대한 배려가 2009 버전에서 유니코드를 지원하면서 크게 한번 흔들리기는 했어도 전체적으로 오랫동안 지켜져 왔죠.

그런데 XE2부터는 이런 배려가 찾아보기 힘듭니다. 당장 파이어몽키만 해도, XE2에서 개발한 소스가 바로 다음 버전인 XE3에서 줄줄이 에러가 납니다. 위에서 썼다시피 수십년동안 자리를 잡아 정착한 오래된 라이브러리들을 일정한 일관성도 없이 여기저기 뜯어붙이고 옮기고 하기도 했고요.

델파이 언어의 모바일 지원 문서를 보면, 마르코 칸투는 '몇몇 변한 것 외엔 모두다 그대로다!'라는 것을 강조하는데, 물론 변한 것들이 몇가지 안되기는 하지만 그것들이 델파이 언어의 정체성이 상당부분 흔들릴 정도로 너무도 오랜 기간동안 정착된 것들이기 때문에 크게 와닿지도 않습니다.

모바일 지원을 위해 델파이 언어에 그렇게 이질적인 요소들을 도입하고 아예 컴파일러를 별도로 만들 정도인데, 뭐하러 RTL 라이브러리를 단일 소스로 유지하려고 그 어마어마한 삽질을 하고 있는지 모르겠습니다. 더 핵심인 컴파일러는 분리되면서 라이브러리는 억지로 붙여놓은, 주객이 전도된 이상한 모양새. 게다가 윈도우 개발자들의 입장에서는 아무런 이득도 없이 쓸데 없는 삽질만 반복하게 만들고 말입니다.

쓰다보니 논조가 너무 비판적으로 가게 됐는데, 몇번 다시 생각해봐도 다른 답이 안보이네요. 모바일이 아닌 윈도우 개발을 위해서는 XE면 충분하고 그 이후 버전에서 딱히 더 추가된 기능도 없습니다. XE2에서 도입된 유닛 이름의 네임스페이스 기능도, 따지고 보면 모바일 지원을 위해 라이브러리 유닛들을 카테고리화한 것에 불과하고요.

XE2 이후로 또 하나 심각한 디버거 버그가 생겼는데, 어이없게도 XE4에 이르도록 전혀 수정되지 않은 상태입니다. 유닛이 많은 프로젝트를, 거기서 사용하는 패키지와 같은 프로젝트 그룹으로 디버깅하다보면 어느 순간 돌발적으로 디버거가 오동작합니다. 잡아놓은 소스 브레이크포인트로 잘 디버깅이 되다가 다시 디버그해보면 뜬금없이 어셈블리창으로 브레이크포인트가 잡히기도 하고, 다시 디버그해보면 다시 소스로 돌아가기도 하고요. 어떨 때는 컨트롤 F2로 리셋하고 나면 디버그 엔진이 맛이 가서 델파이를 다시 시작해야 하기도 하고요.

이런 현상은, 디버그하는 프로젝트에서 참조되는 패키지를 프로젝트 그룹에서 제거해버리면 싹 사라집니다. 문제는, 저같이 컴포넌트나 라이브러리를 복잡하게 다단계로 개발해서 프로젝트를 구성하는 개발자들에게는, 이렇게 패키지를 그룹에서 제외시키고 나면 뭘 어떻게 할 방법이 사라진다는 겁니다. 이 에러가 발생할 때 오류 메시지를 보면, XE2에서부터 OSX와 iOS를 지원하느라 디버거를 대폭 뜯어고치면서 이전에는 없던 버그가 새로 생긴 거라는 걸 알 수 있습니다.

제 개인적인 의견으로 하나의 기준을 제시하자면, 모바일 개발을 당장 델파이나 C++빌더로 할 것이 아니면 XE 이하 버전을 사용해서 개발하는 게 정답일 것 같습니다. 기존에 사용하던 구 버전들에 비해 쓸데 없는 변경 사항도 적고, 컴파일러와 IDE 모두 많이 안정화되었고요. 그 이후 버전에서는 윈도우 개발자로서는 너무나 불필요한 변경 사항들이 많고, 짜증나는 버그들도 많습니다.

전에 XE3 버전 출시때쯤이었던가, 파이어몽키에 대해 언급하면서 XE5 정도 버전쯤이면 안정화되지 않을까 했었는데요. 일단 안드로이드 지원이 단시간에 추가된 때문에 XE5에서 안정화는 물건너갔다고 보고요. 파이어몽키 문제는 문제도 아닐 정도로, 컴파일러와 기존 라이브러리를 계속 뜯어고치고 있는 탓에 안정화는 앞으로도 서너 버전은 더 거쳐야 가능하다고 봅니다.

+ -

관련 글 리스트
24128 델파이 XE2, XE3, XE4... 라이브러리 재배치 유감. 박지훈.임프 12406 2013/08/18
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.