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

자유게시판
세상 살아가는 이야기들을 나누는 사랑방입니다.
[24942] clang 소스 분석해보려다 좌절
bugfree [bugfree] 9791 읽음    2014-11-01 17:43
나름 C++ 프로그래밍을 할주 안다고 생각했는데
clang 소스 보고 완전 좌절하게 되네요
무슨 template을 이렇게 많이 썼는지 분석하려다가 좌절

특히 llvm/include/casting.h template 소스는
이해하기도 힘들고 왜필요한지도 이해가 안가네요
template이 복잡해서 속도도 불리하지 않나요
bugfree [bugfree]   2014-11-01 18:14 X
빌드해서 clang.exe로 간단한 윈도우 샘플 코드 컴파일해보니
컴파일 에러가 주루룩???  컴파일러가 간단한 윈도우 코드하나도
컴파일 못하네요???
시스텍 [hslee]   2014-11-01 22:08 X
컴파일러에 전문지식이 없는 관계로 기술적인 부분은 다른 분께
패스하고 template 생각나는 일화 적어봅니다

화학성분 파티클 확산과정을 시뮬레이션하는 프로그램 개발이 었는데
C++ 경력 12년차인 프로그래머 한명이 추가로 합류하게 되었습니다
처음엔 C++ Math 라이브러리를 이용하다 template으로 만들어진
라이브러리로 바꾸게 됐습니다
시스텍 [hslee]   2014-11-01 22:20 X
바꾸게된 이유는 template 버전이 퍼포언스가 더 빨랐기 때문
그런데 template에 추가기능을 넣어 확장하면서 부터 문제가 생기기 시작해습니다

추가로 팀에 합류한 사람이 template 테크닉 스킬이 영 꽝이었던 거였습니다 C++경력12년차라고 해서 template 도 자유롭게 구사할줄 알았던 거였는데 도움이 되긴 커녕 팀원들에게 방해만 되다보니 증간에 포기하고 나가 버렸습니다.

시스텍 [hslee]   2014-11-01 22:38 X
template도 마스터하지 못한 반쪽짜리가 무슨 C++ 프로그래머냐는 눈총도 있었고요 계약상의 불이행을 이유로 법적책임을 물으려다 마누라에 자식도 있고 제대로된 실력을 갖고있는 사람이 합류되어 그냥 넘어갔는데

그사람이 얘기하길  C++경력 12년차는 맞는데 그동안 C++ 빌더 이용해서 프로그래밍 하면서 컴포넌트 사용방법 위주로 하다보니
template 테크닉 배울 기회도 없었다고 고백했다더군요

시스텍 [hslee]   2014-11-01 22:46 X
template이 속도에서 불리할까요? 그 반대랍니다
오히려 C++을 완전히 마스트한 프로 실력자들이 즐겨 사용하는 강력한
무기이자 테크닉이 template 이거든요

template 테크닉 스킬이 뛰어나지 못하면 절대로 '프로'라는 말 못듣습니다. 그에따라 몸값도 많이 차이 나고요
시스텍 [hslee]   2014-11-01 22:58 X
프로그래머의 몸값은 '실력'으로 결정됩니다
정영훈 [allinux]   2014-11-03 02:26 X
템플릿을 잘 다루는 것과 실력이라는 것이 어떤 연관이 있을까요?
C++ 빌더로 컴포넌트 위주로 개발해온 12년차 개발자는 템플릿을 잘 못다룬다는 이유로 실력이 형편 없는 건가요?
제가 알기에 C++은 멀티패러다임을 수용한 언어로 알고 있습니다.
즉 가장 자신있는 패러다임으로 개발을 할 수 있다는 의미겠지요.(C++ 마스터라는 것은 어떤 근거로 잴 수 있나요?)
실력의 잣대는 결과물로 재야지 단순히 언어의 한 기능을 잘 다루느냐 판단하기에는 판단요소가 너무 부족해 보입니다.

