본문으로 건너뛰기

💻 Programming

프로그래밍 — C/C++, 디자인 패턴, 알고리즘, 소프트웨어 공학

Abseil Code Review

abseil

0

Abseil Code Review — Google production-grade C++ 라이브러리 분석

Google이 만든 Abseil C++ 라이브러리를 code review의 시선으로 읽는다. std를 보완하는 industrial-grade 도구의 설계 의도와 사용 패턴을 13 Parts 68편으로 살펴본다.

1

Abseil 개요 — Google이 std를 보완한 이유

Part 1-01: Abseil 개요 — Google이 std의 한계를 보완하기 위해 만든 industrial-grade C++ 라이브러리.

2

Abseil 설계 철학 — std 호환과 추가 기능의 균형

Part 1-02: Abseil 설계 철학 — std 호환, ABI 안정성 정책, Live at Head 모델.

3

Abseil 빌드와 의존성 — Bazel vs CMake

Part 1-03: Abseil 빌드 — Bazel(WORKSPACE/MODULE) vs CMake(FetchContent), vcpkg/Conan 패키지 매니저.

4

Abseil LTS vs HEAD 릴리스 모델 분석

Part 1-04: LTS vs HEAD — Abseil의 두 가지 릴리스 모델, breaking change 정책, 마이그레이션 비용.

5

Abseil Versioning과 ABI 호환성 정책

Part 1-05: Abseil의 versioning 정책 — inline namespace, ABI 호환 범위, prebuilt 사용 시 함정.

6

Abseil 매크로 — ABSL_HAVE_*·ABSL_ATTRIBUTE_*

Part 2-01: feature detection과 attribute 매크로 — 컴파일러·플랫폼 차이를 흡수하는 Abseil의 기반.

7

Abseil ABSL_PREDICT_TRUE/FALSE — branch hint

Part 2-02: ABSL_PREDICT_TRUE/FALSE — 분기 예측 힌트의 실제 효과, 코드 레이아웃 영향.

8

absl::LogSeverity — 로그 레벨 타입

Part 2-03: absl::LogSeverity — INFO/WARNING/ERROR/FATAL 4단계, NormalizeLogSeverity, 외부 시스템 연동.

9

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 활용.

10

Abseil Conformance·Policy 분석

Part 2-05: Abseil의 platform conformance 정책 — 지원 컴파일러, 표준 버전, deprecated_if_unavailable.

11

Abseil Memory utilities 분석

Part 2-06: absl::memory — make_unique polyfill, allocator_traits, RawPtr, uninitialized helpers.

12

Abseil raw_logging — heap-free 로깅

Part 2-07: raw_logging — heap, exception, mutex 없이 동작하는 로깅. signal handler, ASan early init, OOM 경로.

13

Abseil thread_annotations — clang TSA 통합

Part 2-08: ABSL_GUARDED_BY, ABSL_LOCKS_EXCLUDED — clang의 thread safety analysis로 mutex 사용을 컴파일 시점에 검증.

14

absl::Status — exception-free error handling

Part 3-01: absl::Status — Google이 exception 없이 production C++ 에러를 다루는 방법. canonical error code, payload, 내부 표현.

15

absl::StatusOr<T> — 값 또는 에러

Part 3-02: absl::StatusOr<T> — 값과 에러를 한 type에 묶는 패턴, 내부 메모리 레이아웃, monadic 스타일.

16

absl status_macros — ASSIGN_OR_RETURN·RETURN_IF_ERROR

Part 3-03: RETURN_IF_ERROR와 ASSIGN_OR_RETURN — 에러 전파를 한 줄로. 매크로 expansion 분석과 안전한 사용법.

17

absl::Status payload — 구조화된 에러 컨텍스트

Part 3-04: Status payload — URL-based key로 구조화된 컨텍스트를 첨부, gRPC error_details와 연동.

18

absl::Status ↔ exception 변환 패턴

Part 3-05: Status와 exception/std::error_code/gRPC status 사이 변환 — 라이브러리 경계에서의 안전한 처리.

19

absl::string_view — non-owning 문자열 참조

Part 4-01: absl::string_view — 복사 없는 문자열 전달, lifetime 책임, std::string_view와의 관계.

