feat: SDF wiki 컴파일 — 챕터별 한국어 소스 페이지 8개

Software Design for Flexibility (Hanson & Sussman 2021) 전문을
wiki/sources/ 아래 챕터별 한국어 wiki 페이지로 컴파일

- SDF-overview: 전체 개요, 챕터 관계도, 공통 테마
- SDF-ch1: 가산적 프로그래밍 철학, 퇴화성, 유연성 비용
- SDF-ch2: 컴비네이터, DSL, 래퍼, 도메인 모델
- SDF-ch3: 제네릭 프로시저, 자동 미분, 트라이 디스패치
- SDF-ch4: 패턴 매칭, 항 재작성, 단일화, 타입 추론
- SDF-ch5: eval/apply, lazy eval, amb, call/cc
- SDF-ch6: 레이어드 데이텀/프로시저, 단위 산술, 의존성 추적
- SDF-ch7: 전파 모델, 부분 정보 결합, 의존성 지향 백트래킹

wiki/index.md Sources 섹션 등록, wiki/log.md 기록

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
minsung
2026-04-30 14:42:02 +09:00
parent 44e26d6972
commit ea46da91db
10 changed files with 991 additions and 1 deletions

View File

@@ -0,0 +1,112 @@
---
title: "SDF: Software Design for Flexibility — 전체 개요"
tags: [source, SDF]
source: "Software Design for Flexibility, Hanson & Sussman (2021)"
chapter: overview
updated: 2026-04-30
---
# Software Design for Flexibility — 전체 개요
## 서지 정보
- **저자**: Chris Hanson, Gerald Jay Sussman
- **출판**: MIT Press, 2021
- **부제**: How to Avoid Programming Yourself into a Corner
- **라이선스**: CC BY-SA 4.0
- **관련**: SICP의 고급 후속편으로 볼 수 있음
## 책의 핵심 주장
> "It would be nice if all we had to do to add a new feature to a program was to add some code, without changing the existing code base."
대부분의 소프트웨어는 요구사항 변화에 취약하게 설계된다. 이 책은 이 문제에 대한 대안으로 **가산적 프로그래밍(additive programming)**: 기존 코드를 수정하지 않고 코드를 추가해서 기능을 확장하는 스타일을 제안한다.
생물학적 시스템(진화적 적응성, 퇴화성, 탐색적 행동)에서 영감을 받은 설계 원칙들을 Scheme 코드로 구체화한다.
## 챕터별 핵심 주제
| 챕터 | 제목 | 핵심 기법 | 가산성 기여 |
|------|------|-----------|------------|
| 1 | Flexibility in Nature and in Design | 철학·원칙 | 전체 프레임워크 |
| 2 | Domain-Specific Languages | 컴비네이터, 래퍼, 도메인 모델 | 믹스앤매치 부품 |
| 3 | Variations on an Arithmetic Theme | 제네릭 프로시저, 자동 미분 | 핸들러 추가로 확장 |
| 4 | Pattern Matching | 패턴 매처, 단일화, 항 재작성 | 규칙 추가로 확장 |
| 5 | Evaluation | 인터프리터, lazy eval, amb, call/cc | 언어 자체를 확장 |
| 6 | Layering | 레이어드 데이터/프로시저 | 수정 없이 메타데이터 추가 |
| 7 | Propagation | 전파기, 의존성 백트래킹 | 배선도에 전파기 추가 |
## 기법들의 관계
```
가산적 프로그래밍 (Ch1 철학)
├── 컴비네이터/DSL (Ch2) ──────── 도메인 특화 언어의 기반
│ │
│ └── 컴비네이터 한계 → 제네릭 프로시저 (Ch3)
│ │
│ 자동 미분 (Ch3.3)
├── 패턴 매칭 (Ch4) ──────────── 항 재작성, 타입 추론
│ │
│ └── 단일화 → 부분 정보 결합
├── 인터프리터 (Ch5) ──────────── 언어 설계의 완전한 자유
│ │
│ └── amb → 비결정적 탐색
├── 레이어링 (Ch6) ─────────────── 수정 없는 메타데이터 추가
│ │
│ └── 의존성 레이어
│ │
└── 전파 모델 (Ch7) ─────────────── 다방향 제약 + 의존성 백트래킹
```
## 공통 테마
### 가산성 (Additivity)
모든 기법은 기존 코드를 수정하지 않고 새 기능을 추가하는 방식을 제공:
- Ch2: 컴비네이터에 새 부품 추가
- Ch3: 제네릭 프로시저에 새 핸들러 추가
- Ch4: 규칙 시스템에 새 규칙 추가
- Ch5: 인터프리터에 새 표현식 타입 추가
- Ch6: 데이터에 새 레이어 추가
- Ch7: 배선도에 새 전파기 추가
### 부분 정보 (Partial Information)
여러 챕터에서 부분적으로 알려진 정보를 결합하여 더 완전한 답을 얻는 패턴이 반복된다:
- Ch4: 단일화로 타입 제약 결합
- Ch7: 구간 값과 전제를 가진 값들의 결합
### 관심사의 분리 (Separation of Concerns)
- Ch1: served spaces vs. servant spaces (아키텍처 유추)
- Ch2: 도메인 모델 / 제어 구조 / 게임 규칙 분리
- Ch3: 디스패치 전략을 dispatch-store로 분리
- Ch6: 기본 계산과 메타데이터 처리 분리
## 사용 언어: Scheme
Scheme을 선택한 이유:
1. 최소한의 문법 (자연스러운 파스 트리 표현)
2. 허용적(permissive) 언어 — 산술 연산자의 동적 재정의 가능
3. first-class 프로시저, 렉시컬 스코핑
4. reified continuations (call/cc)
5. 동적 바인딩
정적 타입 시스템은 의도적으로 배제 — 유연성 전략의 지적 탐색을 저해하기 때문.
## 저자들의 배경
- Gerald Jay Sussman: Scheme 공동 창시자, MIT 교수, SICP 공저자
- Chris Hanson: MIT/GNU Scheme 주요 개발자, Google/Datera 경력
- 합산 100년 이상의 프로그래밍 경험
## 챕터별 wiki 페이지
- [[SDF-ch1-flexibility]] — Ch1: Flexibility in Nature and in Design
- [[SDF-ch2-dsl]] — Ch2: Domain-Specific Languages
- [[SDF-ch3-generic-procedures]] — Ch3: Variations on an Arithmetic Theme
- [[SDF-ch4-pattern-matching]] — Ch4: Pattern Matching
- [[SDF-ch5-evaluation]] — Ch5: Evaluation
- [[SDF-ch6-layering]] — Ch6: Layering
- [[SDF-ch7-propagation]] — Ch7: Propagation