템플릿 사용이 중요한 프로젝트였으면 구인시에 템플릿 사용에 자신 있는 개발자를 채용하면 되는 겁니다.
초특급 개발자라도 안해본 것은 서툴 수 밖에 없습니다. 
망치 [mangchy]   2014-11-03 08:49 X
저도 10년이 넘었지만 템플릿은 루아쓸때 오랑케님이 만들어놓은 루아팅커를 만지면서 처음 만져봤네요...
김태선님이 만들어 놓은 TTList 클래스를 만지면서 두번째 만져봤구요...
프로젝트에 가끔 필요함을 느끼긴 하지만 템플릿을 아직까지 제대로 다뤄보지 못하고 있네요...

너무 방대한 프로그래밍의 세계에서 아직도 초짜라고 생각하면서 일하고 있는 1인입니다. ㅡ,.ㅡ
김시환 [godson2]   2014-11-03 11:07 X
저도 정영훈님 의견에 동의 합니다. 실력이란 객관적 기준도 있겠지만 기준을 어디에 두냐에 따른 상대적, 주관적 기준도 분명 존재 한다고 생각합니다. 템플릿을 잘 못다룬다고 실력이 없을까요? 사실 저도 빌더로만 근 10년 넘게 사용하고 있지만 템플릿 사용도 거의 하지 않고, 잘 모릅니다. 그래도 나름 제가 발담고 있는 이 분야에서 실력없다는 소리 듯지는 않습니다. 그렇다고 제 스스로 프로그램 잘 한다고 생각하는건 아닙니다. 모르는게 아직 너무 많으니까요.. 템플릿을 공부하지 못한(안한)이유를 굳이 들자면 필요성을 느끼지 못했고, 제 개발분야에서 공부 해야할 지식들도 꽤 많았기 때문입니다.

시스텍님이 말씀하신 경력 12년인 그분이 C++ Math 라이브러리만 썼다면 아마 잘 했을지도 모르겠다고 조심스레 추측해 봅니다. 중간에 갑자기 다루어 보지 않은 템플릿으로 바뀌다 보니 어려움이 있었을 수도 있고요.. 단지 템플릿을 못한다고 절대적인 실력이 없다고 단정짓는것은 잘못된 편견이라고 봅니다.

템플릿도 결국은 옵션이라고 생각합니다. 주력이 C, C++ 이고 보조적으로 자바나 C#도 할 수 있으면 좋고라는 식의 옵션 사항으로 기술해야 하는 항목이 아닐까 생각해 봅니다.

bugfree [bugfree]   2014-11-03 11:19 X
부끄러운 얘기지만 저는 시스텍님 답변에 공감을 크게 느끼고 있습니다
새로운 기술을 습득하려는 노력에 게을렀고 솔직이 모던 C++, template 깊이있게 잘모릅니다. 제가 늦었지만 C++11, template에 관심을
두고 이제라도 배우려는건 이러다가 신입들에게도 밀려나 회사에서
짤리게 되지나 않을까하는 두려움 때문입니다. 요즘 새로 들어 오는
신입들도 실력이 장난 아닙디다.
bugfree [bugfree]   2014-11-03 11:30 X
회사에서 짤리면 개인 사무실 하나 얻어 SI나 하면서 밥먹고 살아야
하는데 특별히 어려운 기술을 필요로 하는것도 아니라 크게 어려울건
없지만 SI단가 형편 없다는거 뻔히 알고있는 터라 흠
bugfree [bugfree]   2014-11-03 11:35 X
그건 그렇고 casting.h template 설명해주시는 분은
한분도 안계시네요. 제가 알고싶은건 이건데
빌더(TWx) [builder]   2014-11-03 18:09 X
템플릿은 Template parameter deduction이 결정되고 CodeGenerator에 의해서 코드가 생성될 때... 컴파일러로 하여금 코드 최적화 여지를 더 많이 주기 때문에 성능을 고려할 시 자주 이용되게 됩니다. clang/llvm에서 주요 부분이 template으로 구현되어 있는 것도 마찬가지 입니다.