20

absl::string_view 함정 — dangling·c_str·임시 객체

Part 4-02: string_view를 실전에서 잘못 쓰는 패턴 — dangling reference, c_str 변환 비용, 임시 std::string 바인딩.

21

absl::StrCat — 가변 인자 문자열 연결과 AlphaNum

Part 4-03: absl::StrCat — variadic 문자열 연결, AlphaNum 어댑터, operator+ / ostringstream과의 성능 차이.

22

absl::StrSplit — Delimiter·Predicate·컨테이너 변환

Part 4-04: absl::StrSplit — Delimiter 추상화, ByChar/ByString/ByAnyChar/ByLength, predicate 필터링, 임의 컨테이너 자동 변환.

23

absl::StrJoin — 컨테이너 결합과 Formatter

Part 4-05: absl::StrJoin — 임의 컨테이너를 구분자로 합치기, Formatter 커스터마이즈, PairFormatter / DereferenceFormatter.

24

absl::StrFormat — type-safe printf·FormatSpec

Part 4-06: absl::StrFormat — printf 호환 syntax의 type-safe 포맷팅, FormatSpec 컴파일 타임 검증, FormatUntyped.

25

Abseil ASCII 함수 — locale-free 분류·대소문자 변환

Part 4-07: absl::ascii_* — locale 독립 ASCII 분류, AsciiStrToLower / AsciiStrToUpper / StripAsciiWhitespace.

26

Abseil Escape — CEscape·HexEscape·Base64

Part 4-08: absl::CEscape / CHexEscape / Base64Escape / WebSafeBase64Escape — 안전한 문자열 이스케이프와 base64 인코딩의 모든 변형.

27

absl::flat_hash_map — Swiss Table 기반 hash map

Part 5-01: absl::flat_hash_map — Swiss Table 채택 배경, std::unordered_map 대비 cache locality와 성능, pointer/iterator 안정성 트레이드오프.

28

absl::flat_hash_set — set 버전 Swiss Table

Part 5-02: absl::flat_hash_set — flat_hash_map의 set 대응, value-as-key 구조, dedup/membership 워크로드 패턴.

29

absl::node_hash_map — stable pointer가 필요할 때

Part 5-03: absl::node_hash_map — flat_hash_map의 노드 기반 변형, value pointer 안정성 보장, std::unordered_map 마이그레이션 경로.

30

absl::btree_map — sorted·cache-friendly B-tree

Part 5-04: absl::btree_map — std::map(red-black tree)의 B-tree 대체, cache locality와 메모리 효율, sorted 컨테이너의 새 기준.

31

absl::FixedArray — 런타임 크기 stack 배열

Part 5-05: absl::FixedArray — 런타임 결정 크기지만 작으면 stack, 크면 heap. VLA의 안전한 대체.

32

absl::InlinedVector — small buffer optimization

Part 5-06: absl::InlinedVector — std::vector + 작으면 stack, 커지면 heap. SBO 패턴의 표준 도구.

33

Abseil Swiss Table internals — control byte·SIMD probing

Part 5-07: Swiss Table 내부 — H1/H2 해시 분할, control byte 그룹, SSE2/SSE3/NEON SIMD probing, tombstone 처리.

34

absl::Mutex — reader-writer·fairness·deadlock 검출

Part 6-01: absl::Mutex — std::mutex/shared_mutex 통합, contention profiler, deadlock 검출, fairness 정책.

35

absl::Mutex Conditional Critical Section — Await로 cv 없애기

Part 6-02: Mutex::Await로 함수형 condition을 정의해 condition_variable, notify, spurious wakeup 관용구를 모두 제거.

36

absl::Notification — once-only signal

Part 6-03: absl::Notification — 한 번만 발생하는 이벤트를 위한 가벼운 signal primitive. atomic flag보다 안전, condition variable보다 단순.

37

absl::BlockingCounter·Barrier — 다중 thread 조율

Part 6-04: absl::BlockingCounter와 absl::Barrier — N개 작업 완료 대기, N개 thread 동기 합류, fanout-fanin 패턴.

38

