본문 바로가기
std::tuple<Ts...> ➔ std::tuple<U<Ts>...> 최근의 즐거움은 템플릿 프로그래밍이다. 템플릿 프로그래밍은 지적 호기심을 자극시키는 것이 있다. 어떤 문제에 대한 결정적이고 순수한 해결 방법을 찾아야한다. 변수를 조작하거나 동적 분기를 허락하지 않는다. 오로지 컴파일 타임에 해결해야한다. 어떤 로직을 템플릿 프로그래밍으로 해결했을 때의 즐거움은 이루 말할 수 없다. C++을 그저 객체지향언어로 사용한다면 C#이 더 좋은 선택이라고 생각한다. C++은 템플릿 프로그래밍을 통해 무한의 개념에 접근한다. 당신은 로직을 추상화시켜야 한다. 도구가 그것을 강제한다. 컴파일 시간이 길어지고 쓸데없이 템플릿 처리가 많아져 메모리를 많이 차지하는 부작용도 있다. 허나 동적 분기의 제거로 인한 최적화 가능성 무엇보다 지적 즐거움 때문에 포기할 수 없다. 최근에 맞닥뜨.. 2021. 3. 25.
로켓 컴퍼니 주식에 대해 이야기하다가 부인에게 자신이 투자하고 싶은 회사에 대해 들었다. 그녀는 놀랍게도 진취적이었다. 우주 여행을 사업으로 하는 회사에 투자하고 싶다고 했다. 나는 그쪽 분야에 전혀 관심이 없었기 때문에 종목에 대해서도 몰랐다. 어쨌든 버진 갤럭틱이란 종목을 알게 되었고 투자를 했다. 그리고 그 사업이 어떻게 돌아가는지 알고 싶었다. 검색에 따르면 비행기에 재돌입 가능한 발사체를 쏘아 성층권 너머를 보여주는 것으로 보였다. 좀더 밀도있는 정보를 원했고 이 책을 알게 되었다. 이 책은 언급한 회사의 사업과는 완전히 다른 분야를 다룬다. 스페이스X가 더 걸맞을 것이다. 재사용 가능한 발사체를 만들고 저렴한 가격에 우주 공간에 화물을 나를 수 있게 한다. 그들은 초월적인 기술을 쓰지 않는다. 검증된 상용.. 2021. 3. 11.
포레스트 검프 영화를 보는 일은 종종 남의 인생을 훔쳐보는 것처럼 느껴진다. 평소 나는 좀 친하다 싶으면 꼬치꼬치 질문을 하는 편이다. 이것이 사람들을 불편하게 하므로 정말 친하지 않으면 꺼려지는 일이다. 중년이 접어들면서 교우 관계가 좁아지며 이런 일은 잦아지고 있다. 때문에 영화를 보는 일은 내게 대리 만족을 준다. 포레스트 검프는 바보 이야기라기 보다 우직한 남자에 대한 내용이다. 그는 아름드리 떡갈나무 같다. 그는 쉬운 길을 가지 않는다는 점에서 존경할만한 인격을 갖고 있다. 무언가 얻기 위해 그는 잔머리를 굴리지 않는다. 어쩌면 많은 생각이 불필요하다는 점을 일깨워주는 것 같다. 오로지 행동. 행동이 중요하다. 그는 생각하기에 앞서 행동한다. 제니를 구하는데 주저하지 않고, 어떤 기회가 오면 따지지 않는다. .. 2021. 3. 9.
혁신의 정의 혁신이란 말의 정의 자체가 혁신으로 인정받기 전날까지 '미친 아이디어'로 여겨지는 무언가를 의미한다. 미친 생각으로 보이지 않는다면, 그것은 진정한 혁신이 아니고 점증적인 개선에 불과하다. 진 크랜즈가 남긴 불멸의 명언을 기억해 보자. '실패라는 놈은 피하기로 선택할 수 있는 대상이 아니다.' 여러분이 실패가 용인되지 않는 환경에서 살며 일하고 있다면 혁신을 이뤄 낼 수 없다. 로켓 컴퍼니, 추천의 글 중. 피터 디아만디스. 엑스프라이즈 설립자 2021. 2. 21.
페르세폴리스 책을 읽은 건 꽤 오래전 일이다. 영화가 나온 걸 안 것도 꽤 예전 일이다. 그럼에도 불구하고 이제야 보게 되었다. 책을 무척 재밌게 읽었음에도 말이다. 영화는 마르잔 사트라피의 자서전 같은 내용이다. 그리 긴 기간은 아니다. 그녀의 20대 초반까지의 삶을 그렸다. 그럼에도 무척 길게 느껴지는데 그것은 그녀의 삶에 극적인 일이 많기 때문이다. 친척이 사형당하거나, 할아버지가 왕족이었다거나, 친구 집이 미사일로 부숴진다거나 하는 일을 당한 사람이 얼마나 있을까? 게다가 그녀 자신도 반항적인 인물로 사회에 나름 도전하며 살았던 인물이었다. 영화 전반부는 유년기의 그녀가 주변에서 생기는 일들을 그리고 있다. 여기서 이란 사회의 시대적 사건들을 화자 입장에서 잘 그리고 있다. 나머지는 그녀 자신에게 집중해서 반.. 2021. 2. 21.
위치 지정 new 이 방법은 이렇다. 힙에서 할당하는 대신 인자로 건네진 포인터를 기점으로 할당하고 생성자를 호출한다. 영어로는 placement new라고 불린다. #include #include struct Test { int v0{}; Test() { std::cout 2021. 2. 17.
메모리 컴퓨터에서 메모리는 CPU에게 있어 책상과 같은 역할이다. 우리가 공부를 할 때 책상에 필요한 것을 늘어놓는 것처럼 CPU도 그러하다. 우리가 손에 닿는 거리 만큼이 주소 공간이 된다. 팔이 길면 길수록 멀리 떨어질 건 잡을 수 있는 것처럼 더 많은 정보에 접근할 수 있다. CPU는 메모리와 데이터를 주고 받을 때 버스라는 시스템을 이용한다. 이것은 도로와 같은 개념이다. 도로가 넓을 수록 교통량을 많이 수용할 수 있는 것처럼 버스의 대역폭이 클 수록 더 많은 데이터를 한꺼번에 읽을 수 있다. alignas에서 본 것처럼 정렬된 데이터는 - 즉 버스에 폭맞춤되면 전송 속도는 더 빨라진다. 추가의 패딩 바이트가 필요없기 때문이다. 운영체제는 어플리케이션를 실행할 때 로더를 이용해서 파일시스템에 있는 데이터.. 2021. 2. 15.
데이어스 엑스: 맨카인드 디바이디드 전작을 워낙 재미있게 했기 때문에 후속편도 꼭 해보고 싶었다. 거진 6개월 만에 시도한 것 같다. 좋은 평가보다 아닌 것이 더 눈에 많이 보였다. 그러나 이 세계관에 푹 빠지고 게임 시스템 또한 대만족이었던 관계로 일단 즐겨봤다. 이번 역시 대만족이었다. 전작보다 뛰어난 그래픽은 세계에 더욱 몰입하게 했다. 연출 또한 너무나 뛰어나서 문자 그대로 나를 흥분하게 했다. 차별받는 강화 인간들. 게토에 몰아 넣고 온갖 학대와 차별을 저지르는 일반인들. 그럴만한 사정이 있기에 그들을 분리해야하는 현실. 그로 빚어지는 문제들과 그를 둘러싼 인간 군상들을 현실감있게 그려냈다. 주인공은 태스크포스 29라는 대테러를 목적으로 하는 인터폴 산하의 조직에 속해있다. 그러면서 저거넛이라는 해커 조직과 함께 일루미나티의 비밀.. 2021. 2. 8.
210205 오랜 사회 생활을 하면서 존경하는 사람이 있다. 그는 굉장한 천재이다. 못 해결하는 문제를 보지 못했다. 그러면서도 대단히 친절하다. 누군가 도움을 청하면 기꺼이 도와준다. 그리고 아무리 질문을 던져도 모두 답해준다. 사실에 기반한 핵심적이고 명료한 답변. 그의 지성은 반짝이며 매력적이다. 내가 이전 회사에서 다닌 8년이 허송이라도 그런 천재를 만나고 그 광채를 곁에서 누렸으니 충분한 보상이라고 생각한다. 그런 그를 지난 달에 봤다. 병으로 인해 그는 좋아하는 기호를 대부분 끊은 상태였다. 그래도 그는 빛났고 영원해보였다. 그러나 최근에 본 그는 달랐다. 몸은 더 말랐고 기운도 없어 보였다. 그대로인 것 눈빛 그리고 미소였다. 그의 매력 중의 하나이다. 그의 잔잔한 미소는 어딘가 낯이 있다. 부처에서 보.. 2021. 2. 5.
alignas 컴퓨터는 버스라는 전송 장치가 있다. 이는 물리 메모리에서 다른 장치(CPU, 다른 메모리 등)로 데이터를 전송하는데 쓰이는 선로이다. 도로와 비견되며 버스의 대역폭-한꺼번에 전송 가능한 크기-이 클수록 정보를 더 빠르게 전달할 수 있다. 그렇다면 대역폭보다 전송할 데이터의 크기가 작다면 어떻게 될까? 유감스럽게도 그렇더라도 그대로 전송한다. 이렇게 대역폭에서 쓰지 않는 만큼을 패딩이라고 한다. 대역폭과 자료형을 맞추면 추가적인 처리가 필요없어 더 빠르게 전송할 수 있다. C11부터 포함된 alignas는 구조체가 효율적인 크기를 갖도록 컴파일러 차원에서 강제해준다. // C11 struct alignas(16) float4 { float r; float g; float b; float a; }; // .. 2021. 2. 3.
make_index_sequence 구현 tuple 출력에 이어 또 다시 과제를 풀어보았다. 이번에는 std::make_index_sequence를 구현해보는 것이었다. 이걸 처음 썼을 때는 왜 std::make_index_sequence로 만든 인스턴스를 넘겨줘야 하는지 이해하지 못했다. 왜냐하면 템플릿 인자로도 충분하다고 생각했기 때문이다. 그러나 구현해보니 이해가 되었다. 템플릿 함수의 템플릿 인자여도 가능할 것이다. 템플릿 인자로 넘겨줄 경우 안에 들어있는 파라미터 팩을 꺼내려면 조금 까다로운 코딩이 필요할 것이다. 즉 make_index_sequence의 로직이 반복될 것이다. 별도로 분리한 결과 [0 ... n] 인자를 넘기는 방식에 대해 더 간단하고 쉬운 해결책을 표준은 제시했다. 이제 다시 강의를 들어야겠다. template st.. 2021. 1. 27.
tuple 출력 #include #include template std::ostream& print_tuple_element( std::ostream& os, TUPLE& t, char const* sep ) { if constexpr (INDEX > 1) { print_tuple_element( os, t, sep ); } if constexpr (INDEX == 1) { sep = ""; } return os 2021. 1. 22.
std::remove_if 조건에 일치하는 반복자를 일치하는 않은 반복자 위치에 덮어씀. 따라서 조건을 만족한 컬렉션을 확인하면 중복된 데이터가 존재함 template ForwardIt remove_if(ForwardIt first, ForwardIt last, UnaryPredicate p) { first = std::find_if(first, last, p); if (first != last) for(ForwardIt i = first; ++i != last; ) if (!p(*i)) // first 위치에 부합되지 않는 정보가 덮어씌워짐 *first++ = std::move(*i); return first; } 결과 값으로 검사를 끝낸 마지막 반복자가 나옴 따라서 반드시 정리가 필요 auto iter = std::remove.. 2021. 1. 21.
instance in underlying array class copy_unable { public: copy_unable() {} copy_unable(copy_unable&) = delete; }; int main() { copy_unable c, d; // C2280: 'copy_unable::copy_unable(copy_unable &)': 삭제된 함수를 참조하려고 합니다. // std::initialize_list auto cc = { c, d }; return 0; } c++에서 여러 인스턴스들에게 반복된 로직을 실행시키기 위해 for 문을 사용할 수 있다. 이 때 반복시키기 위해 initialize_list나 array 등 기본 배열에 담는 경우에 복사가 생긴다. 이는 분명한 오버헤드이므로 회피해야 한다. 다만 언급한 사례처럼 불가피하게 중.. 2021. 1. 21.
forward declaration of unique_ptr<T> // A.h class A { A(); std::unique_ptr _b; } // A.cpp A::A() : _b{ std::make_unique() } {} 포인터나 참조를 헤더에 정의한 경우 전방 선언은 필수로 요구된다. 컴파일보다 링킹이 빠르기 때문이다. 허나 이것을 컴파일하면 C2027 오류를 받게 된다. 오류를 살펴보면 unique_ptr의 소멸자에서 T를 실체화하려고 시도하다가 났다는 것을 알 수 있다. 소멸자를 선언하면 오류가 나지 않는다. 이때 인라인이어서는 안된다. 그러나 왜 이럴까? 이는 사용자 정의 소멸자가 없으면 컴파일러가 암시적으로 삽입하기 때문이다. 이걸 인라인으로 처리한다. 이는 헤더에 삽입된다는 의미가 된다. 헤더에는 전방 선언 뿐이므로 해당 오류가 발생한다. 따라서 소멸자.. 2021. 1. 21.
현대조선잔혹사 이 책을 서가에서 꺼낸 건 북한에 대한 이야기로 생각해서였다. 배색도 인공기 같았다. 그런데 아니었다. 이 책은 남한 그리고 조선업 노동자에 대한 이야기였다. 그 이야기는 실로 비참하고 잔혹했다. 마치 텔레비전 광고에 나오는 월드비전 식의 이야기였다. 그런 범죄에 가까운 일이 바로 우리에게 일어나고 있었다. 놀랍게도 기자는 위장취업을 했다. 그래서 하청 노동자의 삶을 며칠이나마 직접 체험했다. 그 며칠동안 가혹한 노동의 무게를 절감하고 죽음의 위기를 느꼈다. 일년에 사망자가 백단위로 나온다. 다치는 사람은 얼마나 많을까? 부상을 당해 불구가 된 사람도 나온다. 그러나 대부분 기본적인 산업재해보험의 혜택도 받지 못한다. 그런 경우 원청에 해가 되기 때문이다. 무사고 기록이 깨짐으로써 얻게 되는 불이익을 하.. 2021. 1. 16.
브이 포 벤데타 영화를 무척이나 감명깊게 보았던 탓에 언젠가 책을 꼭 봐야지 생각했던 적이 있다. 그게 10년이 넘었다. 모두들 재택근무하는 와중에 홀로 출근하는 덕에 식사 중에 독서를 할 여유가 생겼다. 이건 내 오랜 습관이었는데 결혼하면서 없애긴 했다. 어쨌든 주로 비주얼 노블을 본다. 오늘도 점심 먹을 때 볼 책을 찾기 위해 회사 도서관을 열심히 살핀 덕에 발견했다. 이 책은 파시즘에 사로잡힌 영국의 모습을 그린다. 영국 주변은 더욱 암울하다. 핵전쟁의 영향으로 다른 나라가 존재하는지도 알 수 없다. 어찌된 영문인지 영국은 그럭저럭 돌아간다. 게다가 놀라운 대중 감시 시스템을 구축하고, 운명이란 슈퍼 컴퓨터도 가지고 있다. 집권층은 선출된 권력이 아니다. 그들은 갱으로서 내전에서 승리한 조직이다. 그럼에도 내 생각.. 2021. 1. 8.
마르지 폴란드에서 자란 어린 소녀의 이야기. 이것 말고도 한 권 더 번역 출간되었다고 한다. 프랑스에서 발간되었다는데 거기서는 인기가 꽤 있나보다. 꽤나 많이 나온 것 같다. 그런데, 일상물이라지만 참 심심하다. 어린 아이의 일기장을 발견하고 옮겨적은 듯한 느낌이다. 사회주의 체제의 폴란드가 어찌나 유년 시절의 한국과 비슷한지 이국적인 느낌조차 받기 힘들었다. 폴란드 사람은 겨울에 잉어를 먹는다... 물건을 사기 위해 줄을 서야 한다... 바나나는 정말 귀하다... 러시아제 냉장고에 감동한다... 지금이야 물자가 넘치는 시대에 살고 있지만, 나 어린 시절에는 무엇하나 소중하지 않은 것이 없었다. 신문지도 알뜰히 모아서 학교에 갖다줘야 했다. 공병은 정말 알짜였다. 몇개만 모아도 과자 하나를 사먹을 수 있었다. .. 2021. 1. 5.
당신의 개가 뭅니까? 그는 개를 쳐다보다가 약간 망설이며 노인에게 "당신의 개가 뭅니까?"라고 물었습니다. 노인은 "아닐세."라고 대답했지요. 그런데 이방인이 손을 내밀어 개를 쓰다듬자 개가 갑자기 공격해 거의 팔을 물어뜯길 뻔했습니다. 이방인은 찢어진 코트를 매만지며 노인에게 말했습니다. "노인장 말씀대로 개가 물지 않을 거라고 생각했습니다." 그러자 노인은 "그 개는 내 개가 아닐세."라고 대꾸했답니다. 버핏, 로저 로웬스타인 2021. 1. 2.
약한 연결고리 전체 실적이 좋은 사람도 그에게 술버릇이나 쉽게 생기는 돈을 좋아하는 것처럼 약점이 있다면 그것이 그를 망가뜨리는 결정적 요소가 될 수 있다. 금융시장에서는 그 '약한 연결고리'가 바로 빌린 돈이다. 버핏, 로저 로웬스타인 2021. 1. 2.
1퍼센트만 실제로 포도주 프랑스에 있는 3만 2,375평방미터 정도의 작은 포도밭에서 생산되는 포도는 아마 전세계에서 최고 품질일 겁니다. 그러나 저는 항상 포도 가치의 99퍼센트는 스토리텔링에 있고, 약 1퍼센트만 실제로 포도주로 만들어 마시는데 있다고 생각합니다." 버핏, 로저 로웬스타인 2021. 1. 2.
무너지는 데는 5분 "명성을 쌓는 데는 20년이 걸리지만 무너지는 데는 단 5분밖에 걸리지 않는단다. 만약 네가 이 점을 생각한다면 일을 처리하는 방법이 달라질거다." 버핏, 로저 로웬스타인 2021. 1. 2.
백만장자의 기분 "버핏 씨, 백만장자가 되면 어떤 기분이 듭니까? 저는 백만장자를 알고 지낸 적이 없거든요." "저는 원하는 건 뭐든 현금으로 살 수 있습니다. 그렇지만 항상 살 수 있기만 할 뿐 실제로 사지는 않습니다." 버핏, 로저 로웬스타인 2021. 1. 2.
사냥이 끝난 뒤 사냥개는 필요 없다 금융 회사 인사부에서 일하던 선배가 있었다. 2008년 금융 위기 때 회사는 인력을 감축하기로 했다. 선배가 총대를 메야 했다. 직원들을 한 명 한 명 불러 회사 상황을 설명하고 퇴직을 종용했다. 너무 힘들었지만 처자식을 생각하면서 버텼다. 겨우 구조 조정을 마무리할 즈음, 회사 중역이 선배를 불러 경과를 물었다. 그러고는 이렇게 말하더란다. "그래서, 자네는 언제 나갈 예정인가." 선배는 구조 조정이 마무리되면서 회사를 떠났다. 사냥이 끝난 뒤 버려진 사냥개처럼. 현대조선잔혹사, 허환주 2020. 12. 31.
평범한 왕 아내를 잃은 한 노인이 소일거리를 생각해냈다. 바로 자신의 왕국을 세우는 일. 유감스럽게도 신민은 애견 한 마리 뿐. 허나 이것으로도 충분한다. 왕국의 일은 바쁘고 그걸 하느냐 그는 삶의 동력을 얻었기 때문이다. 불행한 딸과 몽상가 사위가 나오는데 이들은 이야기에서 빠져도 무방한 것 같다. 허나 노인의 삶이 워낙 건조하기 때문에 이들의 드라마가 없었다면 지루했을 것이다. 그저 가볍게 읽었지만 내 노년의 삶에 대해 생각해보았다. 어제는 라디오에서 무서운 이야기도 들었기 때문에 더욱 그렇다. 한국 노인 빈곤층 40%.... 그런 걸 떠나서 정서는 어떠할까. 아버지가 불편한 다리 때문에 얼마나 상처 받으시고 스스로를 고통스럽게 하셨는지 안다. 나도 그럴지도 모른다. 나의 배우자에게 해결책을 찾을 수 있을 것이.. 2020. 12. 31.
최신 STL 배우는 방법 Q: 최신 STL 기능을 배우는 가장 좋은 방법은 뭘까요? 온라인 쿡북이 있나요? 함수형 스타일? 팀에 책을 쓰는 전문가가 있나요? A: 구현해보는 게 최고의 방법입니다. STL 유지보수하는 사람 중 아무도 책을 쓸 시간이 없습니다. 하지만 우린 마이크로소프트 Docs 팀에서 온 타일러 화이트니와 지난 몇년간 구현했던 여러가지 것들을 문서로 정리하고 있습니다. cppreference.com은 커뮤니티에서 모인 정보를 보기 좋은 곳이죠. 제 생각에 기능을 배우는 좋은 방법은, 구현도 아니고 장난감같이 갖고 놀면서, 아주 단순한 환경에서 기초에 익숙해지고, 실제 환경에서 간단히 사용해보면서, 점차 고급 영역으로 나아가는 겁니다. 실제 개발 환경에서 새 기능을 바로 써보려하는 건 두통거리가 될 건데요, 기능을.. 2020. 12. 15.
C++ 명언 너를 미워하고 싶지 않거든 소멸자에 특별한 코드를 넣지 마시오 devblogs.microsoft.com/oldnewthing/20201112-00/?p=104444devblogs.microsoft.com/oldnewthing/20201112-00/?p=104444#comment-137422 2020. 12. 15.