C++0x 미리보기 13, concepts는 다음 기회로(2부)

Twitter icon류광, 2009-09-13 22:09
Concepts 사건(?) 관련 링크들과 몇 가지 생각해 볼 이야기.

1부 끝에서 C++ 표준 위원회가 Concepts를 차기 C++ 표준에 포함시키지 않기로 한 이유를 좀 더 이야기하겠다고 했었는데, 조금 따져 보니 그 글에서 링크 건 Doug Gregor의 글보다 더 잘 정리하기는 힘들겠다는 생각이 들었습니다. 그래서 그냥 몇 가지 읽어 볼 문서들을 소개하고 개인적인 의견을 덧붙이는 것으로 대신하려고 합니다.

마지막 Sutter의 글이 “평범한” C++ 프로그래머의 관점에서 아주 틀린 말은 아닐 수도 있습니다. 그러나 C++이 지원하는 프로그래밍 스타일(“패러다임”)들 중 어쩌면 가장 중요한 것이 일반적 프로그래밍(Generic Programming, GP)이고, 그 GP에 대한 C++의 언어적 지원에서 화룡점정으로 기대를 받은 것이 바로 Concepts인만큼, 이 사건이 평범한 C++ 프로그래머와 무관한 일은 전혀 아닐 것입니다. 관련해서 읽어볼 만한 글로는, 최근 Concepts 건과 관련해서 DDJ에 다시 게재된 1995년 Alex Stepanov 인터뷰가 있습니다.

그나저나, Gregor의 글에서 “이미 타협했던 사항을 막판에 Stroustrup가 뒤엎었다”는 불만을 느낀 것이 제 착각은 아니리라 생각합니다. 한편으로는 Stroustrup이 이해가 갑니다. C++0x의 주요 목표 중 하나가 바로 C++을 “가르치고 배우기 쉽게 만드는(Make C++ easier to teach and learn)” 것이고, 그 목표를 Stroustrup이 얼마나 중요시 하는지를 그의 최신작 Programming - Principles and Practice Using C++(얼마 전에 번역을 마쳤습니다)에서 엿볼 수 있었습니다. 게다가 C++0x에는 람다 함수, 일반화된 초기화 구문, 사용자 정의 리터럴 등 “리터럴”을 좀 더 잘 지원하기 위한(람다 함수는 간단히 말해서 함수 리터럴입니다) 기능들이 추가되었습니다. 리터럴은 의미론적으로 “마법의 수”이고, 마법의 수는 코드의 유지보수와 가독성을 헤치므로 피해야 한다는 관점에 익숙한 프로그래머에게는 다소 의아스러운 일일 것입니다. 그런데 그러한 관점은 “다수의 전문가들이 협동적으로 대형 프로젝트를 수행할 때” 유효하지만, 최종 사용자가 재빠르게 원하는 결과를 얻고자 할 때에도 지켜야 할 것은 아닐 수 있습니다. 다른 말로 하면, 리터럴 지원을 강화한다는 것은 C++을 “캐주얼하게도 쓸 수 있는 언어로 만들자”가 C++0x의 또 다른 목표일 수 있음을 보여줍니다. 이번 Concepts 탈락 결정에는 C++을 가르치고 배우기 쉬운 언어, 캐주얼하게도 쓸 수 있는 언어를 만드는 데 있어 지금 상태의 Concepts가 오히려 방해가 된다는 공감대가 작용한 것이 아닐까 합니다.

그러나 이 결정은 “지금 상태의 Concepts”에 대한 것입니다. 앞에서도 말했듯이 Concepts는 언어 차원의 GP 지원에서 화룡점정에 해당하므로 Concepts 자체가 폐기될 가능성은 거의 없습니다. 좀 오버하자면, Concepts의 현재 문제점들을 만족할만한 수준으로 해결하는 것은 C++ 자체에는 관심이 없더라도 프로그래밍과 프로그래밍 언어에 관심이 있는 사람이라면 주목할만한 과제일 것입니다. 지금의 Concepts에서 해결해야 할 문제를 아주 단순화하면 “프로그래밍에서 서로 배타적으로 보이는 두 가지 장점을 하나도 포기하지 않으려면 어떻게 해야 하는가”입니다. 사실 GP 자체가, 그리고 C++ 자체가 추구해온 것들도 그와 비슷합니다. 효율을 포기하지 않는 추상, 유연함을 포기하지 않는 엄격함, 속도를 포기하지 않는 표현력, 저수준과 고수준의 공존 등등. 그런 관점에서 Concepts를 바라본다면 꽤나 흥미로운 탐구 주제일 것입니다.

이상으로 Concepts 이야기를 마무리하고요. 다음 회에서는 아마도 위에서 잠깐 언급한 리터럴 관련 기능을 다룰 것 같습니다.

태그: C++ C++0x

comments powered by Disqus