absl::Mutex annotations — clang thread-safety로 race를 컴파일 타임에

Part 6-05: ABSL_GUARDED_BY, ABSL_LOCKS_EXCLUDED, ABSL_EXCLUSIVE_LOCKS_REQUIRED — clang -Wthread-safety와 결합해 lock 누락을 정적 검출.

39

absl::Time·Duration 분석 — 단단한 type

absl::Time과 absl::Duration — std::chrono의 위에 한 겹을 더 씌워 단위 혼동과 부호 오류를 컴파일러가 잡아내게 만든 layer.

40

absl::Time Format·Parse

FormatTime, ParseTime — Abseil이 strftime/RFC3339를 한 함수로 흡수하는 방법.

41

absl::CivilTime 분석

absl::CivilDay와 가족들 — 시간대 없는 달력 산술. 윤년·월말을 직접 처리할 필요가 없게 한다.

42

absl::time_zone 분석

absl::TimeZone — IANA TZ database 위에 얹은 안전한 변환 layer. UTC가 아닌 시각을 다루는 모든 코드가 거쳐야 할 관문.

43

absl::Time mocking — 테스트 친화 시간

테스트에서 절대 시간을 통제하기 — clock 주입 패턴과 absl::Now() 대체 전략.

44

absl::BitGen — 모던 난수 생성기

absl::BitGen — std::mt19937 + std::uniform_int_distribution의 길고 verbose한 조합을 단일 호출로 압축한 random engine.

45

Abseil Random Distributions — Uniform·Exponential

absl::Uniform, Gaussian, Exponential, Poisson 등 — std::*_distribution의 클래스 객체를 함수 호출로 평탄화.

46

Abseil Mocking Random — 테스트 결정성

MockingBitGen — 분포 호출의 결과값을 결정적으로 강제. flaky random 테스트를 끝낸다.

47

Abseil Random Seeding·Entropy

BitGen 시드 관리 — OS entropy, SeedSeq, 결정적 재현성. 그리고 보안 한계.

48

absl::int128·uint128 분석

absl::int128, uint128 — 64비트로 부족한 곳을 메우는 128비트 정수. 컴파일러 builtin과 emulation 양쪽을 가린 ABI.

49

absl::bits — popcount·countl_zero

absl::popcount, countl_zero, countr_zero — C++20 <bit>의 polyfill. SwissTable·해시·정수 압축의 핵심 primitive.

50

absl::optional vs std::optional

absl::optional — std::optional이 도착하기 전 시기의 polyfill. 지금은 std::optional의 alias로 동작.

51

absl::variant 분석

absl::variant — std::variant의 polyfill. 타입-안전 union과 visitor 패턴.

52

absl::span 분석

absl::Span — 연속 메모리의 non-owning view. std::span의 친척이자 더 일찍 도착한 polyfill.

53

absl::any 분석

absl::any — 임의 타입을 담는 type-erased 컨테이너. variant와 언제 어떻게 다른가.

54

absl::compare — three-way 비교

absl::weak_ordering, strong_ordering, partial_ordering — C++20 spaceship의 polyfill과 비교 helper.

55

Abseil utility — apply·in_place

absl::apply, in_place_t, integer_sequence — std 미도착 또는 가독성 보강 헬퍼 모음.

56

Abseil AbslHashValue 분석

AbslHashValue — std::hash 특수화 대신 ADL 기반 friend 함수로 hash를 정의하는 Abseil의 방식.

57

Abseil HashState chaining

H::combine의 진짜 동작 — HashState로 필드를 chain해 한 번에 좋은 분포를 얻는 방법.

58

Abseil Custom hashable 구현

실전 사용자 타입을 hashable로 만들기 — value class, enum, pair, raw 바이트 등 흔한 패턴 정리.

59

Abseil LOG·VLOG·CHECK 분석

Abseil logging 기본 매크로 — severity, verbose level, fatal check. glog의 후속이자 Google 표준.

60

Abseil LogSink 분석

absl::LogSink — 출력 destination 커스터마이징. 파일·syslog·원격 collector·테스트 캡처.

61

Abseil LogEntry·structured logging

absl::LogEntry — 한 로그 항목의 메타데이터(severity, timestamp, source location, message). 구조화 로깅의 기반.