말씀하신 Casting.h 템플릿 코드는 Template specialization을 고려해 코드가 구성되어 있는 정도일 뿐... 별다른 테크닉이 사용되고 있지 않습니다. 이정도에서 부터 어려움을 느낀다면 clang/llvm 소스코드 분석 자체가 불가능 할텐데요...
빌더(TWx) [builder]   2014-11-03 18:12 X
Casting.h는 dynamic_cast concept을 template으로 구현해 놓은 겁니다.

C++에서 dynamic_cast는 기존의 VMT(Virtual Method Table) layout을 이용해서 구현되어 있기 때문에.. dynamic_cast가 사용가능하려면 적어도 하나 이상의 virtual function을 갖고 있어야 한다는 게 전제가 되어야 합니다.

dynamic_cast를 이용하면 간단할 텐데 굳이 clang/llvm 프로그래머들이 template으로 구현해서 사용하는 이유는 간단합니다.
빌더(TWx) [builder]   2014-11-03 18:15 X
int i = 1 + 2;

매우 간단한 문장이죠. 그러나 컴파일러는 저 간단한 문장 하나 조차도 Parse Tree를 만들기 위해 7개의 Token Node를 생성해서 갖고 있어야 합니다. 컴파일 해야 할 문장이 수십만 ~ 수백만 라인이라고 생각해 보세요. dynamic_cast를 이용하면 기하급수적으로 생성되는 모든 Token Node들
이 VMT 테이블도 같이 갖고있야 하기 때문에 메모리 사용이 급증하게 됩니다. symantic 분석과 AST Node로의 축약은 파싱단계의 후단부에서 처리되겠지만요.

그러나 template 테크닉을 이용하면 memory footprint에서 훨씬 유리해 집니다. 거기다 template은 컴파일러에 코드 최적화 여지도 더 많이 주기 때문에 생성되는 코드도 훨씬 효율적이고요.
빌더(TWx) [builder]   2014-11-03 18:18 X
다른 분야도 마찬가지지만 C++ Language 역시 빠르게 진화하고 있습니다. C++11이 확정된지 얼마 지나지도 않았는데 벌써 C++14가 나올 정도죠. C++에서 template을 옵션 정도로 취급하면 된다고 얘기하는 분들도 몇몇 있는거 같은데... template은 C++프로그래머라면 반드시 마스트해야 할 mandatory지 결코 option이 아닙니다.

대학 전산기과나 컴퓨터공학 관련 학과에 입학하는 신입생들이 필수적으로 읽는 C++ 기본교재가 C++의 창시자인 Bjarne Stroustrup교수가 지은 The C++ Programming Language 라는 책입니다. 44 Chapter 1,300 페이지에 이르는 분량인데... Chapter 전체에서 template이 빠지지 않고 계속 다루어 지고 있을 정도로 C++에서 template은 상당히 중요한 내용입니다.(4th Edtion)

C++의 철학이 담긴 훌륭한 책이니까 아직 C++에 설렁설렁한 분들은 원서로 곱씹으면서 정독해서 읽어 보시기를....
건다르 [djinni]   2014-11-04 14:40 X
template C++11 이런거 안쓸거면 뭐하러 C++ 사용하나요?
이미 만들어진 소스의 유지보수라면 어쩔수 없지만....
template을 제외하면 C++의 장점이 뭔지 도대체 모르겠는데요

제가 빌더에 미온적인 것도 이런 이유지요.
저걸 제외하면 델파이보다 나을게 없거든요
정영훈 [allinux]   2014-11-04 16:24 X
템플릿을 사용해서 만들던 다른 방법으로 만들던 무엇이 문제일까요?

