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

자유게시판
세상 살아가는 이야기들을 나누는 사랑방입니다.
[13479] 도쿄에서 열린 코드기어 디벨로퍼 캠프를 다녀왔습니다.
김상구.패패루 [peperu] 3198 읽음    2007-10-23 23:40
아... 무척 지치는군요.

오전에는 공통세션으로 2개의 세션이 진행됐고 오후에는 A,B 둘로 나뉘어서 4개의 세션, 저녁 6시30분부터는 Delphi Hour in Tokyo가 진행됐습니다. 전세계 인터넷 생중계 ^^
총 11개 세션이 진행된거군요. 저는 총 6개 세션이 들어갔습니다.

결론부터 얘기하면 한두가지 건진것도 있고, 희망적인 얘기도 들었고, 우려스러운 얘기도 들었고, 실망스러운 세션도 있었습니다.

아마도 닉호지스가 진행한 공통세션 및 ASP.NET 2.0을 이용한 웹 어플리케이션 개발은 한국에서 열린 세미나와 거의 일치하리라 봅니다.

오늘 세미나는 대체적으로 커뮤니티 대표로 나온 사람들이 진행한 세션들이 알맹이가 없었습니다.
C++빌더 세션으로는 wxWidgets기반 개발에 대한거였는데 솔직히 왜 코드기어 행사에서 그걸 다루는지 이해가 안 되더군요. 단지 상용으로 판매되는 C++빌더 플러그인인 TwinForms 솔루션을 이용해서 빌더에서 wxWidgets 프로그램을 만들 수 있다는걸 보여주고 싶었던 것 같은데 뭔가 주객이 전도된 듯한 느낌이 드는 데다가 프리젠테이션 자료도 별 알맹이가 없고, 필요하면 직접 찾아보면 되겠다 싶어서 코드기어의 Ruby개발툴인 3rd Rail 세션으로 이동했습니다만... 3rd Rails는 구경도 못하고 Java랑 Ruby얘기만 실컷 들었네요. -_-...
연사가 From Java to Ruby라는 책을 일본어로 번역한 친구였습니다. 아마도 제가 참여하지 않은 첫번째 공통세션에서 대충 데모가 있었던 것 같은데... 결국 전 구경도 못했네요.

Delphi for PHP도 마찬가지였습니다. 시종일관 LAMP(Linux + Apache + MySQL + PHP) 얘기만 하다가 Delphi for PHP를 쓰면 좋겠더라... 얘기 한 번 하고 나머지는 MySQL 칭찬... 물론 같은 시간에 Interbase세션이 진행되고 있었습니다만... 그 친구는 대체 왜 나왔는지 모르겠더군요. 역시나 Delphi for PHP는 구경도 못했습니다.
단지 흥미로운 몇가지 통계치는 있었습니다. WebServer분포 - Apache: 73.62%, IIS: 19.40%

일본인이 나와서 하는 세션중 하나 괜찮았던건 RTL 컴파일하기...
즉, Rad Studio에 있는 RTL 소스를 이용해서 RTL을 새로 컴파일 하는 방법에 대한거였습니다. Delphi의 경우 Release Build와 Debug Build의 두가지 버전의 RTL 및 VCL이 기본 포함돼 있기 때문에 자기가 직접 RTL 및 VCL소스를 수정해서 사용하는 경우가 아니면 다시 컴파일 할 일이 별로 없지만 빌더의 경우는 Release빌드만 포함돼 있기 때문에 DEBUG옵션을 줘서 재컴파일 한 뒤 디버깅에 활용할 수 있는 꽤 괜찮은 내용이었습니다.
의외로 방법은 간단하더군요.
빌더는 source\cpprtl로 이동해서 path에 tools 폴더 추가하고 (path %path%;%cd%\tools) build.bat를 실행하는걸로 끝입니다. 디버깅 할땐 set DEBUG=1 하고 나서 build하면 됩니다. 컴파일 시간은 꽤 오래 걸리더군요. RTL만 10분 이상 걸립니다.
델파이는 source\win32\rtl 경로에서 mkdir lib 해서 lib폴더 수동으로 만들어준 후 make. 디버깅옵션으로 할땐 set debug=1 하고 난 뒤 make -B
컴파일 속도 죽이더군요. RTL전체 컴파일 하는데 체감상 10초도 안걸린거같습니다.
의외로 재밌는 내용이 많아서 꽤 위로가 됐습니다.

