메모리 관리 모델 — 수동 vs GC vs 소유권
힙 메모리를 언제 잡고 언제 푸느냐를 누가 결정하는가. 수동 관리(C/C++)·가비지 컬렉션(Go/Java)·소유권(Rust)이라는 세 모델을 안전성·성능·예측성 축으로 비교하고, C++의 RAII와 스마트 포인터, Go의 GC, Rust의 소유권/빌림이 같은 문제를 어떻게 다르게 푸는지 정리한다.
힙 메모리를 언제 잡고 언제 푸느냐를 누가 결정하는가. 수동 관리(C/C++)·가비지 컬렉션(Go/Java)·소유권(Rust)이라는 세 모델을 안전성·성능·예측성 축으로 비교하고, C++의 RAII와 스마트 포인터, Go의 GC, Rust의 소유권/빌림이 같은 문제를 어떻게 다르게 푸는지 정리한다.
클로저를 언어에 종속되지 않은 공통 개념으로 정리한다. 함수와 클로저의 차이, 값 캡처와 참조 캡처의 구분, 언어마다 반복되는 '루프 변수 캡처' 함정을 짚고, C++·Go·Rust·JavaScript가 이 개념을 각각 어떻게 구현했는지 대응시킨다.
코루틴을 언어에 종속되지 않은 공통 개념으로 정리한다. 일반 함수와의 차이(suspend/resume), 스레드와의 차이, 구현 방식의 갈림길(stackful vs stackless)을 짚는다. 나아가 'async/await은 별도 스레드를 만든다'는 흔한 오해를 이벤트 루프로 깨고, 보존 상태의 저장 위치가 구현마다 어떻게 달라지는지 C++의 std::async와 co_await 비교까지 파고든다.
sesh는 선언형 세션 매니저(smug·tmuxp)와 다른 범주다 — 레이아웃을 만드는 게 아니라 디렉토리·git repo에서 세션을 즉석으로 열고 전환하는 피커. 설치·prefix+T 바인딩·핵심 CLI와, smug에서 옮기며 배운 '범주 오선택'까지.
Rust는 도구 경험이 언어의 강점이다. 빌드·테스트·의존성·문서화를 하나로 묶은 cargo, 헤더 없이 코드를 조직하는 mod·use 모듈 시스템과 pub 가시성, crates.io와 cargo add, 그리고 학습에도 좋은 clippy·rustfmt까지. C++의 파편화된 도구 생태계와 비교하며 로드맵을 마무리한다.
Rust의 슬로건 'fearless concurrency'. safe Rust가 소유권·Send/Sync와 동기화 타입으로 데이터 레이스를 막는 원리를 설명한다. std::thread와 mpsc 채널, Arc
②의 소유권 규칙이 너무 빡빡할 때 푸는 도구. C++ 스마트 포인터와 거의 1:1이라 C++ 배경이 크게 유리한 구간이다. 힙 할당 Box(unique_ptr), 참조 카운트 공유 Rc/Arc(shared_ptr), 빌림 검사를 런타임으로 미루는 Rust 특유의 내부 가변성 RefCell/Cell, 순환 참조를 끊는 Weak까지. Rc
C++ 대응이 흐릿한, Rust에서 새로 배우는 축. 여길 건너뛰면 'C++을 Rust 문법으로 쓴' 코드가 된다. 환경 캡처 방식이 소유권과 맞물리는 클로저(Fn/FnMut/FnOnce), for문 대신 iter().map().filter().collect()로 짜는 lazy하고 zero-cost한 반복자 체인까지. 인덱스 루프 습관을 교정한다.
gpakosz/.tmux(Oh My Tmux!)의 2파일 구조와 자동 소싱, vanilla tmux 대비 바꾸는 것(C-a 보조 prefix·vi 복사·SSH-aware 상태바), .tmux.conf.local 커스터마이징 워크플로(tmux_conf_* 노브·#!important·플러그인 자동 관리), 기본 키맵 요점과 stock 키맵을 지키는 tmux_conf_preserve_stock_bindings까지 — 채택 전에 '무엇을 상속하는지' 한 장으로.
C++의 인터페이스·템플릿·concept에 해당하는 Rust 추상화의 중심. 공유 동작을 정의하는 trait, 제약을 미리 선언해 에러가 친절한 제네릭 + trait bound, 런타임 다형성(dyn)과 컴파일 타임 단형화의 트레이드오프, 그리고 라이브러리 설계에서 만나는 orphan rule까지. C++ 템플릿의 '일단 쓰고 안 되면 에러' 습관을 교정한다.