62

Abseil Stack trace·failure_signal_handler

absl::Symbolize, GetStackTrace, InstallFailureSignalHandler — crash 시점에 stack을 찍어 남기는 진단 인프라.

63

ABSL_FLAG 정의 분석

ABSL_FLAG — gflags의 후속이자 Abseil 표준 command-line flag. type-safe definition과 GetFlag/SetFlag 접근.

64

Abseil ParseCommandLine 동작

absl::ParseCommandLine — argv를 flag로 분리하고 positional 인자를 돌려주는 단일 진입점.

65

Abseil Flag introspection·validation

Flag validator, custom type AbslParseFlag/AbslUnparseFlag, introspection API — flag 정확성과 동적 조회.

66

Google 스타일의 Abseil 사용 패턴

Part 13-01: Google이 사내에서 Abseil을 어떻게 쓰는지 — code review에서 자주 보는 권장 패턴.

67

Abseil 자주 보는 anti-pattern

code review에서 반복적으로 지적하는 Abseil 오용 사례 — string_view dangling, mutex annotation 누락, StatusOr 무시, 잘못된 hash 등.

68

std → absl 마이그레이션 전략

기존 std 기반 코드베이스에 Abseil을 도입하는 단계적 전략 — ABI 격리, 점진적 치환, 마이그레이션 도구.

69

absl::Cleanup — 함수 종료 시 실행 보장

absl::Cleanup — lambda 기반 RAII scope guard. 임시 객체로도 동작하는 ergonomic API, folly::ScopeGuard와의 비교.

70

Abseil algorithm container 확장 — c_sort·c_find_if·c_count_if

absl::c_* algorithm wrapper — container 전체를 받아 begin/end 자동 처리, STL algorithm의 한 줄 boilerplate를 제거.

71

absl::function_ref와 any_invocable — 함수 객체 전달의 두 축

absl::FunctionRef는 non-owning callable view, absl::AnyInvocable는 std::function 대체 movable owner. 둘의 차이와 선택 기준.

72

absl::bind_front와 Overload — 함수 객체 보조 도구

absl::bind_front — std::bind의 후속, 정적 분석 친화. absl::Overload — variant visitor 작성을 줄이는 도우미.

73

absl::Cord — 분산 시스템용 대용량 문자열

absl::Cord — tree 구조로 표현되는 immutable-ish 문자열. zero-copy concat, shared substring, Google 내부 RPC payload의 기본 표현.

74

absl::from_chars·SimpleAtoi — 빠른 숫자 변환

absl::SimpleAtoi / SimpleAtof / from_chars — locale-free, exception-free, sscanf 대비 10~50배. std::charconv와의 관계.

75

absl::Cord vs std::string — 선택 기준과 메모리 프로파일

absl::Cord와 std::string 중 무엇을 쓸지 판단하는 기준 — 크기·mutation 패턴·공유 빈도·메모리 프로파일 비교.

76

absl::GetStackTrace와 Symbolize — crash 시 readable stack

absl::GetStackTrace로 PC 배열을 받고 absl::Symbolize로 함수 이름·파일·라인으로 변환. signal handler 안에서도 동작하는 async-safe API.

77

absl::ComputeCrc32c — 하드웨어 가속 체크섬

absl::ComputeCrc32c — SSE4.2 CRC32, ARM CRC 명령어로 가속된 CRC32C 구현. iSCSI·Btrfs·protobuf에서 표준화된 무결성 검사.

78

absl::PeriodicSampler — 적응형 샘플링·jitter 회피

absl::profiling_internal::PeriodicSampler — sampling rate를 동적으로 조정, geometric distribution으로 jitter 회피. 메모리 할당 추적·profiling 인프라의 기반.

Folly Code Review

folly

0

Folly Code Review — Meta의 production-grade C++ 라이브러리 코드 분석

Meta(Facebook)가 production에서 검증한 Folly C++ 라이브러리를 code review의 시선으로 읽는다. performance-first 철학과 fbcode 환경의 산물을 14 Parts 63편으로 살펴본다.

1

Folly 개요 — Meta가 production에서 검증한 utility 모음 분석