오전에 공통세션 끝나고 나서 닉호지스한테 가서 '아까 발표중에 티뷰론의 유니코드 지원을 위한 스트링 클래스를 만들고 있다고 했는데 그게 WideString이 아니라 새로 개발되는거냐' 물었더니... 그렇답니다. 역시 Reference 카운터가 없어서 발생하는 WideString의 메모리 복사 문제는 코드기어측도 제대로 인식하고 있더군요. 이 시점에서는 무척 기분이 좋아졌습니다만...
오후 6시30분부터 진행된 Delphi Hour에서 일본친구가 비슷한 질문을 했고, 현재 Unicode쪽 개발에 참여중인 일본인 개발자가 직접 나와서 그 부분에 대한 답변을 했는데... 현재 여러가지를 시도하고 있다고 하더군요. 옵션에 따라 String이 AnsiString 또는 새로 개발되는 UnicodeString으로 전환이 되는걸 시도하는데 뭐 여러가지 문제가 있답니다. 그래서 생각중인게 AnsiString을 수정해서 CharSet을 추가로 저장하도록 하는걸 연구중이랍니다... 오마이갓....
아... 무지 걱정됩니다. 시도하고 있다는 두가지 방법 모두 너무 위험해 보입니다.

Unicode기반으로 프로그램을 많이 작성해 보신 분들은 아시겠지만... Unicode기반이라고 해서 AnsiString이 필요없는게 아닙니다. 프로그램 내부에서는 대부분 UCS2로 데이터가 유통되지만 외부 입출력, 혹은 네트워크를 경우하는 데이터는 UTF-8, ANSI 등 다양한 방식을 쓰기 마련인데... 이런 경우는 당연히 AnsiString이 다루기 쉽죠.
제가 선호하는 Unicode구현방식은... 새로운 UnicodeString 클래스는 BSTR을 고려하지 않는 AnsiString과 비슷한 구조의 Reference count를 지원하는 UCS2 기반. 기존 WideString버전, AnsiString버전이 따로 존재하는 함수는 모두 UnicodeString버전으로 통합, VCL Control은 전부 UnicodeString기반으로 대체, 그러나 AnsiString은 그대로 사용 가능한 형태... 입니다만...
물론 영어권 사용자의 반발이 예상됩니다. 하지만 메모리를 두배 차지하는 대신 성능면에서는 월등해집니다. AnsiString처럼 Leading / Trailed byte계산이 필요 없기 때문에 그만큼 구조가 단순해지죠.

아무래도 내일부터라도 Unicode지원방식에 대해서 제 의견을 구체적으로 정리해서 적어봐야겠습니다. 영어로 번역해서 코드기어로 보내볼랍니다. 답답하네요. 제발이지... AnsiString 개조해서 처리하는 방법만큼은 안했으면 합니다. AnsiString 걸레됩니다. 성능은 성능대로 떨어지고 쓰기는 불편해지고... 코드기어에서 이번만큼은 좀 과감한 결정을 내렸으면 좋겠는데...

기분 꿀꿀합니다.
김상구.패패루 [peperu]   2007-10-24 01:00 X
유니코드 지원에 대해 관심있으신 다른 분들의 의견도 듣고싶네요. 위에 적은 내용은 제 개인적인 경험만을 바탕으로 한 '선호도' 수준의 의견일 뿐입니다. 사실... 세미나 장소에서 뭔가 의견을 이야기 하고 싶다는 생각은 굴뚝같았습니다만... 스스로도 '어떤 방식이 좋다' 라는 결론을 내릴 수가 없더군요. 그런 의미에서 저도 정리가 필요한것 같습니다. 다른 사람들이 선호하는 것 까지 고려하는것은 주제넘은 짓이고, 일단 저 스스로가 원하는게 뭔지부터...
김도완 [purplecofe2]   2007-10-24 01:50 X
자세한 것은 모르지만,
윈도우즈 NT 커널에서는 문자열이 유니코드로 처리되는 것으로 알고 있습니다.
중간에 ANSI버전의 API들은 컨버전을 거쳐 변환된 유니코드가 커널에 전달되는 것 같은데, 그냥 잠시 살펴본 것이라 확실히는 모르겠네요.
유니코드로 만든다면 중간에 컨버전 오버헤드가 줄어들어 성능적인 면에서는 더 좋은 결과를 주게될 것 같습니다.
유니코드로 가려는 이유가 크로스 플랫폼도 생각하는 것 같습니다.
리눅스의 경우에는 유니코드가 기본이니 말이죠.
widestring 레퍼런스 카운터 문제는 모르고 있었네요.
박지훈.임프 [cbuilder]   2007-10-24 07:21 X
패패루님이 지금 일본에서 미국 회사의 일본 지사에 근무하고 있는데, 그래서 현지화 관련으로 유니코드 관련 작업을 많이 하고 계시죠.

패패루님과 유니코드 관련 얘기들을 많이 해했었는데, 위의 글에서 "메모리를 두배 차지하는 대신 성능면에서는 월등해집니다"라고 말씀하신 게 바로 NT 커널의 기본 문자열 처리가 유니코드이기 때문라고 하더군요.

