app: 개밥 먹기 — 일하는 프로그램 하나와 그 마찰 보고
1단계 최소 IO: File(읽기), Args capability. 권한의 출처는 여전히 런타임 하나이고, IO 오류는 Result[a, String]이다 — 런타임이 사용자 정의 enum을 만들 수 없고, 만들 수 있게 하면 런타임이 프로그램의 타입을 알아야 한다. 2단계 std 확장: fold, filter, push, concat, reverse, is_empty, String.split/trim/starts_with/contains, Int.parse. 3단계 samples/app: 설정 파서 + 리포트 도구, 2모듈 304줄. 검사기를 시험 하려고 쓴 것이 아니라 일을 하려고 쓴 첫 프로그램이다. 산출물은 프로그램이 아니라 docs/friction.md다. 요약: - 되돌리기 비싼 결정은 하나도 후회되지 않았다. capability 전달, effect 명시, 실패를 버릴 수 없음, 소진적 match — 300줄 내내 거추장스럽지 않았고 소진성은 실제로 실수를 잡았다(Value에 경우 하나 추가하니 고칠 자리 넷을 정확히 짚었다). - 불편은 전부 되돌리기 싼 것들이었다. 리스트 n번째 접근이 없어 fold로 우회(40줄), else if가 없어 3~4단 중첩, String.concat이 2항이라 중첩 지옥. 304줄 중 70줄쯤이 이 셋 때문에 존재한다. v0의 질문은 "되돌리기 비싼 결정이 옳은가"였고 답은 그렇다이다. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019ZVDeU6KLuUVL3gs18Hm3E
This commit is contained in:
@@ -366,6 +366,14 @@ prelude는 없다. std도 명시적으로 가져온다 — 암묵적으로 끌
|
||||
것이고, 이것이 std를 "부채 상환"이 아니라 "검증"으로 본 이유다.
|
||||
결과를 버릴 방법이 언어에 없다는 성질도 여기서 처음 확인됐다.
|
||||
|
||||
■ 개밥 먹기 (2026-08)
|
||||
samples/app — 설정 파서 + 리포트 도구, 2모듈 304줄. 검사기를 시험하려고
|
||||
쓴 것이 아니라 일을 하려고 쓴 첫 프로그램이다.
|
||||
결과: 되돌리기 비싼 결정은 하나도 후회되지 않았고(capability 전달, effect
|
||||
명시, 실패를 버릴 수 없음, 소진적 match), 불편은 전부 되돌리기 싼 것들이었다
|
||||
— 리스트 n번째 접근 없음, else if 없음, String.concat 2항.
|
||||
전문과 증거는 docs/friction.md. 이것이 v1 설계의 첫 입력이다.
|
||||
|
||||
■ 측정 (2026-08, v0 fast path)
|
||||
100,391줄 / 200 모듈 (사슬 의존). bench/bench.ml로 재현.
|
||||
cold 전체 검사 245ms
|
||||
|
||||
Reference in New Issue
Block a user