"One of the nice things about getting older is that you come to understand that you can integrate multiple aspects of your life together. When you're young, you think everything has to be binary, as that's exactly how you feel at that age".
- Min Jin Lee

C++: Golang-ish `defer`-macro


별거 없는데, 문득 심심해서 툭닥거려봤다.

원하는 것과 접근법

  1. https://go.dev/blog/defer-panic-and-recover
  2. https://docs.rs/defer/latest/defer/fn.defer.html
  3. https://ziglang.org/documentation/master/#defer

golang/zig에서처럼 defer 등록한 LIFO순서대로 호출되도록.

검색해보면, 대부분 RAII을 사용하거나 하는 것들이 보인다:

…그냥 std::shared_ptr<void> 을 이용하는 방식이 마음에 들었다. 그리고 조금 더 간단하게 사용하려고 매크로로 만들어 봤다.

defer.inl :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
  /* -*- mode: c++; -*- */

  #ifndef defer_INL
  #define defer_INL 1

  #include <memory>

  #define _Defer_CONCAT_IMPL( x, y ) x##y
  #define _Defer_CONCAT( x, y ) _Defer_CONCAT_IMPL( x, y )

  #define Defer(blk) std::shared_ptr<void> _Defer_CONCAT(Defer_, __COUNTER__ )(nullptr, blk)

  #endif /*defer_INL*/

__COUNTER__ 이용해서 매크로가 생성한 std::shared_ptr<..> 변수의 이름이 겹치지 않도록 해봤다. (…위에 검색한 링크들에도 사용하듯이)

Ping 26/02/2023 .01 : 디자인 css 가볍게 수정


아예 아무런 스타일도 주지 않고, 그냥 알아서 html/css만으로 잘 보이도록 고쳤다. 웹폰트니 그런것도 그냥 껐고.

불필요한 스타일이나 폰트로딩을 줄여서 가볍고, 어차피 웹브라우져의 'reader mode' 지원 같은걸로 내가 스타일 주는 것보다 훨씬 읽기 편안하게 볼 수 있을테니까.

lynx, w3m 같은 텍스트 웹브라우져에서 읽으나 그냥 무거운 웹브라우져으로 읽으나 사람마다 알아서 잘 읽히도록 하는데에만 집중해봤다.

Ping 19/02/2023 .02 : 이름에 대한 추측 (2) HAL, IBM, JCL


(…지난번 C/C++/D/Zig 이름에 대한 추측 에 이어서, 그냥 떠올라서)

  1. HAL 9000 –> IBM

    1. ASCII방식, 혹은 그냥 알파벳에서 한글자씩 앞으로 땡기면, "IBM"이 된다.
  2. JCL

    1. IBM의 "Job Control Language", 메인프레임 등에서 스크립팅을 위해 쓴다고 한다.
    2. "IBM"에서 다시 또 한글자씩 앞으로 땡기면, "JCL".

ㅎㅎ뭐 그냥 그렇다고.

Ping 19/02/2023 .01 : 어른이 되기


(최근 며칠 우울하고 내가 어른이기는 한가 싶은 자괴감에 빠졌었다. 그래서인지 자기합리화를 위해 이런 글을 쓰고 있는거 같기도 하다.)

나의 옛날 이야기

80년대의 기억에는, 참 자주도 불량식품 단속에 대한 이야기가 나오던 것 같아. 그리고 실제로도 만화, 애니메이션, 게임, 장난감 등등의 라이센스나 품질관리에 대한 관념이 희박했던거 같아.

Ping 07/02/2023 .01 : C++, D, Zig의 이름에 대한 추측


문득 떠오른 생각이라서, 그냥 추측.

  1. C : 로마숫자(roman numeral) 으로 100.

    1. 처음부터 의도한 숫자가 100이 아니었을거란건 나도 알거 같아. BCPL이나 그런 역사에 대해 나도 조금은 아니까.
    2. 그런데 그 이후에 따르는 언어들이 그런 패턴을 만든거 같아서 재미로 쓰는 글.
  2. C++ : 위의 로마숫자이란 생각과 C언어의 x++ 연산 으로 생각해보면,

    1. 즉시 평가할 때에는 C == 100, 그냥 C와 같아 보임.
    2. 그런데 저장된 값은 +1, == 101.
    3. …어쨌든 그냥 볼 때엔, 씨언어와 거의 같아 보이지만, 그래도 좀 더 성장했다고. 그리고 겸손하게 오직 +1.
    4. (그냥 겸손하다고 될 문제인가 싶다… C++ 좋아하지만 ㅎㅎ)
  3. D : C에서 다음 단계으로 발전했으니, 이번엔 다섯배, 역시 로마숫자, 500.