"같은 입력이 항상 같은 출력을 내야 한다면, Rust 에 속해 — 빠르고, 테스트 가능하고, 절대 추측 안 해."
Rust 코어에 사는 것
봉합선의 결정론적 쪽 모든 게 Rust 코어에 살아. export ruleset 적용 (부활한 WordPress-tag 레이어), frontmatter 와 태그 파싱·쓰기, 파일 읽기/쓰기. 이건 순수 변환이야 — 문서 더하기 ruleset 이 정확히 하나의 출력을, 매번 같게 내. 모델도, 무작위성도, '경우에 따라' 도 없어. 그 속성이 누구한테도 안 묻고 돌려도 안전하게 만드는 거야.
왜 결정론에 Rust 인가
Rust 가 결정론 레이어에 맞는 세 이유. 빠르니까, 파일과 텍스트 변환이 UI 를 안 막아. 안전하니까, 네 파일을 건드리는 레이어가 메모리 버그로 그걸 안 망가뜨려. 그리고 재현 가능하고 테스트 가능해 — 타입 있는 입출력의 순수 함수가 절대 놀래면 안 되는 앱 부분 밑에 딱 원하는 거야. 판단 레이어는 확률적이어도 되지만, 네 파일을 쓰는 레이어는 안 되고, Rust 가 그 규율을 강제해.
#[tauri::command]
fn apply_ruleset(doc: String, ruleset: Ruleset) -> Result<String, String> {
// 순수 변환: 같은 doc + 같은 ruleset -> 항상 같은 출력.
// 모델 호출 없음, 무작위 없음 — 재현 가능하고 unit-testable.
Ok(ruleset.apply(&doc))
}
파일 IO 는 Rust 커맨드
.md 파일을 읽고 쓰는 것 자체가 결정론적 작업이라, Tauri IPC 로 호출되는 Rust 커맨드야 — 프론트엔드가 직접 하는 게 아냐. 이건 봉합선 (결정론 = Rust) 을 존중하고, webview 파일 API 가 필요로 할 fs-scope 배관을 피해. 프론트엔드는 Rust 코어한테 로드나 저장을 요청하고, Rust 코어만 디스크를 건드려. 파일 IO 의 그 단일 소유자가 트랙 7 에서 다시 중요해져. 거기서 파일시스템이 진실의 원천으로 선언되거든.