Repository navigation
[rustjava-error-path-name-the-missing-bootstrap-class-p0] fix(jvm): 어느 부트스트랩 클래스가 없는지 «말하게» 한다 - #87
Merged
Conversation
…느 부트스트랩 클래스가 없는지 «말하게» 한다 채택 제안 2026-09-20-error-path-class-closure#p0. `Jvm::new` 의 `bootstrap_classes` 루프가 `.unwrap()` 으로 죽어, 클래스 집합에 구멍이 있는 호스트는 `called Option::unwrap() on a None value` 를 읽고 여섯 중 어느 것인지 목록을 이분해야 했다. 그중 둘(Object·Serializable)은 오류 경로 폐포 에도 있어 같은 결손이 «어느 루프에 먼저 걸리느냐»로 문면 품질이 갈렸다. 이제 `let … else` 가 ⑴이름 ⑵여섯 중 하나라는 것 ⑶어디에 물었는지 — `Jvm::new` 에 넘긴 호스트 자신의 부트스트랩 로더이지 클래스패스가 아니다(`java.class.path` 는 시스템 클래스로더 몫이고 그것은 이 함수 뒤쪽에서 만들어져 여기서 실패하면 아예 돌지 않는다) — 를 말한다. 스윕도 함께 고친다. `Outcome::Panicked` 의 주석은 「naming the class」였는데 문면을 읽지 않아, 이 결함을 자기 눈으로 보고도 좋은 쪽에 세고 있었다. 이제 패닉 payload 를 숨긴 이름과 대조하고, 이름을 못 댄 거절은 `PanickedAnonymously` 로 따로 세며 그 자체가 실패다. 양방향(제품 호출부 · 두 사실을 따로): 개악(`.unwrap()` 복원) → 이름 적중 0/5 · `7 by name · 5 anonymous` FAILED ↔ 고침 → 5/5 · `12 · 0` ok. rc 만 보면 둘이 같다(양쪽 다 패닉). 가족: 이 축의 unwrap 은 1곳(고쳤다). 같은 모양의 레지스트리 조회 4곳 (jvm.rs:995·1002·1335 · garbage_collector.rs:109)은 내부 불변식 축이고 스윕이 닿지 않음을 실측(익명 거절 0/37) ⇒ blind spot 으로 적고 두었다. 패닉을 오류 반환으로 바꾸지 않았다 — `JavaError` 는 변종 1개이고 내용이 `Box<dyn ClassInstance>` 인데 여기서 없는 것이 바로 그 인스턴스를 만들 클래스다. 제안 카드로 적었다. DoD 9명령 rc 0. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Jun025
pushed a commit
that referenced
this pull request
Sep 20, 2026
…igin/main — 승인된 원장 2파일 합집합 충돌은 REPORT.md·STATE.md 2건뿐(검수 예측 그대로)이고 둘 다 머리 append 다. 양쪽을 모두 남겼다 — 두 방향 모두 «병합본에 없는 줄 0» 으로 확인했다(#87 의 name-the-missing-bootstrap-class-p0 항목 · 이 회차의 string-array-hiding 항목). jvm/tests/test_error_path_class_sweep.rs 는 자동 해소(충돌 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-20-error-path-class-closure#p0(티켓rustjava-error-path-name-the-missing-bootstrap-class-p0).왜 지금인가
지난 회차 스윕이 12건을 「이름을 대고 거절」로 셌는데, ★그중 5건의 실제 문면은
called Option::unwrap() on a None value였다. 클래스 집합에 구멍이 난 호스트는 그것을 읽고도 여섯 중 어느 것인지 몰라 목록을 이분해야 했다. 그중 둘(java/lang/Object·java/io/Serializable)은 오류 경로 폐포에도 있어 ★같은 결손이 «어느 루프에 먼저 걸리느냐»로 좋은 문면이 되기도, 쓸모없는 문면이 되기도 했다.무엇을
jvm/src/jvm.rs—bootstrap_classes루프의.unwrap()→let … else. 문면이 ⑴클래스 이름 ⑵여섯 중 하나라는 것 ⑶★어디에 물었는지를 말한다:Jvm::new에 넘긴 호스트 자신의 부트스트랩 로더이지 클래스패스가 아니다(java.class.path는 시스템 클래스로더 몫이고, 그것은 이 함수 뒤쪽에서 만들어져 여기서 실패하면 아예 안 돈다). 폐포 walk 위의 「고치지 않고 기록만 한다」 주석은 낡아서 함께 고쳤다.jvm/tests/test_error_path_class_sweep.rs— ★스윕이 자기 눈으로 보고도 좋은 쪽에 세고 있었다:Outcome::Panicked의 주석은 「naming the class」인데 문면을 읽지 않았다. 이제 패닉 payload 를 downcast 해 숨긴 이름과 대조하고, 이름을 못 댄 거절은PanickedAnonymously로 따로 세며 그 자체가 실패다.양방향 — 「죽었다」와 「내 문면이 읽혔다」를 «따로» 쟀다
제품 호출부(
jvm/src/jvm.rs)를 되돌려 쟀다(사본 아님)..unwrap()복원(개악)called Option::unwrap() on a None value×50 recursed · 7 by name · **5 anonymous** · 25 clean→ FAILEDthe class set has no <name>, which is one of the 6 …×50 · **12** · **0** · 25→ ok★rc 만 보면 두 줄이 같다(개악 쪽도 패닉이다) — 그래서 두 사실을 분리해 셌다. 정상 구성은 이 분기에 닿지 않는다(조용).
가족을 세고 골랐다
jvm.rs:92(bootstrap_classes)jvm.rs:995·:1002·:1335·garbage_collector.rs:109★뒤 4곳은 같은 모양이지만 다른 축이다 — 호스트가 만들 수 있는 입력이 아니고, 고친 뒤 스윕 37 후보 전건에서 익명 거절 0 으로 닿지 않음이 실측된다. ⇒ 양방향으로 잠글 수 없는 변경이라 blind spot 으로 적고 두었다.
대가
load_class호출 하나).JavaError는 변종 1개이고 내용이Box<dyn ClassInstance>인데 ★여기서 없는 것이 바로 그 인스턴스를 만들 클래스들이라, 새 변종은 「자바 예외가 아닌 오류」여야 한다(사내 파급 3곳 반증 불가let해체 · 사외는 공개 enum 파괴 변경). ⇒ 규모가 커져 멈추고 제안 카드로 적었다.[B(여섯째)는 여전히 측정 밖 — 로더가 합성하므로 클래스 집합이 못 빠뜨린다.검증
DoD 9명령 rc 0 (
fmt·clippy·+beta clippy· wasm32 clippy ·cargo test --all487 passed/0 failed · python 검사기 5종).worklog 쌍 =
docs/worklog/2026-09-20-name-the-missing-bootstrap-class.{md,json}·adoptedProposals에2026-09-20-error-path-class-closure#p0축자 기록.🤖 Generated with Claude Code