근데 빼빼루, 그러면 니가 한번 코드기어에 구현할 방식을 제안해보면 어때? 내 생각에 그쪽에는 유니코드를 직접 사용하는 개발자가 거의 없어서 향후에 발생할 수 있는 문제에 대해 고려가 좀 부족할 거 같은데. 여러해 동안 유니코드 관련으로 가장 많은 고민을 한 니가 직접 구현 방법을 제안하는 것 이상의 좋은 결과 있을까?

아니... 아예 코드기어에 지원해보면 어때? 마침 코드기어에서 개발자를 구하더군!
http://blogs.codegear.com/michaeldevery/2007/10/19/33778/

요즘 니 고민이 지금 회사에서 재미가 떨어져간다는 거였잖어. 어차피 일본에서 미국회사에 일하나, 미국에서 일하나 별 차이가 있을 거 같지도 않구. 결혼도 안했으니 훌훌 미국으로 건너가서 지대루 재밌는 개발 해보는 것도 좋지 않겠냐? 마침 C++빌더 프로덕트 매니저도 대단한 사람을 영입해서 C++빌더 쪽으로 더욱 강화하려고 하는 거 같던데.

니가 지원한다면, 통할지는 몰라도 포럼 명의로 해서 코드기어로 추천 메일은 확 날려주겠어.
이거 농담 절대루 아님. 나 지금 진지 모드.
김상구.패패루 [peperu]   2007-10-24 08:57 X
-_-;;; 요즘 다시 재밌어질라구 하거덩? 그리고 미국은 무서워...
박지훈.임프 [cbuilder]   2007-10-24 09:08 X
짜쉭 떨기는... 쳇!
그럼 멋진 구현방안이나 빨랑 고안해서 제안해바~!
Lyn [tohnokanna]   2007-10-24 09:10 X
NT이상의 커널에선 A함수나 W함수나 Native API를 콜하고 있을 뿐이라던..
김상구.패패루 [peperu]   2007-10-24 09:17 X
그리고... 내실력에 무슨... 내실력은 내가 안다!
김도완 [purplecofe2]   2007-10-24 10:22 X
혹시 문자열 레퍼런스 문제가 이것이던가요?

http://delphi.newswhat.com/geoxml/forumhistorythread?groupname=borland.public.delphi.language.delphi.win32&messageid=430f013c$1@newsgroups.borland.com

내용 뒤쪽에 변수에 직접값이 아닌 다른 변수로 대입할 경우 레퍼런스 카운터가 증가되어 이미 해제되었지만 잘못된 레퍼런스 카운터로 문자열변수를 free해서 익셉션이 발생할 수 있다는 내용이 있네요.
김도완 [purplecofe2]   2007-10-25 11:42 X
답글 달고 한번 더 정독해보니 위 내용은 반대 현상이군요. -_-;
김상구.패패루 [peperu]   2007-10-25 21:21 X
AnsiString은 레퍼런스 카운트를 관리하기 때문에 함수의 리턴값으로 사용해도 성능의 저하가 거의 없습니다.
예를 들면 이런거죠...
AnsiString DoubleStr(const AnsiString arg) {
  return arg + arg;
}
사용 방법도 아주 직관적이 됩니다.
AnsiString aa = DoubleStr("안녕하세요");

반면 WideString은 BSTR과의 호환성에 너무 얽매인 나머지... 레퍼런스 카운트 관리가 없기 때문에 앞선 예제처럼 만들면 메모리 복사 문제가 일어나서 성능에 영향을 줍니다.
void DoubleStr(WideString &Dest, const WideString &Source) {
  Dest = Source + Source;
}

사용법도
WideString aa;
DoubleStr(aa, "안녕하세요");
이런식으로...

이 외에도 BSTR과 wchar_t*는 사실상 타입은 동일하지만 메모리 운영은 다르기 때문에
WideString aa;
aa = L"안녕하세요";
이런식으로 쓰다간 난리납니다.
aa = "안녕하세요";
이건 괜찮죠.

이유는... 몇가지 실험과 소스를 추적해 보시면 금방 눈치 채실겁니다.
남병철.레조 [lezo]   2007-10-25 23:59 X
패패루님이 생각하니 유니코드 베이스 구현을 적극 추천합니다. ^^; (레퍼런스 카운터는 물론!)
AnsiString은 어차피 있던것이니 그대로 두고
패패루님이 위에 언급하신 유니코드 스트링을 기본으로 구현하고
WideString은 있던것이니 그대로 두고...
이 3가지는 서로 변환하기 쉽고 기존과 호환성도 좋고 유니코드 베이스로 멋지게 나아갈 수 있을것 같습니다. ^^;

적극적으로 어필해 주세요 +_+
미국은 겸손함 보다 강력한 어필에 더 좋은 점수를 주는 나라잔아요 +_+

+ -

관련 글 리스트
13479 도쿄에서 열린 코드기어 디벨로퍼 캠프를 다녀왔습니다. 김상구.패패루 3198 2007/10/23
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.