Bjarne Stroustrup Concept와 미래를 말하다 - 1  http://jacking.tistory.com/443

Bjarne Stroustrup Concept와 미래를 말하다 - 2  http://jacking.tistory.com/467

Bjarne Stroustrup Concept와 미래를 말하다 - 3  http://jacking.tistory.com/474





Danny Kalev

「검사나 밸런스」에 대해서 좀 더 구체적으로 이야기 해보죠. Boost라고 하는 단체에서는 비공식적인 새로운 라이브러리를 위원회가 표준 규격에 넣기 전에 실제 환경에서 사용하여 더욱 더 많은 C++ 프로그래머로부터 피드백을 얻을 수 있었습니다. 그러나 위원회는 코어 언어 기능에 대해서는 비슷한 「실험장」을 가지고 있지 않습니다. 결국은 많은 코어 언어 기능은 착실한 실제 경험이나 테스트도 없이 워킹 드래프트에 들어가고 있지 않습니까?  Concept은 즉 그런 것이었던 것이 아닙니까? 코어 C++ 실험 단체라고 하는 물건은 개미입니까? 도움이 된다고 생각합니까?

 

Bjarne stroustrup

concept에 대한 당신의 생각은 틀렸습니다. 그런 것이라면 우리들은 그러한 「실험장」을 가지고 있었습니다. 그것은 conceptGCC로 주로 인디애나나 텍사스 A&M 대학에서 concept을 연구하고 있던 무리이며 주로 Boost에서 concept을 라이브러리에서 사용하려 하고 있던 무리입니다. concept에 대해서 걱정하고 있던 일이라고 하는 것은 그러한 연구가 충분했던 것일까라는 것과 규격 설계는 충분히 가다듬어지고 있었는가?(우리들은 이것이 제일 걱정이었다), 더 긴 시간이 필요하여 규격 제정을 늦추는 것은 아닐까 라고 하는 것(이것이 대부분의 사람들이 걱정하고 있던 것)입니다.

실제 모든 신기능은 몇몇 컴파일러로 실험되고 있었던 것입니다. 문제는「규격 설계를 규정하는데  충분한 실험은 어느 정도인가」라고 하는 것이에요. 기능마다 대답은 바뀔 것이라고 생각합니다.

주요 C++ 유저나 C++ 벤더로부터 연간 수만 달러 정도의 지원금을 모집하여 이러한 「C++ 설계 및 검증 연구실」로 되는 것을 설립 운영하는 것은 이치에 맞습니다. 하지만 아무도 흥미를 가지고 있지 않는 것 같습니다. 코몬즈의 비극에 잘 비슷하지만 무리들은 오히려 그 100배의 돈을 몇몇 제품에 쏟아 넣어 또 다른 상업적 이익을 얻고 싶은 듯한 것 같습니다.

 

 

Danny Kalev

잘 모르는겠는데 Conceptrvalue reference는 데쟈브라는 생각이 듭니다. 당초 rvalue reference대부분의 유저에게도 알기 쉽다라는 것이 아닙니까. 그렇지만 지금은 다른군요. 아마추어 프로그래머도 move constructor라든가 함수의 오버 로딩의 룰 변경이라든지 void A::f(); void A::f()&; and void A::f()&&;은 전부 다른 의미이고 rvalue는 이젠 lvalue가 되지 않는다든가 이러한 것을 알고 있지 않으면 안됩니다. rvalue referenceConcept과 같이 너무 복잡하여 불안정하고 쓸데 없이 터무니없이 커지고 있는 것이 아닐까요? 정말로 넣을 가치가 있습니까?

 

Bjarne stroustrup

한 번 더 말하지만 「아마추어」라고 말 하는 것은 그만두는 편이 좋아요. 원래 실제 우리들은 밖에서 보면 모두 「아마추어」입니다. 현대의 소프트웨어는 한 명의 인간으로 어떻게 할 수 없을 만큼 복잡해서 모두 아마추어로 낮추어져 버립니다. 우리들도 대부분의 일에 관해서 「아마추어」이고 당시도 그렇습니다. 우리들이 모두 대부분 「아마추어」이기 때문에 그러한 말투는 그만두고 빨리 공부를 시작하세요. 「분할하여 공략」(원어:분할 통치 "Divide and conquer")가 기본. abstractionlayering은 도움이 되는 방법입니다.

모든 언어 설계라고 하는 것은 레이어라는 생각이 듭니다. 무엇보다 간단한 예로 말하면 프로그래머는 단지 std::vector로 행렬 클래스를 사용했을 때에 그 퍼포먼스가 향상하고 있는 것을 깨달을 것입니다. 더 자세하게 보면 move constructor가 퍼포먼스 향상의 이유라고 하는 것에 깨달을 것입니다. 컨테이너를 move하는 것은 copy보다 쌉니다. 한층 더 다음 레벨에서는 프로그래머는 move constructorperfect forwarding 함수를 사용합니다. 이것은 단지 std::move()std::forward()를 사용하면 좋은 것뿐입니다. 여기서 rvalue reference에 대해서 무엇인가 특별히 이해해 두지 않으면 안 되는 것도 있을 겁니다만 대부분의 프로그래머는 거기까지 깊이 관여하지 않을 것입니다. 생각컨대 대부분의 프로그래머는 「A::f()&&;는 도대체 어떤 의미일까」라든가 「std::move()는 도대체 어떻게 구현 되어 있지」등이라고 하는 의문이 끓는 일은  없을 것입니다. 그러한 의문은 이해해야 한다고 하는 이유가 있어야만 이해하려고 합니다. 대부분의 프로그래머는 더 의미가 있는 고급 코드를 쓰는 것에 시간을 소비합니다. 원하는 것은 좋은 프로그래머이지 언어 오타쿠는 아닙니다.

당신이 conceptrvalue reference를 비슷하다는 느낌을 받은 것은 틀린 것은 아닙니다. 양쪽 모두 형태 시스템의 문제입니다. 그러므로 근본적으로 방대하고 복잡합니다. 양쪽 모두 「유저 인터페이스」를 가지고 있으며 세부가 신경이 쓰이는 프로그래머를 멀리해 줍니다. 그러나 「concept」은 방대하다는 것 이상의 것으로 장기적으로는 rvalue reference보다 중요합니다.




by 흥배 2010.01.25 09:00