템플릿 인자로 또 템플릿 타입을 받는 타입의 변수 선언이

A<B<C > > d;
이런 식으로 돼 있는 옛날 C++ 코드를 보니 문득 감회가 새롭다.

예전에는 템플릿 인자를 닫는 > 가 중첩될 때, 여러 >를 >>로 붙일 수가 없었다.
타입 선언인지 일반 연산인지 문맥을 고려하지 않는 전통적인 parser는, 이것을 비트 shift 연산자로 인식하기 때문이었다. 따라서 오류크리.
그래서 > 사이를 강제로 띄워 줘야 했는데 이것이 보기에 그리 좋지는 않음이 자명한 노릇이었다.

일단 C++ 계보의 언어들은 문법 차원에서 변수 선언을 명시하는 토큰이 없고(파스칼의 var과 콜론, 베이직의 Dim과 as 같은), 달랑 “타입 변수명”이라는 아주 문맥 의존적인 문법만을 바탕으로 변수 선언을 컴파일러가 알아서 추론해야 하기 때문에 파싱이 까다로운 게 사실이다. 게다가 C++부터는 변수 선언은 객체 선언과 동급이 되어, 함수 몸체 내부 어디에서나 마음대로 올 수 있지 않은가.

훗날 C++ 언어가 C++11로까지 확장되면서, 언어가 명시하는 스펙 자체가 바뀌면서 >>를 붙여 써도 괜찮게 되었다.
비주얼 C++의 경우, 2003은 >>가 확실하게 인식되지 않았는데, C++11이 정식으로 제정되기 전부터 2008쯤부터 이미 >>를 지원하고 있었다.

이런 문법의 변화로 인해, 클래스 A는 type을, 클래스 B는 int를 받는 템플릿 클래스라고 했을 때

A<B<30>>1> > p;

라는 코드가 과거에는 30>>1이 15라고 계산되어 컴파일이 되었지만, 이제는 되지 않는다. >>가 템플릿 인자를 닫는다는 의미로 먼저 인식되었기 때문이다. 이것은 함수 호출 문맥에서는 ,가 콤마 연산자가 아니라 인자 구분자로 먼저 인식되는 것과 비슷한 맥락이다.
바뀐 문법에서는

A<B<(30>>1)>> p;

라고, 뒤의 >를 붙일 수 있는 대신 진짜 템플릿 인자 내에서의 산술 연산은 괄호로 싸 줘야 <, > 사이의 모호성을 막을 수 있다.
사실, 템플릿 인자 안의 숫자는 어차피 컴파일 시점에서 값이 다 결정되는 것들이기 때문에, 복잡한 연산이 들어갈 일은 거의 없다. 산술 연산을 괄호로 반드시 싸야 하게 만들고 그 대신 템플릿 인자의 < >에 편의를 더 주는 것이 훨씬 더 합리적인 정책인 것이 사실이다.

뭐, 괄호도 해 주고 >를 띄워 주기까지 하면, 어느 구닥다리 C++ 컴파일러에서나.. 컴파일 가능한 코드를 만들 수 있긴 하지만, 미관은 제일 떨어지겠지. ㅋㅋ

그러고 보니 옛날에는 일반 함수 포인터 말고, C++ 멤버 함수 포인터를 명시할 때 그냥 이름만 써 줘도 괜찮은 수준이었는데
나중에는 반드시 &를 붙이고 scope도 명시해 줘야 하게 문법이 좀 더 엄격하게 바뀐 걸로 기억한다. 한 VC++ 2005쯤부터이다. for(int x=0; ... )에서 x의 scope만큼이나 전형적인 호환성 문제이다.

이렇듯 C++이 어제나 오늘이나 큰 뼈대는 변함없고 계속 새로운 기능이 추가만 되는 것 같아도,
이미 있던 문법도 야금야금 바뀌어 온 게 좀 있다.

Posted by 사무엘

2012/12/10 08:30 2012/12/10 08:30
Response
No Trackback , 5 Comments
RSS :
http://moogi.new21.org/tc/rss/response/767

Trackback URL : http://moogi.new21.org/tc/trackback/767