Folly의 출발점, 구성, std/Abseil과의 차별점 — Meta production에서 단련된 high-performance C++ 라이브러리.

2

Folly vs Abseil 철학 비교 — performance-first vs std-compatible

두 라이브러리의 설계 결정을 항목별로 비교 — 예외, 의존성, async 모델, ABI 정책.

3

Folly 빌드와 fbcode 환경 — monorepo의 그림자

Folly의 빌드 구조 — Meta 내부 fbcode/Buck, OSS는 CMake. 외부 빌드에서 마주치는 함정.

4

Folly API stability 정책 — 어떤 보장도 없다는 솔직함

Folly의 API/ABI 안정성 정책 — Meta의 입장과 외부 사용자가 따라야 할 전략.

5

Folly production validation 문화 — peta-scale에서 단련된 코드

Folly 컴포넌트가 Meta production scale에서 어떻게 검증되는가 — 외부 사용자가 신뢰해도 되는 부분과 주의할 부분.

6

folly::Future 분석 — std::future의 한계를 넘는 composable async

folly::Future가 std::future의 어떤 한계를 해결하는가 — continuation, executor binding, exception 전파.

7

folly::Promise·makeFuture — Future를 만드는 두 길

folly::Promise로 비동기 완료를 표현하고, makeFuture/makeSemiFuture로 이미 결정된 값을 Future 인터페이스에 올린다.

8

folly::SemiFuture vs Future — executor binding의 명시화

SemiFuture는 executor에 바인딩되지 않은 상태, Future는 바인딩 완료 상태. 이 구분이 라이브러리 API의 안전성을 만든다.

9

folly::Future thenValue·thenError·thenTry — continuation 체인 분석

Future continuation API의 세 변형 — 정상값, 예외, 통합 처리. .then은 deprecated.

10

folly::collect·collectAll·collectAny — fan-in 패턴 분석

여러 SemiFuture를 모으는 세 가지 의미 — 모두 성공, 모두 완료, 하나만 완료.

11

folly::Future retry·window·via — 제어 흐름 조합자

Future 조립의 제어 흐름 — 재시도, 동시성 윈도, executor 전환.

12

folly::fibers 분석 — M:N stackful coroutine

Folly fibers는 boost.context 기반 stackful coroutine. 동기 코드처럼 쓰고 비동기로 동작하는 M:N 모델.

13

folly::InlineExecutor — 호출자 thread에서 즉시 실행

InlineExecutor는 add()의 caller thread에서 callback을 그 자리에서 실행한다. 테스트와 단축 경로에 적합하지만 production hot path에는 위험하다.

14

folly::CPUThreadPoolExecutor — CPU-bound 작업의 표준 thread pool

CPUThreadPoolExecutor는 CPU 집약 작업을 위한 thread pool. priority queue, blocking queue, thread factory를 조합한다.

15

folly::IOThreadPoolExecutor — libevent 기반 I/O pool

IOThreadPoolExecutor는 각 worker thread에 EventBase를 두어 libevent 기반 I/O와 timer를 처리한다.

16

folly::ManualExecutor — 결정적 테스트를 위한 수동 진행

ManualExecutor는 schedule된 task를 자동 실행하지 않고 run()/drive() 호출 시점에만 진행한다. 비동기 코드의 단위 테스트에 결정성을 부여한다.

17

folly::EventBase 분석 — libevent 이벤트 루프의 핵심

EventBase는 libevent의 event_base를 wrap한 단일 thread event loop. file descriptor, timer, cross-thread message를 한 번에 처리한다.

18

folly::IOBuf 분석 — zero-copy buffer chain의 기본 단위

IOBuf는 ref-counted byte buffer chain. network 코드의 zero-copy 패턴을 표현하는 Folly의 핵심 자료구조다.

19

folly::IOBufQueue — chain의 push/pull 추상화

IOBufQueue는 IOBuf chain의 append/prepend/split을 효율적으로 관리한다. streaming codec과 framing layer의 표준 도구다.

20

folly::io::Cursor·RWCursor — chain 위의 stream

