Repository navigation
[rustjava-string-on-the-error-path-p0] fix(jvm): 오류 경로가 필요로 하는 것은 «목록»이 아니라 «폐포»다 - #86
Merged
Merged
Conversation
…»이 아니라 «폐포»다 채택 제안 `2026-09-19-string-on-the-error-path#p0`. 제안의 가정 「still just these two」는 반증됐다. 후보를 손으로 적지 않고 기록 로더로 «유도»한 뒤(요청 51 · 서로 다른 이름 42 · 배열 5 제외 = 37) 하나씩 숨겨 재구성하니 5개가 더 재귀한다(바닥 없음): java/lang/Throwable · Error · LinkageError · CharSequence · Comparable. 우연이 아니다 — 기존 두 이름의 상위형·인터페이스 폐포다. 클래스를 resolve 하면 상위형도 resolve 되고, 거기서 난 결손은 «아직 resolve 중인 그 두 클래스»로 보고된다. 그래서 손으로 적은 assert 둘을 작업목록 루프 하나로 바꿨다. 로더에 직접 묻는다 — resolve_class 는 질문을 Jvm::exception 에 넘기고 그것이 곧 순환이다. 폐포 9개로 계산이 닫힌다: 이미 막힌 2 + 재귀 5 + bootstrap_classes 가 먼저 잡는 2. 양방향(제품 호출부): 0 recursed · ok ↔ pending.extend 두 줄 제거 → 5 recursed · FAILED ↔ 복원 ok. 기존 잠금 2건은 무수정 통과한다(문안이 `has no <name>` 을 그대로 담는다). 대가: 시작 비용 로더 질문 44 → 51 · cargo test --all 에 스윕 ~15초 · 배열 5개는 제외(로더가 합성하므로 클래스 집합이 못 빠뜨린다 — 단 [Ljava/lang/String; 는 상한 20에서도 오버플로라 in-process 로 못 돈다) · 부트스트랩 6개는 이름 없는 unwrap 패닉으로 죽는다(후속 제안 #p0). DoD 9명령 rc 0. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
채택 제안
2026-09-19-string-on-the-error-path#p0(docs/worklog/2026-09-19-string-on-the-error-path.json).제안이 물은 것, 그리고 답
★★**「still just these two」가 «아니다» — 그 가정이 반증됐다.**
후보를 손으로 적지 않고 유도했다(기록 로더로 정상 구성 1회): 요청 51 · 서로 다른 이름 42 · 배열 5 제외 ⇒ 37. 그 37개를 하나씩 숨겨 재구성했다.
재귀한 5개 =
java/lang/Throwable·Error·LinkageError·CharSequence·Comparable.★우연이 아니다 — 기존 두 이름의 상위형·인터페이스 폐포다. 클래스를 resolve 하면 상위형도 resolve 되고, ★거기서 난 결손은 «아직 resolve 중인 바로 그 두 클래스»로 보고된다.
처방 — 목록이 아니라 폐포
손으로 적은
assert!둘 → 작업목록 루프 하나(씨앗 2개 ·interface_names()·super_class_name()을 밀어 넣는다). ★로더에 «직접» 묻는다 —resolve_class는 질문을Jvm::exception에 넘기고 그것이 곧 순환이다.★폐포 9개로 계산이 닫힌다: 이미 막힌 2 + 재귀 5 +
bootstrap_classes가 먼저 잡는 2(Object·Serializable) ⇒ 설명 안 되는 이름 0.양방향 — 제품 호출부(사본 아님)
37 candidate(s): 0 recursed · 12 refused by name · 25 failed cleanly · 0 not needed· okjvm/src/jvm.rs의pending.extend(...)두 줄 제거(= 두 이름만 보던 고침 전 동작)5 recursed· FAILED**★기존 잠금
jvm/tests/test_exception_fallback_recursion.rs2건은 손대지 않고 통과한다 — 새 문안이has no java/lang/String·has no java/lang/NoClassDefFoundError를 그대로 담는다.대가 — 숨기지 않는다
cargo test --all에 스윕 ~15초(실측 13.98 / 15.92 / 29.26 · 부하에 따라 흔들린다). 일반화의 값이고 깎지 않았다.define_array_class) ⇒ 어떤 클래스 집합도 배열을 빠뜨릴 수 없다. 그래도 쟀다 —[C재귀(상한 20에 21질문) · ★[Ljava/lang/String;는 그 상한에서도 스택 오버플로(순환이 로더로 돌아오지 않아 상한이 못 끝낸다) ⇒ in-process 로 못 도는 유일한 후보. 후속#p1.called Option::unwrap() on a None value— 구성 시점에 멈추니 옳지만 이름을 말하지 않는다(12건 중 5건). 별 계급이라 후속#p0.검증
fmt·clippy·+beta clippy· wasm32 clippy ·cargo test --all487+ 전건 green · 파이썬 4종).dod_parity: 「OK 두 축 모두 대칭차 0 — 명령 8개 · toolchain 2개로 «둘 다 일치»」.git diff origin/main --summary:old mode/new mode0.🤖 Generated with Claude Code