ArrayList en Zig
La lista que crece es unmanaged: cada append entrega el allocator explícitamente.
const std = @import("std");
pub fn main() !void {
var gpa = std.heap.DebugAllocator(.{}){};
defer _ = gpa.deinit();
const alloc = gpa.allocator();
// ArrayList is unmanaged: every growing call takes the allocator.
var hauls = std.ArrayList(f32).empty;
defer hauls.deinit(alloc);
try hauls.append(alloc, 12.5);
try hauls.append(alloc, 8.0);
try hauls.appendSlice(alloc, &.{ 15.25, 6.75 });
std.debug.print("{d} hauls logged\n", .{hauls.items.len});
const last = hauls.items[hauls.items.len - 1];
std.debug.print("first {d:.2}, last {d:.2}\n", .{ hauls.items[0], last });
}
Cómo funciona
std.ArrayList(f32).emptyarranca sin almacenamiento alguno.appendyappendSlicetomanallocporque crecer puede reservar memoria..itemses el slice vivo: se indexa, se mide, se lee de vuelta.
Palabras clave y builtins usados aquí
constdeferf32fnpubtryvarvoid
El intento, en números
- Líneas
- 19
- Caracteres a escribir
- 575
- Tokens
- 171
- Ritmo de tres estrellas
- 65 tpm
Al ritmo de tres estrellas de 65 tokens por minuto, este intento toma unos 158 segundos.
Paso 2 de 3 en Memoria; paso 20 de 27 en Fundamentos del lenguaje.