Cursor는 IOBuf chain을 단일 stream처럼 읽고 쓰는 추상화. endian-safe primitive read와 chain 자동 순회를 제공한다.

21

folly Zero-copy 패턴 — IOBuf로 ScatterGather I/O 표현

IOBuf chain을 직접 writev/readv에 넘기고, splice/sendfile과 결합해 zero-copy 송수신 파이프라인을 구성한다.

22

folly::IOBuf shared semantics — clone·unshare·takeOwnership

IOBuf의 ref-count는 buffer share를 표현한다. clone/unshare/takeOwnership의 의미를 정확히 이해해야 zero-copy가 안전하다.

23

folly::FBString 분석 — SSO + COW 구현

FBString의 23-byte SSO와 Copy-on-Write, jemalloc 친화 레이아웃 — std::string 대체로서의 설계 결정.

24

folly의 fmt::format 통합 — 모던 포맷팅 채택

Folly가 fmt 라이브러리를 채택한 이유, formatter customization, sformat/format 차이.

25

folly::StringPiece — string_view 호환 분석

StringPiece의 역사적 배경, std::string_view와의 호환 layer, Range<const char*>로서의 일반화.

26

folly Join·Split utilities — 문자열 분해와 결합

folly::join과 folly::split의 구현, StringPiece 기반 zero-copy split, absl::StrSplit 비교.

27

folly::to·tryTo — text↔num 변환 분석

folly::to의 throw-on-error 변환, tryTo의 Expected 반환, 양방향 string/number 처리.

28

folly Conv Customization — 사용자 타입 지원

folly::to에 사용자 타입을 hook하기 — parseTo, toAppend ADL 확장.

29

folly Conv 성능 비교 — sprintf·stringstream 대비

folly::to의 성능 — lookup table itoa, SWAR atoi, sprintf/iostream과의 5-10배 차이.

30

folly::F14ValueMap vs std::unordered_map

F14ValueMap의 in-place value 저장과 std::unordered_map node-based의 차이, 성능과 reference 안정성.

31

folly::F14NodeMap — stable pointer가 필요할 때

F14NodeMap — value를 별도 heap node에 두어 pointer/reference 안정성을 보장하는 F14 변형.

32

folly::F14VectorMap — cache-friendly iteration

F14VectorMap — value를 contiguous vector에 두고 chunk에는 index만, 순회 cache-friendly.

33

folly::F14FastMap — auto-select 동작

F14FastMap — key/value 크기로 ValueMap과 VectorMap 중 자동 선택, 사용자 trade-off 제거.

34

folly F14 internals — SIMD probing 메커니즘

F14 chunk 구조와 SIMD probing — SSE2/AVX/NEON dispatch, H1/H2 hash split, 14-slot 선택 이유.

35

folly::small_vector — inline storage 분석

small_vector — N개까지 inline 저장, overflow는 heap, std::vector 호환 인터페이스.

36

folly::FixedString — compile-time string

FixedString — fixed capacity, fully constexpr 문자열 type. compile-time concat과 hash가 가능.

37

folly::AtomicHashMap — lock-free read 분석

AtomicHashMap — lock-free read, append-only insert, 큰 read-heavy 워크로드용 hash map.

38

folly::ConcurrentHashMap — sharded 동시 해시 맵

ConcurrentHashMap — sharded buckets + Hazard Pointer로 erase 포함 full thread-safe hash map.

39

folly::EvictingCacheMap — LRU 구현 분석

EvictingCacheMap — 고정 size 한도와 LRU eviction policy를 결합한 single-thread cache.

40

folly::Synchronized — lock wrapper 패턴

folly::Synchronized<T> — 데이터와 lock을 한 객체에 묶어 잠금 누락을 컴파일 타임에 막는다.

41

folly::SharedMutex 분석

folly::SharedMutex — std::shared_mutex보다 작고 빠른 reader-writer lock, fairness 정책 선택.

42

folly::Baton — one-shot wait 동기화

folly::Baton — 한 번 post, 한 번 wait의 경량 signal primitive. condition variable보다 가볍다.

43

folly::RWSpinLock 분석

folly::RWSpinLock — spin-only reader-writer lock, 매우 짧은 critical section에 SharedMutex보다 빠르다.