제가 위의 글을 적은 이유는 "시스텍"님이 단순히 언어의 기능 하나를 알지 못한다는 이유로 실력이 없다라고 단정을 했기 때문입니다.
물론 템플릿을 잘 못다루시던 그 분은 c++ 다루는 실력은 없었을지도 모르겠습니다 그렇다고 해서 그 부분만을 보고 실력을 판단하는 것은 참으로 좁은 판단인 듯 합니다. 여러 개발자 분들과 협업을 종종 합니다.
개발이라는 테두리에서 보면 각자 능력치가 높은 부분들이 있었습니다.(개발을 단순히 코딩만이라고 생각치는 않으시겠죠)
분명 방법은 여러가지가 있을 수 있습니다.
내가 아는 방법이 최고의 방법이라고 생각지 않았으면 좋겠습니다.  
박우성 [solgari]   2014-11-04 16:52 X
축구에서 공격과 수비를 모두 잘 하는 선수는 최고의 선수일 것입니다.
하지만, 실제로 그런 선수는 몇 안되고, 공격을 잘하는 선수, 수비를 잘하는 선수 모두 좋은 선수로 인정받고 있습니다.

수비만 잘 하는 선수에게, "골도 못 넣으니까 좋은 선수가 아니다"라고 하는 사람은 없습니다.

클래스만 이용해서 객체지향적으로 잘 개발하는 개발자가 있는 반면에, 템플릿을 이용해서 제네릭하게 잘 개발하는 좋은 개발자도 있습니다.

모두 자신의 분야에게 적절한 방법으로 원하는 결과를 만든다면 좋은 개발자로 봐도 된다고 생각합니다.
박우성 [solgari]   2014-11-04 17:36 X
초기의 C++ 언어는 객체지향 개념이 강했으며, 그 당시 C++ 컴파일러에서는 템플릿을 완벽하게 구현하지도 못해서 템플릿의 중요도는 크지 않았습니다. 오래된 C++ 서적들을 보면 템플릿의 비중이 높지 않습니다. 아마 저를 포함해 40이 넘은 개발자는 그런 책으로 공부했고, 그렇기 때문에 템플릿이 익숙하지 않은 것일 겁니다.

그동안 템플릿을 사용하지 않고도 얼마든지 개발이 가능했으니, 필요를 못 느낄 수도 있구요.

STL등이 보편화 되고, boot등의 좋은 라이브러리들이 나오고, 그 중 일부가 표준이 되고, 계속 C++이 발전하면서 갈수록 템플릿이 더 중요해 지는 것은 사실입니다.

저도 계속 책을 사서 보고, 새로운 표준이나 그것을 지원하는 컴파일러에 관심이 많아서 공부도 하고, 새로운 표준을 신규 개발에 적용을 하고 하지만, 기존 소스들에는 기존 방식으로 개발합니다.

기존 방식보다 새로운 방식이 더 좋은 건 아니라고 봅니다. 필요에 의해서 사용하면 되는 거지, 새로운 표준으로 반드시 개발해야 하는 건 아니라고 봅니다.

아직도 C++빌더 6 이나, Visual C++ 6.0으로 개발하는 개발자가 많습니다. 그렇게 오래된 환경에서도 잘 개발하고 있다면 잘 하고 있는 것이죠.

C++에서 템플릿 기능이 빠져도 저는 C++로 개발할 것입니다. 왜냐하면, 최소한 델파이 보다 나을게 없는 언어는 아니거든요.
bugfree [bugfree]   2014-11-04 18:36 X
저한테 가장 피부에 와닿는건 C++에 대한 이러쿵 저러쿵 갑론을박
보다 빌더님의 실질적인 답변이네요.  template가 강력한 무기로
사용도기도 하는군요
bugfree [bugfree]   2014-11-04 18:46 X
C++을 배웠는데도 clang 소스코드 분석도 못하고 있는 제 자신이 참
한심하다는 생각입나다.  C++ 한다는 놈이 C++ 소스도 분석 못하고
쩔쩔매고 있네요. C++을 완전하게 마스터 하지못하고 대충 배워놓고
프로그래머랍시고 회사에서 버팅기고 있는 제 자신이 너무 쪽팔리네요
bugfree [bugfree]   2014-11-04 18:52 X
빌더님은 답변하시는거 보니까 프로이신거 같은데 부럽습니다
C++11도 배우고 template도 열심히 배워약겠네요. 감사합니다
남병철.레조 [lezo]   2014-11-05 00:34 X
I sense dark side of force. :)
하늬바람 [mrparky]   2014-11-05 09:19 X
모처럼 재미있는 이야기입니다.