Comments List

  1. Lyn 2012/12/10 16:25 # M/D Reply Permalink

    표준 만들어지는데 10년

    표준에 맞춘 컴파일러가 웬만큼 깔려서 새 기능을 일상적으로 쓸수 있게 되는데 10년

    그러나 그때쯤이면 새 표준이 나오겠지...
    안될거야 아마

    1. 사무엘 2012/12/10 17:38 # M/D Permalink

      그래도 가끔은 비주얼 C++에서 보듯이 컴파일러가 표준을 먼저 수용하기도 하지요. VC2010도 C++11이 정식 확정되기 전에 일부 규격을 수용한 거니까요.

      C#도 D도 쓰고 싶긴 합니다만, 저는 이미 인생의 방향을 (거의) 결정해 버린 대형 C++ 프로젝트를 안고 가는 개발자.. ㅎㅎㅎ

  2. 닌자 2012/12/10 18:49 # M/D Reply Permalink

    밑에 박정희 대통령에 대한 글에 조금 설명할 것이 있어서 댓글을 달고 싶은데 댓글을 달 수 없어서 여기에 답니다.

    아래 링크 주소는 박정희에 대한 일본 위키백과 내용입니다.

    http://ja.wikipedia.org/wiki/%E6%9C%B4%E6%AD%A3%E7%85%95

    위에 써 있는 내용 가운데 흥미로운 점이 있어서 알려드릴까 합니다.

    일본어를 할 줄 아시면 바로 해석이 가능하시겠지만 제 나름대로 해석을 하면

    第二次世界大?中の1944年に日本の陸軍士官?校を3位の成績で卒業(57期)し、終?時は?州?軍中尉だった。朴正?が日本陸軍の軍人だったという誤解があるが、上記のように?州?の軍人として日本の士官?校への留?を命じられたに過ぎず、日本軍人として任官したことはない。

    제2차 세계대전 중이던 1944년에 일본의 육군사관학교를 3위 성적으로 졸업(57기)하고, 종전 시에는 만주 국군 중위였다.
    박정희가 일본 육군의 군인이었다는 오해가 있지만 상기한 바와 같이 만주군의 군인으로서 일본 사관학교에 유학을 명 받은 것일 뿐 일본군으로서 임관 된 적은 없다.

    이렇게 나옵니다.

    즉 최소한 박정희는 저 글대로만 본다면 정규 일본 육군이 아니었단 말이죠.
    정확하게 말하면 일본 육사 졸업 후 만주국의 육군 소위로 임관 한 것이다 라고 말할 수 있겠습니다.

    창씨개명이야 그 당시 살던 사람이라면 어쩔 수 없이 하던 선택이고 김용묵님도 사무엘이라고 자발적으로 창씨개명을 하셨지만 요즘 외국식 이름으로 바꾼다고 그게 무슨 흉이 되나요?

    나중에 미국하고 사이가 안 좋아지면 100년 후 미국식으로 이름 바꾼 놈들은 다 매국노야 이렇게도 될 수 있겠네요?

    김용묵님 덕분에 세벌식 잘 쓰고 있습니다.

    스마트폰용 세벌식(가급적이면 390식!!)도 있으면 좋겠지만 개발을 강요 하지는 않을게요. 너무 힘든 일이라 말이죠.
    하지만 있으면 좋을 것 같아요.

    1. 사무엘 2012/12/10 21:11 # M/D Permalink

      반갑습니다. 그리고 보충 설명에 감사드립니다.. ^^
      그 설명대로라면 박 정희는 제가 생각한 것만큼도 일본과 가까이 관여하는 직위가 아니었다는 얘기군요.
      하지만 뭐든 중상모략은 빨리 퍼져나가고 수습은 무지하게 더딘가 봅니다.
      박 정희뿐만 아니라 이 승만에 대해서도.. 제 개인적인 생각은 이젠 제발 좀 “6· 25 때 자기 혼자 튀었다” 같은 헛소리 좀 안 듣고 살아 보는 게 소원입니다.

      그 글은 저와 견해가 다른 건 상관 안 하는데, 글을 제대로 읽지 않고 그냥 자기 감정 배출용으로 올라오는 딴지성 댓글을 상대하기가 귀찮아서 댓글 등록을 막아 놨습니다.

      그리고 마지막 문단을 보면서 그저 웃습니다.
      당장 현실적으로는 윈도우 8 메트로 지원이 더 급한 문제랍니다.. ^^;;

    2. 박상대 2012/12/10 22:36 # M/D Permalink

      스마트폰용 세벌식은 지금도 있습니다.

      "MN 로그인 키보드" 라는 앱에서 세벌식 최종 자판과 신세벌식 자판을 지원하고 있습니다.

      하지만 무료버전에서는 자판 위에 광고가 뜬다는 단점이 있습니다.
      단, 세벌식 최종 자판만은 자판이 네 줄이라서 예외적으로 광고가 안 뜹니다.

Leave a comment
« Previous : 1 : ... 1169 : 1170 : 1171 : 1172 : 1173 : 1174 : 1175 : 1176 : 1177 : ... 1841 : Next »

블로그 이미지

철도를 명절 때에나 떠오르는 4대 교통수단 중 하나로만 아는 것은, 예수님을 사대성인· 성인군자 중 하나로만 아는 것과 같다.

- 사무엘

Archives

Authors

  1. 사무엘

Calendar

«   2022/01   »
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31          

Site Stats

Total hits:
1734010
Today:
207
Yesterday:
563