44

folly::PicoSpinLock — 1-byte spinlock

PicoSpinLock — integer type의 한 bit을 lock으로 사용. 객체 안에 lock을 끼워 넣어 메모리 절약.

45

folly::ProducerConsumerQueue — SPSC 큐 분석

Part 10-01: ProducerConsumerQueue — SPSC lock-free ring buffer. cache line padding, acquire/release만으로 RTT을 줄이는 패턴.

46

folly::MPMCQueue — multi-producer multi-consumer

Part 10-02: MPMCQueue — ticket 기반 lock-free 큐. CAS 없이 여러 producer/consumer를 안전하게 처리한다.

47

folly::UnboundedQueue — 동적 크기 lock-free

Part 10-03: UnboundedQueue — linked segment 기반 동적 크기 lock-free 큐. SPSC 모드에선 거의 무비용으로 성장한다.

48

folly::fibers::Channel — Go-like channel

Part 10-04: fibers::Channel — fiber 간 producer/consumer 채널. Go의 channel과 비슷한 sync 점.

49

folly::dynamic — JSON-like dynamic type 분석

Part 11-01: folly::dynamic — JSON-like 동적 타입. std::any와 무엇이 다른지, 왜 Meta는 별도 타입을 만들었는지.

50

folly JSON conversion — toJson·parseJson

Part 11-02: toJson / parseJson — folly::dynamic ↔ JSON 문자열. parse 옵션, 성능, schema-less 처리.

51

folly dynamic ↔ struct — manual marshaling

Part 11-03: dynamic을 strongly-typed struct로. type safety boundary를 어디에 그을지, marshaling 패턴 비교.

52

folly dynamic Visitor pattern — type별 분기

Part 11-04: dynamic을 type별로 처리하는 visitor 패턴. std::visit-like helper로 switch boilerplate를 줄인다.

53

folly::Singleton vs Meyers/static — 왜 Folly의 Singleton인가

Part 12-01: Meyers singleton과 static 변수의 한계 — destruction order, fork safety, dependency 관리.

54

folly::SingletonVault 분석 — 등록·소멸·의존성

Part 12-02: SingletonVault — 모든 singleton의 통합 관리. 등록 순서, 의존성 그래프, eager/lazy 전략.

55

folly::Singleton try_get·try_get_fast — TLS-cached 접근

Part 12-03: try_get vs try_get_fast — TLS 캐시로 hot-path singleton 접근을 nanosecond 수준으로.

56

folly::ExceptionWrapper — type-erased exception holder

Part 13-01: ExceptionWrapper — exception을 throw 없이 옮기는 holder. async 콜백·thread 경계에서 핵심.

57

folly::ScopeGuard·SCOPE_EXIT — RAII cleanup

Part 13-02: ScopeGuard / SCOPE_EXIT — RAII로 cleanup 보장. C에서 넘어온 코드 정리에 강력하다.

58

folly::Optional vs std::optional

Part 13-03: folly::Optional — std::optional와의 차이, 역사적 배경, monadic op과 std 호환.

59

folly::Function vs std::function

Part 13-04: folly::Function — move-only callable. unique_ptr capture, const-correctness, exec policy를 갖춘 std::function 대체.

60

folly::Lazy — 지연 초기화 wrapper

Part 13-05: folly::Lazy — once_flag/call_once 패턴을 type level로. 무거운 객체의 첫 사용까지 초기화 연기.

61

folly Meta 스타일 code review 패턴

Part 14-01: Meta(Facebook) 사내 code review 문화 — performance-first lens.

62

folly anti-patterns — 잘못 쓰면 std보다 느림

Part 14-02: Folly 오용 패턴 정리 — SemiFuture without via, fbstring small case, F14 잘못된 default, 등.

63

folly vs std 선택 기준 분석

Part 14-03: std/abseil/folly 선택 의사결정 가이드 — production scale, throughput, latency profile에 따른 분기.

64

folly::coro 개요 — production C++20 코루틴 어댑터

folly::coro의 위치 — std 코루틴 위에 Task/AsyncGenerator/Mutex를 쌓아 production async를 가능하게 한 이유.

65

