Files
softwaredesign/wiki/sources/SDF-overview.md
minsung ea46da91db 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>
2026-04-30 14:42:02 +09:00

4.9 KiB

title, tags, source, chapter, updated
title tags source chapter updated
SDF: Software Design for Flexibility — 전체 개요
source
SDF
Software Design for Flexibility, Hanson & Sussman (2021) overview 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 페이지