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:
112
wiki/sources/SDF-overview.md
Normal file
112
wiki/sources/SDF-overview.md
Normal 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
|
||||
Reference in New Issue
Block a user