사실 개발자들의 세계도 꽤 넓습니다.
접해보지 않으면 잘 모를 수 있습니다.

클래스기반 템플릿기반 다 나름 존재이유와 방법들이 있습니다.
템플릿써야 더 능력있는 개발자고 꼭 그런 것 아닙니다.
우리가 처음에 프로그래밍 배울 때 생소하면 어렵던 것과 비슷합니다.

위의 빌 더 님의 내공은 물론 제가 보기에도 대단하십니다.
컴파일러 분야에도 어느정도 정통하신 것 같습니다.
그런데 사실 이 부분도 디버깅 깊게 하게 - 스터디도 좀 해 가면서 - 되면 전산 수업 배울 때 그냥 넘겼던 개념들
다 다시 확인하게 됩니다.

템플릿 코드만 잔뜩 있는 것도 자꾸 보게 되면 익숙해지고 친해지게 됩니다.
사실 오픈소스보면 이런게 꽤 됩니다.
이런 세계에 발을 들여놓고 살게 되면 자신도 그들처럼 비슷하게 코딩하게 되갑니다.

조금 더 붙이자면
요즘 C++이 이렇게 템플릿을 포함해서 갖가기 방법들이 붙여서 괴물처럼 되가는 것은
좀 이유가 있습니다. GCC하는 사람들 때문입니다.

원래 CLang도 GCC에서 나왔습니다. 거기에는 애플의 잡스의 뜻이 개입된 정황도 있구요.
GCC 해커들은 C++로 천하통일 하겠다는 원대한 꿈이 있었습니다.
지금은 그 꿈이 좀 실현되어 목표로 되어가고 있고 우리가 모르는 사이 개발 세계의 밑바닥을 야금약금 정복해 가고 있습니다.
Universal Language를 C++로 하겠다는 것입니다.

중간단계 언어를 C++로 하려면 각 언어들의 고유 특성들을 C++로 다 표현할 수 있어야 합니다.
그리고 실험단계에서 SW공학적 연구의 목적으로 만든 언어들의 개념도 여기에 넣기도 했구요.
또 최신 SW공학적 발전으로 얻게된 개념들을 충분히 지원해 줄 수 있게 손을 대게 됩니다.
물론 C++로 이런 걸 다 할 필요는 없는데 예를 들면 고상한 SW 공학 이론을 증명할 스크립트 언어가 필요한데
이 언어를 C++로 컴파일러만 만들고 그 고상한 이론은 그 스크립트 언어가 하고 Output binary는 C++ 베이스로 한다
뭐 이런겁니다.

그래서 .net c++이 .net을 만든 base 언어이지만 .net 개발에는 c#을 쓰는 그런겁니다.
.net 개발을 c++로 하는 것은 오히려 이상해 보이는 것이지요.
GCC에는 java도 있습니다. java source를 c++로 번역합니다. 물론 그 c++은 managed 되는 c++입니다.
이 말은 GCC에서는 unmanaged 되는 java 그러니까 pointer를 c++같이 쓰는 java를 할 수도 있는 것입니다.

