34 lines
2.1 KiB
Markdown
34 lines
2.1 KiB
Markdown
6 — Closures (first-class user functions)
|
|
|
|
6.1. Definir objeto Closure no heap: fn_id + env (captures) + metadata mínima.
|
|
6.2. Definir como capturas são materializadas (layout do env e como o bytecode cria closures).
|
|
6.3. Implementar instruções/semântica para criar closure e para CALL_CLOSURE.
|
|
6.4. Atualizar GC traversal: closure → env → heap refs internos.
|
|
6.5. Atualizar verifier: tipo “closure value”, validação de call sites, ret_slots.
|
|
6.6. Testes: closure simples, closure capturando, closure retornando outra closure.
|
|
|
|
7 — Coroutines (único modelo de concorrência, cooperativo)
|
|
|
|
7.1. Definir objeto Coroutine no heap: stack/frames próprios, status, wake time, mailbox/queue se existir.
|
|
7.2. Definir scheduler determinístico: fila pronta, fila dormindo, política estável.
|
|
7.3. Implementar SPAWN: criar coroutine + capturar entry + agendar.
|
|
7.4. Implementar YIELD: ceder controle de forma cooperativa (somente em locais válidos).
|
|
7.5. Implementar SLEEP: mover para fila dormindo até tick/time.
|
|
7.6. Integrar execução/switch apenas em safepoints (FRAME_SYNC).
|
|
7.7. Integrar GC roots: stacks suspensas e frames de todas as coroutines.
|
|
7.8. Verifier: invariantes (ex.: proibir yield em contextos ilegais, validar spawn args/ret).
|
|
7.9. Testes: determinismo (mesma ordem), sleep/wake, stress com GC + muitas coroutines.
|
|
|
|
8 — Tooling & test harness (para manter “JVM-grade”)
|
|
|
|
8.1. Disasm atualizado e confiável (roundtrip + snapshots).
|
|
8.2. Harness de execução determinística para testes (seed fixo, time controlado).
|
|
8.3. Suite de testes por camadas: bytecode (encode/decode), verifier, VM, GC, scheduler.
|
|
8.4. “No legacy artifacts” check: busca por símbolos/nomes (retain/release/hip/gate/scope), módulos mortos removidos.
|
|
|
|
9 — Hardening final e documentação do novo baseline
|
|
|
|
9.1. Consolidar documentação de arquitetura (curta, objetiva, em inglês).
|
|
9.2. Garantir que o “surface area” público está minimalista (APIs internas escondidas).
|
|
9.3. Remover qualquer feature flag temporária que tenha sobrado.
|
|
9.4. Rodar limpeza final: dead code, warnings, docs desatualizadas, exemplos antigos. |