typestar

Fundamentos del lenguaje

27 pasos en 9 series de Zig.

Zig es un lenguaje de sistemas moderno con una promesa a la antigua: sin flujo de control oculto, sin reservas de memoria ocultas, sin preprocesador — lo que el código dice es lo que la máquina hace. Andrew Kelley lo empezó en 2015 como un C mejor antes que un C++ más grande, y se ganó una comunidad devota justamente por esa contención, más un compilador que compila cruzado a cualquier parte casi como un detalle.

Este tour cubre el núcleo tal como lo compila zig 0.16: const y var bajo un compilador que rechaza código sin usar, switch exhaustivo, las formas de bucle, errores como valores con try y catch, opcionales con orelse, punteros y slices, structs y enums y uniones rotuladas, comptime y los genéricos que salen de él, allocators explícitos del DebugAllocator a las arenas, y las cajas de herramientas std.mem y std.fmt. El bis entrega programas completos. Cada fragmento compila y corre — y en Zig, compilar es una vara alta.

Empieza este tour

Valores

  • La forma del programaEl programa Zig más pequeño: un import, un main público, dos prints.
  • const y varZig vigila en las dos direcciones: const no puede cambiar, var tiene que hacerlo.
  • Anchos de enteroEl ancho es parte del tipo: u8 e i32, u64 — y u3 si tres bits es lo que quieres decir.

Control de flujo

  • if y switchLas dos formas de ramificar producen valores, y switch debe dar cuenta de cada caso.
  • Bucles whileEl while con expresión de continuación, y uno que rompe con un valor.
  • Bucles forfor recorre elementos; agrega 0.. y te entrega el índice también.

Errores

  • Errores y tryLos errores son valores en el tipo de retorno: una bóveda que abre o dice por qué no.
  • catch y orelseDos operadores de respaldo: catch para uniones de error, orelse para opcionales.
  • deferLa limpieza declarada junto a lo que limpia: defer corre al salir del ámbito, en reversa.

Opcionales y punteros

  • Opcionales?u32 es un número de amarradero o null, y el compilador no te deja olvidar cuál.
  • PunterosUn puntero de un solo elemento duplica un contador en el lugar; .* es la desreferencia.
  • SlicesUn slice es un puntero más un largo sobre memoria que ya existe.

Structs y enums

  • StructsUn struct de kayak con valores de campo por defecto y un método que se lee natural.
  • EnumsUn enum de carga con su propio método, recorrido por un switch exhaustivo.
  • Uniones rotuladasUna lectura, dos formas: un float cuando el sensor funciona, una razón cuando no.

comptime

  • comptimeEl mismo lenguaje corre en compilación: un número de Fibonacci horneado en el binario.
  • GenéricosUn genérico es una función que recibe un tipo: un solo largest() para enteros y floats.
  • Builtins y castsLos @-builtins: reflexión sobre tipos, y casts que siempre se escriben completos.

Memoria

  • AllocatorsNada reserva memoria a tus espaldas: rentas bytes a un allocator, los devuelves, te auditan.
  • ArrayListLa lista que crece es unmanaged: cada append entrega el allocator explícitamente.
  • La arenaCinco reservas, cero frees: la arena devuelve todo en un solo deinit.

La biblioteca estándar

  • std.memLas cadenas son []const u8, y std.mem es la caja de herramientas que las trabaja.
  • std.fmtFormatear a un buffer de pila y parsear de vuelta — sin allocator a la vista.
  • StringHashMapUn registro portuario: claves de cadena, amarraderos enteros y un iterador de claves.

Bis

  • word_freq.zigUna tabla de frecuencia de palabras con tokenize, un hash map, un sort y un gráfico.
  • grade_report.zigLos puntajes de quiz se pliegan en promedios y calificaciones, y luego en un reporte.
  • temp_stats.zigUna semana de máximas diarias reducida a mínima, máxima y media, con una barra por día.

Los otros tours de Zig