Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
47 changes: 47 additions & 0 deletions docs/specifications/08-zero-copy-y-buffers.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
# Especificación: zero-copy, buffers y parsing

**Estado:** draft
**Issue:** #24

## Concepto

Zero-copy describe preservar préstamos a datos existentes en vez de crear una
representación propietaria nueva. Es útil solo cuando el propietario vive lo
suficiente, la interfaz puede expresar el préstamo y el costo de la copia es
relevante para la carga.

## Problema

Un parser que convierte cada fragmento en `String` o `Vec<u8>` simplifica
ownership a costa de copiar. Un parser prestado evita copias y también acopla
la salida al buffer de entrada. El curso debe comparar las dos decisiones sin
presentar préstamo como optimización universal.

## Invariantes

1. Parser con copia y parser prestado reconocen el mismo formato.
2. Un campo prestado nunca sobrevive a su buffer de entrada.
3. Separadores, entradas vacías e inválidas tienen semántica explícita.
4. El benchmark separa crear la entrada de parsearla.
5. El reporte declara tamaño, codificación y duración del buffer.

## Alternativas

| Alternativa | Decisión | Límite |
|---|---|---|
| Copiar siempre | Línea base clara | Puede duplicar memoria y trabajo. |
| Prestar siempre | Rechazada | La salida puede requerir independencia. |
| Elegir según vida y frontera de API | Adoptada | Requiere expresar lifetimes y validar formato. |

## Modelo educativo

#25 implementará parsing de pares `clave=valor` separados por `;`, tanto como
slice prestado como copia propietaria. Las pruebas preservarán los mismos pares
y rechazarán segmentos sin separador. No se usará `unsafe` ni serialización
externa.

## Límites

Zero-copy no evita todas las copias: puede haber buffers de red, normalización o
fronteras de concurrencia. La decisión se mide en la carga declarada y se
evalúa junto con claridad de ownership.
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,7 @@ su dependencia.

### Capítulo 08: zero-copy, buffers y serialización

- [ ] #24 Especificar préstamos, buffers, parsing y costo de copias.
- [x] #24 Especificar préstamos, buffers, parsing y costo de copias.
- [ ] #25 Implementar y probar parsing basado en slices y buffers.
- [ ] #26 Escribir capítulo, diagrama, ejemplos, ejercicios y benchmarks.

Expand Down
Loading