feat(renaser): Fase 10 — alta y baja de aplicaciones en vivo
El censo de aplicaciones deja de fijarse en el arranque: una app puede nacer o cerrarse con el reactor ya en marcha. - El reactor admite NACIMIENTOS en vivo: cola `NACIMIENTOS` + `engendrar()`, drenada al inicio de cada vuelta de `run()`; `Task::adoptar` acoge un futuro ya empaquetado. - `Alt+Q` (`Mando::Cerrar`): baja limpia. El compositor saca la ventana enfocada del teselado y del orden-Z; la app advierte la baja (`ventana_cerrada`) y concluye su tarea — su memoria, su combustible y su canal de teclado se liberan. Sin baliza. - `Alt+N` (`Mando::Lanzar`): alta en vivo. `nacer_ventana` añade la ventana y entrega su índice; el orquestador instancia el WASM y engendra su tarea. Las apps de génesis dejan su bytecode cacheado como `Plantilla`; cada `Alt+N` instancia una en rotación. Verificado en QEMU (sendkey): tres Alt+N hacen crecer el escritorio de 5 a 8 ventanas; tres Alt+Q lo reducen de 8 a 5. Kernel estable. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -805,3 +805,45 @@ propio y libre, por encima de las demás.
|
||||
ventana la flota en cascada, solapando a la primera. `Alt+K` devuelve el foco
|
||||
a la ventana grande y ésta sube al frente, tapando por completo a la pequeña.
|
||||
Un `Alt+F` final la reintegra al teselado.
|
||||
|
||||
## Fase 10 — Alta y baja de aplicaciones en vivo — 2026-05-22
|
||||
|
||||
Hasta la Fase 9 el censo de aplicaciones se fijaba en el arranque: las apps
|
||||
nacían del manifiesto y sólo morían al fallar. La Fase 10 lo vuelve DINÁMICO —
|
||||
una app puede nacer o cerrarse con el reactor ya en marcha.
|
||||
|
||||
### Añadido
|
||||
- **El reactor admite nacimientos en vivo.** `executor`: una cola de
|
||||
NACIMIENTOS (`Vec<FuturoTarea>` tras un `Mutex`) y la función `engendrar`.
|
||||
El ejecutor la drena al inicio de cada vuelta (`recoger_nacimientos`) y
|
||||
adopta cada futuro como tarea. `Task::adoptar` acoge un futuro ya
|
||||
empaquetado. `dormir_si_inactivo` cuenta los nacimientos como trabajo.
|
||||
- **Baja en vivo — `Alt+Q`.** Mando `Cerrar`: el compositor marca la ventana
|
||||
enfocada como `cerrada`, libera su caché de respaldo, la saca del teselado y
|
||||
del orden-Z, y traslada el foco a una ventana viva contigua. La app, en su
|
||||
tarea, consulta `compositor::ventana_cerrada` cada fotograma; al verla
|
||||
cerrada concluye su tarea — y `AplicacionWasm::drop` libera su memoria
|
||||
lineal, su combustible y su canal de teclado. Una baja LIMPIA, sin baliza.
|
||||
- **Alta en vivo — `Alt+N`.** Mando `Lanzar`: el compositor cuenta la petición
|
||||
(`PARTOS`); la tarea del compositor la atiende con `partos_pendientes` y
|
||||
`lanzar_app`. `compositor::nacer_ventana` añade la ventana y devuelve su
|
||||
índice; el orquestador instancia el WASM con ese índice y `engendra` su
|
||||
tarea. Las apps de génesis dejan su bytecode cacheado en RAM como
|
||||
`Plantilla`; cada `Alt+N` instancia la siguiente en rotación, sin volver al
|
||||
disco —una E/S por sondeo en mitad del reactor sería un mal vecino—.
|
||||
- `compositor`: campo `Ventana.cerrada`, mandos `Cerrar` / `Lanzar`, y las
|
||||
funciones `cerrar`, `nacer_ventana`, `ventana_cerrada`, `partos_pendientes`.
|
||||
- `teclado`: `Alt+Q` → `Cerrar`, `Alt+N` → `Lanzar`.
|
||||
|
||||
### Cambiado
|
||||
- `encender_app` devuelve la `Plantilla` de la app —su bytecode y geometría—
|
||||
para los lanzamientos en vivo.
|
||||
- `tarea_aplicacion` consulta `ventana_cerrada` antes de cada `tick`.
|
||||
- `presentar_fotograma` y `desalojar` ignoran una ventana ya cerrada: una baja
|
||||
limpia gana a un fotograma o a un desalojo que lleguen tarde.
|
||||
|
||||
### Verificado
|
||||
- QEMU (`sendkey`): tres `Alt+N` dan a luz tres apps nuevas y el escritorio se
|
||||
re-tesela de 5 a 8 ventanas. Tres `Alt+Q` cierran la app enfocada una a una
|
||||
y el teselado reclama su espacio, de 8 de vuelta a 5. El kernel sigue estable
|
||||
a través de todas las altas y bajas.
|
||||
|
||||
Reference in New Issue
Block a user