gc-effects: sidecar for the runtime copy inside the Android/watchOS/visionOS UI library
Maintainers usually reply within 1 day
Nobody has claimed this yet.
Assessment
- Difficulty
- 5/5
- Estimated time
- Over a week
- Newbie friendliness
- 35/100
- Issue type
- Feature
- Clarity
- Clearly specified
- Activity status
- Active
- Tech stack
- android, ios, rust
- Domain
- build-system, tooling
Research direction
Start with scripts/gc_call_effects/sidecars.sh and the perry-gc-effects sidecars entry point; trace how sidecar::discover selects runtime archives and pairs them with stdlib archives. Then inspect the release legs for Android, watchOS, and visionOS to find where UI libraries are built and staged. Check analyzer support for those archive formats and symbols, and verify that a sidecar keyed to the UI library is used when ui_lib_provides_runtime holds.
Written by the indexing model from the issue text.
Description
On Android, watchOS and visionOS the final link takes perry-runtime from the UI staticlib (libperry_ui_android.a, libperry_ui_watchos.a, ...), which bundles its own copy of the runtime; the standalone libperry_runtime.a is left off the link line (link::ui_lib_provides_runtime). No .gc-effects sidecar describes that copy: scripts/gc_call_effects/sidecars.sh / perry-gc-effects sidecars analyze only libperry_runtime* archives.
Since slice 7 of the GC-effects-at-build programme (committed tables dropped), those compilations use the all-unsafe table: every runtime call is a statepoint that can throw. That is sound but slower than it needs to be. (Before slice 7 they read the sidecar of the standalone runtime archive joined with the committed 3-target table, which described a runtime that was not the one linked.)
Fix: make the UI-lib archives first-class sidecar inputs.
sidecar::discoveralso treats a UI staticlib that bundles the runtime (libperry_ui_<platform>*.a) as a runtime archive, paired with the stdlib of the same suffix (Android + UI links stdlib separately).- The release legs that build those UI libs (Windows leg Android build,
build-cross, the watchOS/visionOS builds) runsidecarsover them and stage the sidecars beside the UI libs. - perry looks up
<ui lib>.gc-effects(keyed by the UI-lib bytes) whenui_lib_provides_runtimeholds, instead of the all-unsafe table.
The analyzer has not yet been run over Android/Apple-mobile archives, so step 1 needs a check that it accepts them (object format, the rule checks, the symbol floor).
- Dominant language
- Rust
- Stars
- 4.9k
- Forks
- 166
- Avg merge
- 2h 54m
- Merged PRs (30d)
- 922
Getting set up
- Ships a Dockerfile or Docker Compose file
- Has a pull request template
- Read the contributing guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from PerryTS/perry
-
bug
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 70/100
Maintainers usually reply within 1 day
-
Difficulty 4/5 3-5 days Newbie friendliness 35/100
Maintainers usually reply within 1 day
-
bug
Difficulty 3/5 1-2 days Newbie friendliness 67/100
Maintainers usually reply within 1 day
-
bug
Difficulty 4/5 3-5 days Newbie friendliness 48/100
Maintainers usually reply within 1 day
Similar issues
-
Difficulty 2/5 1-3 hours Newbie friendliness 64/100
Maintainers usually reply within 2 days
-
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
Maintainers usually reply within 8 days
-
Difficulty 2/5 1-3 hours Newbie friendliness 82/100
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
swc-project/swc#12576 ·
Maintainers usually reply within 1 day
-
good first issue gpu serve
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
Maintainers usually reply within 1 day