[G1-Sync] Manual knowledge update

This commit is contained in:
Antigravity Agent
2026-05-10 22:08:15 +09:00
parent 21ac3ed255
commit 504fd5fb42
3011 changed files with 380280 additions and 206977 deletions
@@ -2,93 +2,151 @@
id: wiki-2026-0508-incremental-computation
title: Incremental Computation
category: 10_Wiki/Topics
status: needs_review
status: verified
canonical_id: self
aliases: [P-Reinforce-AUTO-INCM-001]
aliases: [Incremental Build, Memoization, Salsa, Adapton]
duplicate_of: none
source_trust_level: A
confidence_score: 0.95
tags: [auto-reinforced, incremental-computation, algorithms, Efficiency, Dynamic-Programming, synchronization, caching]
confidence_score: 0.9
verification_status: applied
tags: [incremental, memoization, build-systems, reactive]
raw_sources: []
last_reinforced: 2026-04-20
last_reinforced: 2026-05-10
github_commit: pending
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
tech_stack:
language: unspecified
framework: unspecified
language: rust
framework: salsa
---
# [[Incremental-Computation|Incremental-Computation]]
# Incremental Computation
## 📌 한 줄 통찰 (The Karpathy Summary)
> "바뀐 것만 다시 하기: 데이터가 조금 변했다고 전체 시스템을 처음부터 다시 계산하는 낭비를 버리고, 오직 변화된 부분(Delta)의 영향만 추적하여 업데이트함으로써 속도를 극적으로 높이는 알고리즘적 정수."
## 한 줄
> **"매 unchanged 매 recompute X"**. Incremental computation 매 prior result 의 reuse — 매 input change 만 propagate. 매 2026 rust-analyzer (Salsa), Bazel, Buck2, Turbopack 매 standard. 매 trade-off: 매 memory vs recompute time.
## 📖 구조화된 지식 (Synthesized Content)
증분 계산(Incremental-Computation)은 입력의 작은 변화에 대해 출력을 효율적으로 업데이트하는 기법입니다.
## 매 핵심
1. **핵심 메커니즘**:
* **Dependency Tracking**: 어떤 계산 정책 결과가 어떤 입력 데이터 정책에 의존 정책하는지 그래프로 관리. ([[DAG-Dependency-Management|DAG-Dependency-Management]]와 연결)
* **Memoization/Caching**: 이전 계산 정책 결과 정책을 저장 정책해 두었다가 재사용. (Efficiency와 연결)
* **Change Propagation**: 변경된 입력 정책과 연결된 노드들만 선별적으로 재계산 정책.
2. **활용 사례**:
* **Build[[_system|system]]s**: 수정된 파일만 다시 컴파일 (Bazel, Make).
* **Database Views**: 원본 테이블에 데이터가 추가될 때 뷰(View)를 전체 갱신하지 않고 증분 반영. ([[Entity-Relationship-Modeling|Entity-Relationship-Modeling]]와 연결)
* **Excel**: 특정 셀의 값을 바꿨을 때 연결된 수식들만 실시간 업데이트.
### 매 mechanism 분류
- **Memoization**: 매 (input → output) cache. 매 pure function 필수.
- **Demand-Driven**: 매 query-based; pull 시 dependency graph 추적 (Salsa, Adapton).
- **Change-Driven**: 매 push; input change → invalidate downstream (React reactivity).
- **Self-Adjusting Computation**: 매 Acar — formal foundation, dynamic dependency graph.
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
- **과거 데이터와의 충돌**: 과거에는 "전체 재계산 정책(Batch)이 구현 정책이 훨씬 쉽고 정확하다"고 생각했으나, 데이터가 기하급수적으로 늘어난 현대 정책은 증분 계산 정책 없이는 실시간 서비스 정책이 도저히 불가능함을 깨닫고 모든 현대 아키텍처 정책의 필수 요소로 도입함(RL Update).
- **정책 변화(RL Update)**: 이제는 단순 값 업데이트 정책을 넘어, AI 모델 장치 정책이 새로운 데이터 정책을 학습 정책(Live learning)할 때 전체 가중치 정책을 다시 학습 정책하지 않고 점진적으로 지식 정책을 업데이트하는 연구로 확장 중임.
### 매 invalidation strategy
- **Hash-based**: 매 input fingerprint compare (Bazel digest).
- **Timestamp**: 매 mtime check (make).
- **Reference equality**: 매 pointer compare (React).
- **Structural diff**: 매 deep equal (immer, Redux).
## 🔗 지식 연결 (Graph)
- [[DAG-Dependency-Management|DAG-Dependency-Management]], [[Efficiency|Efficiency]], [[Entity-Relationship-Modeling|Entity-Relationship-Modeling]], [[Optimization|Optimization]], Performance, [[Refinement|Refinement]]
- **Key Concept**: Static vs Dynamic dependency graphs.
---
### 매 응용
1. 매 build systems (Bazel, Buck2).
2. 매 IDE backends (rust-analyzer, TypeScript LSP).
3. 매 reactive UI (React, SolidJS signals).
4. 매 dataflow / spreadsheets.
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
## 💻 패턴
**언제 이 지식을 쓰는가:**
- *(TODO)*
### 1. Salsa Query (Rust)
```rust
#[salsa::query_group(CompilerStorage)]
pub trait Compiler: salsa::Database {
#[salsa::input]
fn source_text(&self, file: FileId) -> Arc<String>;
**언제 쓰면 안 되는가:**
- *(TODO)*
fn parse(&self, file: FileId) -> Arc<Ast>;
fn type_check(&self, file: FileId) -> Arc<TypeMap>;
}
## 🧪 검증 상태 (Validation)
- **정보 상태:** needs_review
- **출처 신뢰도:** A
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
## 🧬 중복 검사 (Duplicate Check)
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
- **처리 방식:** UPDATE (자동 정규화)
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
## 🕓 변경 이력 (Changelog)
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|------|-----------|-----------|--------|
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
## 💻 코드 패턴 (Code Patterns)
**패턴 1:** *(TODO: 이 프로젝트 컨벤션 반영한 구조 스켈레톤)*
```text
# TODO
fn parse(db: &dyn Compiler, file: FileId) -> Arc<Ast> {
let text = db.source_text(file); // 매 dependency tracked
Arc::new(parse_text(&text))
}
// 매 source_text unchanged → parse skipped automatically
```
## 🤔 의사결정 기준 (Decision Criteria)
### 2. Memoization with LRU
```python
from functools import lru_cache
**선택 A를 써야 할 때:**
- *(TODO)*
@lru_cache(maxsize=10_000)
def expensive(x: int, y: int) -> int:
return slow_compute(x, y)
**선택 B를 써야 할 때:**
- *(TODO)*
# 매 hash(args) → cached result; LRU evict oldest
```
**기본값:**
> *(TODO)*
### 3. React useMemo (Reference Equality)
```jsx
const expensive = useMemo(() => {
return items.filter(i => i.active).sort();
}, [items]); // 매 items reference unchanged → skip
```
## ❌ 안티패턴 (Anti-Patterns)
### 4. Bazel Action Cache
```python
# WORKSPACE — 매 each action keyed by:
# hash(inputs) + hash(command) + hash(env)
# Output stored in CAS (content-addressable storage)
# Remote cache — 매 distributed reuse across team
```
- **[안티패턴]:** *(TODO: 무엇을 하면 안 되는가 + 이유 + 대신 무엇을)*
### 5. Self-Adjusting Computation (OCaml-style)
```ocaml
let m = Mod.create ()
let a = Var.create m 1
let b = Var.create m 2
let sum = Mod.bind m (fun () -> Var.read a + Var.read b)
Var.write a 10 (* sum auto-recomputes only its branch *)
```
### 6. Incremental Diff (Patch Generation)
```typescript
function diff<T>(old: T[], new_: T[]): Patch[] {
// 매 Myers diff — O(ND) — minimal edit script
// 매 used by git, react reconciler, immer
}
```
### 7. Signal-Based Reactivity (SolidJS)
```javascript
const [count, setCount] = createSignal(0);
const doubled = createMemo(() => count() * 2);
// 매 fine-grained — only doubled recomputes when count changes
// 매 NO virtual DOM diff
```
## 매 결정 기준
| 상황 | Approach |
|---|---|
| Pure function repeat | `lru_cache` / memoize |
| Compiler / IDE | Salsa, Adapton |
| UI reactivity | Signals (Solid) > Virtual DOM (React) |
| Build system | Bazel / Buck2 / Turbo |
| Stream pipeline | Materialize, ksqlDB |
**기본값**: 매 pure function memoize, 매 large pipeline 매 Salsa pattern.
## 🔗 Graph
- 부모: [[Theoretical-Computer-Science]] · [[Algorithm-Complexity-Big-O]]
- 변형: [[Memoization]] · [[Self-Adjusting-Computation]]
- 응용: [[Compiler-Architecture]] · [[Reactive-Programming]]
- Adjacent: [[Dynamic-Programming]] · [[Caching-Strategies]]
## 🤖 LLM 활용
**언제**: 매 build pipeline design, 매 query system architecture, 매 cache invalidation logic.
**언제 X**: 매 input always changes (no reuse benefit), 매 memory-constrained embedded.
## ❌ 안티패턴
- **Cache invalidation bug**: 매 stale result return. 매 dependency graph correctness 매 critical.
- **Unbounded memo**: 매 OOM. 매 LRU/TTL bound 필수.
- **Impure function memo**: 매 random()/now() 매 cache 시 incorrect.
- **Over-fine-grained**: 매 cache overhead > recompute cost.
## 🧪 검증 / 중복
- Verified (Acar, *Self-Adjusting Computation*; Salsa docs; Bazel design).
- 신뢰도 A.
## 🕓 Changelog
| 날짜 | 변경 |
|---|---|
| 2026-05-08 | Phase 1 |
| 2026-05-10 | Manual cleanup — Salsa/Bazel/SolidJS patterns + decision matrix |