아무튼 요즘 세상이 좀 이렇습니다.
적어도 c++는 사라지지 않을 것이고 c++로 먹고사는 밥그릇도 없어지지 않을 거라는 기대를 해 봅니다.
그래서 템플릿 보시면 기뻐하시기 바랍니다.
건다르 [djinni]   2014-11-05 14:47 X
저 개인적으로 툴을 선택하는 기준은 "원하는 기능을 얼마나 빠르게 구현할수 있는가" 입니다.
C++ 을 쓰는 가장큰 이유는 원하는 수준의 속도를 위함이고
이때 template를 안쓴다면 C++이라고 해봐야 델파이와 차이가 없습니다.

저도 40 넘은 개발자이지만 제가 공부할때도 이미 template은 많이 쓰였습니다.
당시 3D 모델링 관련 작업을 했는데 죄다 template 기반이었죠
물론 그때와 지금의 template는 그 비중이 엄청나게 다르긴 하지만...
template 최근에 널리 쓰인건 절대 아니란 겁니다.
안영제 [civilian]   2014-11-05 16:22 X
"안보인다고 해서 없는 것은 아니다" 란 말이 있죠.
세상에 작성자 아이피 남기지 않는 게시판이 있나요? 안보여줄 뿐...
김시환 [godson2]   2014-11-06 09:34 X
"template를 안쓴다면 C++이라고 해봐야 델파이와 차이가 없습니다." 라고 말씀하신 건다르님 얘기는 델파이 개발자들 입장에서는 참 듣기 거북하게 느낄 수 있는 부분이 아닐까 합니다. 게다가 저같이 템플릿 안쓰고 클래스 기반의 C++ 만 사용하는 입장에서는 템플릿 못하니까 C++ 하지말고 델파이나 해라 라고 들리는 군요..

사실 VCL 을 보면 거의 대부분 오브젝트 파스칼로 구현되어 있습니다. 단순히 속도 문제라면 무엇때문에 파스칼을 썼을까 생각해 보지 않을 수 없는 문제 입니다. 그 예전의 볼랜드나 현재 엠바카데로 개발자들중에 C++ , 템플릿 할줄 몰라서 오브젝트파스칼을 써서 VCL을 만들었을 거라고는 생각하지 않습니다. 그렇게 속도 따질거면 어셈블러가 최고 아닌가요?

어떤 언어를 사용하던, 어떤 기능을 사용하던 최종 사용자가 만족하는 시간안에 만족하는 결과물을 만들어 내는 개발자가 뛰어난 개발자가 아닐까 생각해 봅니다.

템플릿을 아무리 잘 다루어도 사용상 버그투성이에 툭하면 뻣어버리는 결과물을 만들어 낸다면 누가 좋은 개발자라고 말하겠습니까?

제가 생각하는 좋은 개발자는 기획에서 결과도출 그리고 Document 까지 최종적으로는 사용자가 만족하는 결과물을 만들어 내는 개발자라고 생각합니다.
건다르 [djinni]   2014-11-06 10:22 X
너무 곡해하시진 마시구요.
template 안쓰면 C++이나 델파이나 속도 차이가 없으니 굳이 쓰기 불편한 C++을 쓸필요가 없다는 얘기입니다.
실제 다수의 VC 유저들이 C#으로 옮겨간 이유기도 하죠. 같은 목적을 달성하기 위해 굳이 불편함을 감수할 필요가 없잖아요.
template 안쓰면 좋은 개발자가 될수 없다고 말한적도 없습니다.
단지 C++의 최고의 장점중 하나를 배제하고 사용하는 건 다른 RAD 툴을 사용하는거에 비해 메르트가 적다는 거죠

+ -

관련 글 리스트
24942 clang 소스 분석해보려다 좌절 bugfree 9791 2014/11/01
24952     Re: 무지 간단한 문제를 왜 복잡하게 생각하나여,,,,ㅎㅎㅎㅎ 아웃사이더 5216 2014/11/06
24953         오프 모임에 한번 나오시지요. 남병철.레조 5124 2014/11/08
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.