💻 Programming
프로그래밍 — C/C++, 디자인 패턴, 알고리즘, 소프트웨어 공학
Abseil Code Review
abseil
Abseil Code Review — Google production-grade C++ 라이브러리 분석
Google이 만든 Abseil C++ 라이브러리를 code review의 시선으로 읽는다. std를 보완하는 industrial-grade 도구의 설계 의도와 사용 패턴을 13 Parts 68편으로 살펴본다.
Abseil 개요 — Google이 std를 보완한 이유
Part 1-01: Abseil 개요 — Google이 std의 한계를 보완하기 위해 만든 industrial-grade C++ 라이브러리.
Abseil 설계 철학 — std 호환과 추가 기능의 균형
Part 1-02: Abseil 설계 철학 — std 호환, ABI 안정성 정책, Live at Head 모델.
Abseil 빌드와 의존성 — Bazel vs CMake
Part 1-03: Abseil 빌드 — Bazel(WORKSPACE/MODULE) vs CMake(FetchContent), vcpkg/Conan 패키지 매니저.
Abseil LTS vs HEAD 릴리스 모델 분석
Part 1-04: LTS vs HEAD — Abseil의 두 가지 릴리스 모델, breaking change 정책, 마이그레이션 비용.
Abseil Versioning과 ABI 호환성 정책
Part 1-05: Abseil의 versioning 정책 — inline namespace, ABI 호환 범위, prebuilt 사용 시 함정.
Abseil 매크로 — ABSL_HAVE_*·ABSL_ATTRIBUTE_*
Part 2-01: feature detection과 attribute 매크로 — 컴파일러·플랫폼 차이를 흡수하는 Abseil의 기반.
Abseil ABSL_PREDICT_TRUE/FALSE — branch hint
Part 2-02: ABSL_PREDICT_TRUE/FALSE — 분기 예측 힌트의 실제 효과, 코드 레이아웃 영향.
absl::LogSeverity — 로그 레벨 타입
Part 2-03: absl::LogSeverity — INFO/WARNING/ERROR/FATAL 4단계, NormalizeLogSeverity, 외부 시스템 연동.
Abseil type_traits — negation·conjunction·void_t
Part 2-04: absl::negation, absl::conjunction, absl::void_t — C++17 type_traits의 C++14 polyfill과 SFINAE 활용.
Abseil Conformance·Policy 분석
Part 2-05: Abseil의 platform conformance 정책 — 지원 컴파일러, 표준 버전, deprecated_if_unavailable.
Abseil Memory utilities 분석
Part 2-06: absl::memory — make_unique polyfill, allocator_traits, RawPtr, uninitialized helpers.
Abseil raw_logging — heap-free 로깅
Part 2-07: raw_logging — heap, exception, mutex 없이 동작하는 로깅. signal handler, ASan early init, OOM 경로.
Abseil thread_annotations — clang TSA 통합
Part 2-08: ABSL_GUARDED_BY, ABSL_LOCKS_EXCLUDED — clang의 thread safety analysis로 mutex 사용을 컴파일 시점에 검증.
absl::Status — exception-free error handling
Part 3-01: absl::Status — Google이 exception 없이 production C++ 에러를 다루는 방법. canonical error code, payload, 내부 표현.
absl::StatusOr<T> — 값 또는 에러
Part 3-02: absl::StatusOr<T> — 값과 에러를 한 type에 묶는 패턴, 내부 메모리 레이아웃, monadic 스타일.
absl status_macros — ASSIGN_OR_RETURN·RETURN_IF_ERROR
Part 3-03: RETURN_IF_ERROR와 ASSIGN_OR_RETURN — 에러 전파를 한 줄로. 매크로 expansion 분석과 안전한 사용법.
absl::Status payload — 구조화된 에러 컨텍스트
Part 3-04: Status payload — URL-based key로 구조화된 컨텍스트를 첨부, gRPC error_details와 연동.
absl::Status ↔ exception 변환 패턴
Part 3-05: Status와 exception/std::error_code/gRPC status 사이 변환 — 라이브러리 경계에서의 안전한 처리.
absl::string_view — non-owning 문자열 참조
Part 4-01: absl::string_view — 복사 없는 문자열 전달, lifetime 책임, std::string_view와의 관계.
absl::string_view 함정 — dangling·c_str·임시 객체
Part 4-02: string_view를 실전에서 잘못 쓰는 패턴 — dangling reference, c_str 변환 비용, 임시 std::string 바인딩.
absl::StrCat — 가변 인자 문자열 연결과 AlphaNum
Part 4-03: absl::StrCat — variadic 문자열 연결, AlphaNum 어댑터, operator+ / ostringstream과의 성능 차이.
absl::StrSplit — Delimiter·Predicate·컨테이너 변환
Part 4-04: absl::StrSplit — Delimiter 추상화, ByChar/ByString/ByAnyChar/ByLength, predicate 필터링, 임의 컨테이너 자동 변환.
absl::StrJoin — 컨테이너 결합과 Formatter
Part 4-05: absl::StrJoin — 임의 컨테이너를 구분자로 합치기, Formatter 커스터마이즈, PairFormatter / DereferenceFormatter.
absl::StrFormat — type-safe printf·FormatSpec
Part 4-06: absl::StrFormat — printf 호환 syntax의 type-safe 포맷팅, FormatSpec 컴파일 타임 검증, FormatUntyped.
Abseil ASCII 함수 — locale-free 분류·대소문자 변환
Part 4-07: absl::ascii_* — locale 독립 ASCII 분류, AsciiStrToLower / AsciiStrToUpper / StripAsciiWhitespace.
Abseil Escape — CEscape·HexEscape·Base64
Part 4-08: absl::CEscape / CHexEscape / Base64Escape / WebSafeBase64Escape — 안전한 문자열 이스케이프와 base64 인코딩의 모든 변형.
absl::flat_hash_map — Swiss Table 기반 hash map
Part 5-01: absl::flat_hash_map — Swiss Table 채택 배경, std::unordered_map 대비 cache locality와 성능, pointer/iterator 안정성 트레이드오프.
absl::flat_hash_set — set 버전 Swiss Table
Part 5-02: absl::flat_hash_set — flat_hash_map의 set 대응, value-as-key 구조, dedup/membership 워크로드 패턴.
absl::node_hash_map — stable pointer가 필요할 때
Part 5-03: absl::node_hash_map — flat_hash_map의 노드 기반 변형, value pointer 안정성 보장, std::unordered_map 마이그레이션 경로.
absl::btree_map — sorted·cache-friendly B-tree
Part 5-04: absl::btree_map — std::map(red-black tree)의 B-tree 대체, cache locality와 메모리 효율, sorted 컨테이너의 새 기준.
absl::FixedArray — 런타임 크기 stack 배열
Part 5-05: absl::FixedArray — 런타임 결정 크기지만 작으면 stack, 크면 heap. VLA의 안전한 대체.
absl::InlinedVector — small buffer optimization
Part 5-06: absl::InlinedVector — std::vector + 작으면 stack, 커지면 heap. SBO 패턴의 표준 도구.
Abseil Swiss Table internals — control byte·SIMD probing
Part 5-07: Swiss Table 내부 — H1/H2 해시 분할, control byte 그룹, SSE2/SSE3/NEON SIMD probing, tombstone 처리.
absl::Mutex — reader-writer·fairness·deadlock 검출
Part 6-01: absl::Mutex — std::mutex/shared_mutex 통합, contention profiler, deadlock 검출, fairness 정책.
absl::Mutex Conditional Critical Section — Await로 cv 없애기
Part 6-02: Mutex::Await로 함수형 condition을 정의해 condition_variable, notify, spurious wakeup 관용구를 모두 제거.
absl::Notification — once-only signal
Part 6-03: absl::Notification — 한 번만 발생하는 이벤트를 위한 가벼운 signal primitive. atomic flag보다 안전, condition variable보다 단순.
absl::BlockingCounter·Barrier — 다중 thread 조율
Part 6-04: absl::BlockingCounter와 absl::Barrier — N개 작업 완료 대기, N개 thread 동기 합류, fanout-fanin 패턴.
absl::Mutex annotations — clang thread-safety로 race를 컴파일 타임에
Part 6-05: ABSL_GUARDED_BY, ABSL_LOCKS_EXCLUDED, ABSL_EXCLUSIVE_LOCKS_REQUIRED — clang -Wthread-safety와 결합해 lock 누락을 정적 검출.
absl::Time·Duration 분석 — 단단한 type
absl::Time과 absl::Duration — std::chrono의 위에 한 겹을 더 씌워 단위 혼동과 부호 오류를 컴파일러가 잡아내게 만든 layer.
absl::Time Format·Parse
FormatTime, ParseTime — Abseil이 strftime/RFC3339를 한 함수로 흡수하는 방법.
absl::CivilTime 분석
absl::CivilDay와 가족들 — 시간대 없는 달력 산술. 윤년·월말을 직접 처리할 필요가 없게 한다.
absl::time_zone 분석
absl::TimeZone — IANA TZ database 위에 얹은 안전한 변환 layer. UTC가 아닌 시각을 다루는 모든 코드가 거쳐야 할 관문.
absl::Time mocking — 테스트 친화 시간
테스트에서 절대 시간을 통제하기 — clock 주입 패턴과 absl::Now() 대체 전략.
absl::BitGen — 모던 난수 생성기
absl::BitGen — std::mt19937 + std::uniform_int_distribution의 길고 verbose한 조합을 단일 호출로 압축한 random engine.
Abseil Random Distributions — Uniform·Exponential
absl::Uniform, Gaussian, Exponential, Poisson 등 — std::*_distribution의 클래스 객체를 함수 호출로 평탄화.
Abseil Mocking Random — 테스트 결정성
MockingBitGen — 분포 호출의 결과값을 결정적으로 강제. flaky random 테스트를 끝낸다.
Abseil Random Seeding·Entropy
BitGen 시드 관리 — OS entropy, SeedSeq, 결정적 재현성. 그리고 보안 한계.
absl::int128·uint128 분석
absl::int128, uint128 — 64비트로 부족한 곳을 메우는 128비트 정수. 컴파일러 builtin과 emulation 양쪽을 가린 ABI.
absl::bits — popcount·countl_zero
absl::popcount, countl_zero, countr_zero — C++20 <bit>의 polyfill. SwissTable·해시·정수 압축의 핵심 primitive.
absl::optional vs std::optional
absl::optional — std::optional이 도착하기 전 시기의 polyfill. 지금은 std::optional의 alias로 동작.
absl::variant 분석
absl::variant — std::variant의 polyfill. 타입-안전 union과 visitor 패턴.
absl::span 분석
absl::Span — 연속 메모리의 non-owning view. std::span의 친척이자 더 일찍 도착한 polyfill.
absl::any 분석
absl::any — 임의 타입을 담는 type-erased 컨테이너. variant와 언제 어떻게 다른가.
absl::compare — three-way 비교
absl::weak_ordering, strong_ordering, partial_ordering — C++20 spaceship의 polyfill과 비교 helper.
Abseil utility — apply·in_place
absl::apply, in_place_t, integer_sequence — std 미도착 또는 가독성 보강 헬퍼 모음.
Abseil AbslHashValue 분석
AbslHashValue — std::hash 특수화 대신 ADL 기반 friend 함수로 hash를 정의하는 Abseil의 방식.
Abseil HashState chaining
H::combine의 진짜 동작 — HashState로 필드를 chain해 한 번에 좋은 분포를 얻는 방법.
Abseil Custom hashable 구현
실전 사용자 타입을 hashable로 만들기 — value class, enum, pair, raw 바이트 등 흔한 패턴 정리.
Abseil LOG·VLOG·CHECK 분석
Abseil logging 기본 매크로 — severity, verbose level, fatal check. glog의 후속이자 Google 표준.
Abseil LogSink 분석
absl::LogSink — 출력 destination 커스터마이징. 파일·syslog·원격 collector·테스트 캡처.
Abseil LogEntry·structured logging
absl::LogEntry — 한 로그 항목의 메타데이터(severity, timestamp, source location, message). 구조화 로깅의 기반.
Abseil Stack trace·failure_signal_handler
absl::Symbolize, GetStackTrace, InstallFailureSignalHandler — crash 시점에 stack을 찍어 남기는 진단 인프라.
ABSL_FLAG 정의 분석
ABSL_FLAG — gflags의 후속이자 Abseil 표준 command-line flag. type-safe definition과 GetFlag/SetFlag 접근.
Abseil ParseCommandLine 동작
absl::ParseCommandLine — argv를 flag로 분리하고 positional 인자를 돌려주는 단일 진입점.
Abseil Flag introspection·validation
Flag validator, custom type AbslParseFlag/AbslUnparseFlag, introspection API — flag 정확성과 동적 조회.
Google 스타일의 Abseil 사용 패턴
Part 13-01: Google이 사내에서 Abseil을 어떻게 쓰는지 — code review에서 자주 보는 권장 패턴.
Abseil 자주 보는 anti-pattern
code review에서 반복적으로 지적하는 Abseil 오용 사례 — string_view dangling, mutex annotation 누락, StatusOr 무시, 잘못된 hash 등.
std → absl 마이그레이션 전략
기존 std 기반 코드베이스에 Abseil을 도입하는 단계적 전략 — ABI 격리, 점진적 치환, 마이그레이션 도구.
absl::Cleanup — 함수 종료 시 실행 보장
absl::Cleanup — lambda 기반 RAII scope guard. 임시 객체로도 동작하는 ergonomic API, folly::ScopeGuard와의 비교.
Abseil algorithm container 확장 — c_sort·c_find_if·c_count_if
absl::c_* algorithm wrapper — container 전체를 받아 begin/end 자동 처리, STL algorithm의 한 줄 boilerplate를 제거.
absl::function_ref와 any_invocable — 함수 객체 전달의 두 축
absl::FunctionRef는 non-owning callable view, absl::AnyInvocable는 std::function 대체 movable owner. 둘의 차이와 선택 기준.
absl::bind_front와 Overload — 함수 객체 보조 도구
absl::bind_front — std::bind의 후속, 정적 분석 친화. absl::Overload — variant visitor 작성을 줄이는 도우미.
absl::Cord — 분산 시스템용 대용량 문자열
absl::Cord — tree 구조로 표현되는 immutable-ish 문자열. zero-copy concat, shared substring, Google 내부 RPC payload의 기본 표현.
absl::from_chars·SimpleAtoi — 빠른 숫자 변환
absl::SimpleAtoi / SimpleAtof / from_chars — locale-free, exception-free, sscanf 대비 10~50배. std::charconv와의 관계.
absl::Cord vs std::string — 선택 기준과 메모리 프로파일
absl::Cord와 std::string 중 무엇을 쓸지 판단하는 기준 — 크기·mutation 패턴·공유 빈도·메모리 프로파일 비교.
absl::GetStackTrace와 Symbolize — crash 시 readable stack
absl::GetStackTrace로 PC 배열을 받고 absl::Symbolize로 함수 이름·파일·라인으로 변환. signal handler 안에서도 동작하는 async-safe API.
absl::ComputeCrc32c — 하드웨어 가속 체크섬
absl::ComputeCrc32c — SSE4.2 CRC32, ARM CRC 명령어로 가속된 CRC32C 구현. iSCSI·Btrfs·protobuf에서 표준화된 무결성 검사.
absl::PeriodicSampler — 적응형 샘플링·jitter 회피
absl::profiling_internal::PeriodicSampler — sampling rate를 동적으로 조정, geometric distribution으로 jitter 회피. 메모리 할당 추적·profiling 인프라의 기반.
Folly Code Review
folly
Folly Code Review — Meta의 production-grade C++ 라이브러리 코드 분석
Meta(Facebook)가 production에서 검증한 Folly C++ 라이브러리를 code review의 시선으로 읽는다. performance-first 철학과 fbcode 환경의 산물을 14 Parts 63편으로 살펴본다.
Folly 개요 — Meta가 production에서 검증한 utility 모음 분석
Folly의 출발점, 구성, std/Abseil과의 차별점 — Meta production에서 단련된 high-performance C++ 라이브러리.
Folly vs Abseil 철학 비교 — performance-first vs std-compatible
두 라이브러리의 설계 결정을 항목별로 비교 — 예외, 의존성, async 모델, ABI 정책.
Folly 빌드와 fbcode 환경 — monorepo의 그림자
Folly의 빌드 구조 — Meta 내부 fbcode/Buck, OSS는 CMake. 외부 빌드에서 마주치는 함정.
Folly API stability 정책 — 어떤 보장도 없다는 솔직함
Folly의 API/ABI 안정성 정책 — Meta의 입장과 외부 사용자가 따라야 할 전략.
Folly production validation 문화 — peta-scale에서 단련된 코드
Folly 컴포넌트가 Meta production scale에서 어떻게 검증되는가 — 외부 사용자가 신뢰해도 되는 부분과 주의할 부분.
folly::Future 분석 — std::future의 한계를 넘는 composable async
folly::Future가 std::future의 어떤 한계를 해결하는가 — continuation, executor binding, exception 전파.
folly::Promise·makeFuture — Future를 만드는 두 길
folly::Promise로 비동기 완료를 표현하고, makeFuture/makeSemiFuture로 이미 결정된 값을 Future 인터페이스에 올린다.
folly::SemiFuture vs Future — executor binding의 명시화
SemiFuture는 executor에 바인딩되지 않은 상태, Future는 바인딩 완료 상태. 이 구분이 라이브러리 API의 안전성을 만든다.
folly::Future thenValue·thenError·thenTry — continuation 체인 분석
Future continuation API의 세 변형 — 정상값, 예외, 통합 처리. .then은 deprecated.
folly::collect·collectAll·collectAny — fan-in 패턴 분석
여러 SemiFuture를 모으는 세 가지 의미 — 모두 성공, 모두 완료, 하나만 완료.
folly::Future retry·window·via — 제어 흐름 조합자
Future 조립의 제어 흐름 — 재시도, 동시성 윈도, executor 전환.
folly::fibers 분석 — M:N stackful coroutine
Folly fibers는 boost.context 기반 stackful coroutine. 동기 코드처럼 쓰고 비동기로 동작하는 M:N 모델.
folly::InlineExecutor — 호출자 thread에서 즉시 실행
InlineExecutor는 add()의 caller thread에서 callback을 그 자리에서 실행한다. 테스트와 단축 경로에 적합하지만 production hot path에는 위험하다.
folly::CPUThreadPoolExecutor — CPU-bound 작업의 표준 thread pool
CPUThreadPoolExecutor는 CPU 집약 작업을 위한 thread pool. priority queue, blocking queue, thread factory를 조합한다.
folly::IOThreadPoolExecutor — libevent 기반 I/O pool
IOThreadPoolExecutor는 각 worker thread에 EventBase를 두어 libevent 기반 I/O와 timer를 처리한다.
folly::ManualExecutor — 결정적 테스트를 위한 수동 진행
ManualExecutor는 schedule된 task를 자동 실행하지 않고 run()/drive() 호출 시점에만 진행한다. 비동기 코드의 단위 테스트에 결정성을 부여한다.
folly::EventBase 분석 — libevent 이벤트 루프의 핵심
EventBase는 libevent의 event_base를 wrap한 단일 thread event loop. file descriptor, timer, cross-thread message를 한 번에 처리한다.
folly::IOBuf 분석 — zero-copy buffer chain의 기본 단위
IOBuf는 ref-counted byte buffer chain. network 코드의 zero-copy 패턴을 표현하는 Folly의 핵심 자료구조다.
folly::IOBufQueue — chain의 push/pull 추상화
IOBufQueue는 IOBuf chain의 append/prepend/split을 효율적으로 관리한다. streaming codec과 framing layer의 표준 도구다.
folly::io::Cursor·RWCursor — chain 위의 stream
Cursor는 IOBuf chain을 단일 stream처럼 읽고 쓰는 추상화. endian-safe primitive read와 chain 자동 순회를 제공한다.
folly Zero-copy 패턴 — IOBuf로 ScatterGather I/O 표현
IOBuf chain을 직접 writev/readv에 넘기고, splice/sendfile과 결합해 zero-copy 송수신 파이프라인을 구성한다.
folly::IOBuf shared semantics — clone·unshare·takeOwnership
IOBuf의 ref-count는 buffer share를 표현한다. clone/unshare/takeOwnership의 의미를 정확히 이해해야 zero-copy가 안전하다.
folly::FBString 분석 — SSO + COW 구현
FBString의 23-byte SSO와 Copy-on-Write, jemalloc 친화 레이아웃 — std::string 대체로서의 설계 결정.
folly의 fmt::format 통합 — 모던 포맷팅 채택
Folly가 fmt 라이브러리를 채택한 이유, formatter customization, sformat/format 차이.
folly::StringPiece — string_view 호환 분석
StringPiece의 역사적 배경, std::string_view와의 호환 layer, Range<const char*>로서의 일반화.
folly Join·Split utilities — 문자열 분해와 결합
folly::join과 folly::split의 구현, StringPiece 기반 zero-copy split, absl::StrSplit 비교.
folly::to·tryTo — text↔num 변환 분석
folly::to의 throw-on-error 변환, tryTo의 Expected 반환, 양방향 string/number 처리.
folly Conv Customization — 사용자 타입 지원
folly::to에 사용자 타입을 hook하기 — parseTo, toAppend ADL 확장.
folly Conv 성능 비교 — sprintf·stringstream 대비
folly::to의 성능 — lookup table itoa, SWAR atoi, sprintf/iostream과의 5-10배 차이.
folly::F14ValueMap vs std::unordered_map
F14ValueMap의 in-place value 저장과 std::unordered_map node-based의 차이, 성능과 reference 안정성.
folly::F14NodeMap — stable pointer가 필요할 때
F14NodeMap — value를 별도 heap node에 두어 pointer/reference 안정성을 보장하는 F14 변형.
folly::F14VectorMap — cache-friendly iteration
F14VectorMap — value를 contiguous vector에 두고 chunk에는 index만, 순회 cache-friendly.
folly::F14FastMap — auto-select 동작
F14FastMap — key/value 크기로 ValueMap과 VectorMap 중 자동 선택, 사용자 trade-off 제거.
folly F14 internals — SIMD probing 메커니즘
F14 chunk 구조와 SIMD probing — SSE2/AVX/NEON dispatch, H1/H2 hash split, 14-slot 선택 이유.
folly::small_vector — inline storage 분석
small_vector — N개까지 inline 저장, overflow는 heap, std::vector 호환 인터페이스.
folly::FixedString — compile-time string
FixedString — fixed capacity, fully constexpr 문자열 type. compile-time concat과 hash가 가능.
folly::AtomicHashMap — lock-free read 분석
AtomicHashMap — lock-free read, append-only insert, 큰 read-heavy 워크로드용 hash map.
folly::ConcurrentHashMap — sharded 동시 해시 맵
ConcurrentHashMap — sharded buckets + Hazard Pointer로 erase 포함 full thread-safe hash map.
folly::EvictingCacheMap — LRU 구현 분석
EvictingCacheMap — 고정 size 한도와 LRU eviction policy를 결합한 single-thread cache.
folly::Synchronized — lock wrapper 패턴
folly::Synchronized<T> — 데이터와 lock을 한 객체에 묶어 잠금 누락을 컴파일 타임에 막는다.
folly::SharedMutex 분석
folly::SharedMutex — std::shared_mutex보다 작고 빠른 reader-writer lock, fairness 정책 선택.
folly::Baton — one-shot wait 동기화
folly::Baton — 한 번 post, 한 번 wait의 경량 signal primitive. condition variable보다 가볍다.
folly::RWSpinLock 분석
folly::RWSpinLock — spin-only reader-writer lock, 매우 짧은 critical section에 SharedMutex보다 빠르다.
folly::PicoSpinLock — 1-byte spinlock
PicoSpinLock — integer type의 한 bit을 lock으로 사용. 객체 안에 lock을 끼워 넣어 메모리 절약.
folly::ProducerConsumerQueue — SPSC 큐 분석
Part 10-01: ProducerConsumerQueue — SPSC lock-free ring buffer. cache line padding, acquire/release만으로 RTT을 줄이는 패턴.
folly::MPMCQueue — multi-producer multi-consumer
Part 10-02: MPMCQueue — ticket 기반 lock-free 큐. CAS 없이 여러 producer/consumer를 안전하게 처리한다.
folly::UnboundedQueue — 동적 크기 lock-free
Part 10-03: UnboundedQueue — linked segment 기반 동적 크기 lock-free 큐. SPSC 모드에선 거의 무비용으로 성장한다.
folly::fibers::Channel — Go-like channel
Part 10-04: fibers::Channel — fiber 간 producer/consumer 채널. Go의 channel과 비슷한 sync 점.
folly::dynamic — JSON-like dynamic type 분석
Part 11-01: folly::dynamic — JSON-like 동적 타입. std::any와 무엇이 다른지, 왜 Meta는 별도 타입을 만들었는지.
folly JSON conversion — toJson·parseJson
Part 11-02: toJson / parseJson — folly::dynamic ↔ JSON 문자열. parse 옵션, 성능, schema-less 처리.
folly dynamic ↔ struct — manual marshaling
Part 11-03: dynamic을 strongly-typed struct로. type safety boundary를 어디에 그을지, marshaling 패턴 비교.
folly dynamic Visitor pattern — type별 분기
Part 11-04: dynamic을 type별로 처리하는 visitor 패턴. std::visit-like helper로 switch boilerplate를 줄인다.
folly::Singleton vs Meyers/static — 왜 Folly의 Singleton인가
Part 12-01: Meyers singleton과 static 변수의 한계 — destruction order, fork safety, dependency 관리.
folly::SingletonVault 분석 — 등록·소멸·의존성
Part 12-02: SingletonVault — 모든 singleton의 통합 관리. 등록 순서, 의존성 그래프, eager/lazy 전략.
folly::Singleton try_get·try_get_fast — TLS-cached 접근
Part 12-03: try_get vs try_get_fast — TLS 캐시로 hot-path singleton 접근을 nanosecond 수준으로.
folly::ExceptionWrapper — type-erased exception holder
Part 13-01: ExceptionWrapper — exception을 throw 없이 옮기는 holder. async 콜백·thread 경계에서 핵심.
folly::ScopeGuard·SCOPE_EXIT — RAII cleanup
Part 13-02: ScopeGuard / SCOPE_EXIT — RAII로 cleanup 보장. C에서 넘어온 코드 정리에 강력하다.
folly::Optional vs std::optional
Part 13-03: folly::Optional — std::optional와의 차이, 역사적 배경, monadic op과 std 호환.
folly::Function vs std::function
Part 13-04: folly::Function — move-only callable. unique_ptr capture, const-correctness, exec policy를 갖춘 std::function 대체.
folly::Lazy — 지연 초기화 wrapper
Part 13-05: folly::Lazy — once_flag/call_once 패턴을 type level로. 무거운 객체의 첫 사용까지 초기화 연기.
folly Meta 스타일 code review 패턴
Part 14-01: Meta(Facebook) 사내 code review 문화 — performance-first lens.
folly anti-patterns — 잘못 쓰면 std보다 느림
Part 14-02: Folly 오용 패턴 정리 — SemiFuture without via, fbstring small case, F14 잘못된 default, 등.
folly vs std 선택 기준 분석
Part 14-03: std/abseil/folly 선택 의사결정 가이드 — production scale, throughput, latency profile에 따른 분기.
folly::coro 개요 — production C++20 코루틴 어댑터
folly::coro의 위치 — std 코루틴 위에 Task/AsyncGenerator/Mutex를 쌓아 production async를 가능하게 한 이유.
folly::coro::Task — lazy single-shot 코루틴
Task<T>의 lazy start, executor 바인딩, scheduleOn, 값/예외 전파 — production async의 기본 단위.
folly::coro::AsyncGenerator — 비동기 스트림
AsyncGenerator<T>의 pull-based 모델, co_yield, for co_await — 비동기 iterator의 표준 후보 패턴.
folly coro blockingWait·collectAll — 동기 경계와 fan-in
blockingWait, collectAll, collectAllRange — sync 경계 연결과 병렬 합성, deadlock 회피 규칙.
folly::coro::Baton·Mutex — 코루틴-aware 동기화
coro::Baton과 coro::Mutex — thread를 block하지 않고 코루틴만 suspend하는 동기화 프리미티브.
folly::Expected — 결과 또는 오류
Expected<T, E>의 monadic API, std::expected와의 차이, absl::StatusOr와의 비교 — 예외 없는 에러 표현.
folly::Try — Future 결과 wrapper
Try<T>의 세 상태 (value/exception/empty), Future 내부에서의 역할, exception_wrapper와의 관계.
folly::Try vs Expected 선택 기준
언제 Try, 언제 Expected — 비동기 결과 슬롯과 도메인 오류 표현의 명확한 분리.
folly::Range — 일반 iterator pair
Range<Iter>의 설계, StringPiece의 일반화, std::span / std::string_view와의 관계.
folly::Uri — URL 파서
Uri의 RFC 3986 파싱, query string 추출, scheme/host/path 분해 — 표준에 없는 빈자리.
folly Fingerprint64·128 — 분산 hash
Fingerprint의 polynomial Rabin-Karp 기반 hash — sharding, dedup, content addressing.
folly SpookyHashV2 — fast non-crypto hash
SpookyHashV2의 ARX (Add/Rotate/Xor) 기반 빠른 hash — F14의 hasher 기본 후보.
folly::Init — main() 부트스트랩
folly::Init의 역할 — gflags 파싱, signal handler, glog 설정, exit handler 통합.
folly::Indestructible — global lifetime 패턴
Indestructible<T>의 동기 — Meyers singleton의 static deinitialization 함정과 그 회피.
folly::MicroLock — 1-byte 락
MicroLock의 1-byte 표현 — futex 기반 lock으로 std::mutex(40+ byte)의 메모리 비용 회피.
folly::MicroSpinLock — 가장 좁은 spin lock
MicroSpinLock의 1-byte 표현, sleep 없는 순수 spin — 짧은 critical section 전용.
folly::format — legacy formatter 분석
folly::format의 historical 위치, fmt와의 관계, std::format으로의 마이그레이션 경로.
folly::demangle — typeid 디망글링
folly::demangle의 역할 — C++ mangled name을 읽기 쉬운 형식으로, crash log와 typeid 출력에 필수.
folly::DynamicConverter — dynamic ↔ struct
DynamicConverter의 역할 — folly::dynamic과 user struct 사이 boilerplate 없는 양방향 변환.
folly::RecordIO — append-only 로그 파일 포맷
RecordIO의 frame 포맷, checksum, mid-file 복구 — append-only log 파일의 표준 패턴.
folly::io::Compression — zstd·lz4·snappy wrapper
folly::io::Codec — IOBuf 기반 통합 compression API. zstd/lz4/snappy를 같은 인터페이스로.
folly::AsyncIO — io_uring·Linux AIO
folly::AsyncIO와 IoUringBackend — kernel async disk I/O, callback과 coroutine 통합.
folly::CancellationToken — 코루틴·Future 취소 전파
CancellationSource/Token의 전파 모델 — coroutine·Future·callback 트리에서 협력적 취소.
folly::observer — hot config의 atomic refresh
folly::observer — read mostly 값의 atomic refresh, hot config·feature flag·LB weight 같은 패턴의 표준.
fbcode 패턴 모음 — folly 사용의 실전
Meta fbcode 코드 리뷰에서 반복적으로 등장하는 folly 사용 패턴 — overview + 시리즈 마무리.