folly::coro::Task — lazy single-shot 코루틴

Task<T>의 lazy start, executor 바인딩, scheduleOn, 값/예외 전파 — production async의 기본 단위.

66

folly::coro::AsyncGenerator — 비동기 스트림

AsyncGenerator<T>의 pull-based 모델, co_yield, for co_await — 비동기 iterator의 표준 후보 패턴.

67

folly coro blockingWait·collectAll — 동기 경계와 fan-in

blockingWait, collectAll, collectAllRange — sync 경계 연결과 병렬 합성, deadlock 회피 규칙.

68

folly::coro::Baton·Mutex — 코루틴-aware 동기화

coro::Baton과 coro::Mutex — thread를 block하지 않고 코루틴만 suspend하는 동기화 프리미티브.

69

folly::Expected — 결과 또는 오류

Expected<T, E>의 monadic API, std::expected와의 차이, absl::StatusOr와의 비교 — 예외 없는 에러 표현.

70

folly::Try — Future 결과 wrapper

Try<T>의 세 상태 (value/exception/empty), Future 내부에서의 역할, exception_wrapper와의 관계.

71

folly::Try vs Expected 선택 기준

언제 Try, 언제 Expected — 비동기 결과 슬롯과 도메인 오류 표현의 명확한 분리.

72

folly::Range — 일반 iterator pair

Range<Iter>의 설계, StringPiece의 일반화, std::span / std::string_view와의 관계.

73

folly::Uri — URL 파서

Uri의 RFC 3986 파싱, query string 추출, scheme/host/path 분해 — 표준에 없는 빈자리.

74

folly Fingerprint64·128 — 분산 hash

Fingerprint의 polynomial Rabin-Karp 기반 hash — sharding, dedup, content addressing.

75

folly SpookyHashV2 — fast non-crypto hash

SpookyHashV2의 ARX (Add/Rotate/Xor) 기반 빠른 hash — F14의 hasher 기본 후보.

76

folly::Init — main() 부트스트랩

folly::Init의 역할 — gflags 파싱, signal handler, glog 설정, exit handler 통합.

77

folly::Indestructible — global lifetime 패턴

Indestructible<T>의 동기 — Meyers singleton의 static deinitialization 함정과 그 회피.

78

folly::MicroLock — 1-byte 락

MicroLock의 1-byte 표현 — futex 기반 lock으로 std::mutex(40+ byte)의 메모리 비용 회피.

79

folly::MicroSpinLock — 가장 좁은 spin lock

MicroSpinLock의 1-byte 표현, sleep 없는 순수 spin — 짧은 critical section 전용.

80

folly::format — legacy formatter 분석

folly::format의 historical 위치, fmt와의 관계, std::format으로의 마이그레이션 경로.

81

folly::demangle — typeid 디망글링

folly::demangle의 역할 — C++ mangled name을 읽기 쉬운 형식으로, crash log와 typeid 출력에 필수.

82

folly::DynamicConverter — dynamic ↔ struct

DynamicConverter의 역할 — folly::dynamic과 user struct 사이 boilerplate 없는 양방향 변환.

83

folly::RecordIO — append-only 로그 파일 포맷

RecordIO의 frame 포맷, checksum, mid-file 복구 — append-only log 파일의 표준 패턴.

84

folly::io::Compression — zstd·lz4·snappy wrapper

folly::io::Codec — IOBuf 기반 통합 compression API. zstd/lz4/snappy를 같은 인터페이스로.

85

folly::AsyncIO — io_uring·Linux AIO

folly::AsyncIO와 IoUringBackend — kernel async disk I/O, callback과 coroutine 통합.

86

folly::CancellationToken — 코루틴·Future 취소 전파

CancellationSource/Token의 전파 모델 — coroutine·Future·callback 트리에서 협력적 취소.

87

folly::observer — hot config의 atomic refresh

folly::observer — read mostly 값의 atomic refresh, hot config·feature flag·LB weight 같은 패턴의 표준.

88

fbcode 패턴 모음 — folly 사용의 실전

Meta fbcode 코드 리뷰에서 반복적으로 등장하는 folly 사용 패턴 — overview + 시리즈 마무리.