# Zig (llenguatge de programació)

Zig és un llenguatge de programació de sistemes compilat, imperatiu, de propòsit general, de tipus estàtic i dissenyat per Andrew Kelley. Està pensat com a successor del llenguatge C, amb la intenció de ser encara més petit i més senzill de programar, alhora que ofereix més funcions. És un programari lliure i de codi obert, publicat sota una llicència MIT.
Les millores en la simplicitat del llenguatge estan relacionades amb el control de flux, les crides de funcions, les importacions de biblioteques, la declaració de variables i el suport Unicode. A més, el llenguatge no fa ús de macros o instruccions del preprocessador. Les característiques adoptades dels llenguatges moderns inclouen l'addició de tipus genèrics en temps de compilació, que permeten que les funcions funcionin amb una varietat de dades, juntament amb un petit conjunt de noves directives del compilador per permetre l'accés a la informació sobre aquests tipus mitjançant la reflexió.
Un altre conjunt d'addicions a Zig pretén millorar la seguretat del codi. Igual que C, Zig no inclou la recollida d'escombraries i la gestió de la memòria és manual. Per ajudar a eliminar els possibles errors que sorgeixen en aquests sistemes, inclou tipus d'opcions i una sintaxi senzilla per utilitzar-los. També s'incorpora un marc de proves al llenguatge.

## Descripció
### Objectius

L'objectiu principal de Zig és ser una millor solució al tipus de tasques que actualment es resolen amb C. Una preocupació principal en aquest sentit és la llegibilitat; Zig intenta utilitzar els conceptes i la sintaxi existents sempre que sigui possible, evitant l'addició de diferents sintaxis per a conceptes similars. A més, està dissenyat per a "robustesa, òptimitat i manteniment", incloent una varietat de funcions per millorar la seguretat, l'optimització i les proves. La sintaxi petita i senzilla és una part important del manteniment, ja que l'objectiu del llenguatge és permetre als mantenedors depurar el codi sense haver d'aprendre les complexitats d'un llenguatge que potser no estan familiaritzats. Fins i tot amb aquests canvis, Zig pot compilar en i contra el codi C existent; Les capçaleres C es poden incloure en un projecte Zig i les seves funcions es poden anomenar, i el codi Zig es pot enllaçar a projectes C mitjançant la inclusió de les capçaleres construïdes pel compilador.
D'acord amb la filosofia general de disseny de fer que el codi sigui senzill i fàcil de llegir, el sistema Zig en conjunt també inclou una sèrie de canvis estilístics en comparació amb C i altres llenguatges semblants a C. Per exemple, el llenguatge Rust té sobrecàrrega d'operadors, cosa que significa que una declaració com a = b + c podria ser una trucada de funció a la versió sobrecarregada d'un tipus de l'operador més. A més, aquesta funció podria entrar en pànic, cosa que podria anticipar qualsevol codi següent. A Zig, si alguna cosa crida a una funció, sembla una trucada de funció, si no, no sembla una funció. Si genera un error, és explícit a la sintaxi, el maneig d'errors es gestiona mitjançant tipus d'error i es pot gestionar amb catch or try.
Els objectius de Zig contrasten amb els de molts altres idiomes dissenyats en el mateix període de temps, com Go, Rust, Carbon i Nim. En general, aquests llenguatges són més complexos amb funcions addicionals com la sobrecàrrega d'operadors, funcions que es fan passar per valors (propietats) i moltes altres funcions destinades a ajudar a la construcció de programes grans. Aquest tipus de característiques tenen més en comú amb l'enfocament de C++, i aquests llenguatges estan més en la línia d'aquest llenguatge. Zig té una extensió més conservadora del sistema de tipus, que admet genèrics en temps de compilació i s'adapta a una forma d'escriptura duck amb la directiva comptime.

### Tractament de la memòria

Una de les fonts principals d'errors als programes C és el sistema de gestió de memòria, basat en malloc. malloc reserva un bloc de memòria per utilitzar-lo al codi i retorna una referència a aquesta memòria com a punter. No hi ha cap sistema que garanteixi que la memòria s'alliberi quan el programa ja no la necessita, cosa que pot provocar que els programes consumin tota la memòria disponible, una fuita de memòria. Més comú és un punter penjant que no fa referència a un objecte de memòria assignat correctament.

### Inconvenients

Zig té diversos inconvenients. Si la memòria no es desassigna correctament, pot provocar fuites de memòria a causa de la manca de control ocult. La corba d'aprenentatge de Zig pot ser pronunciada, especialment per a aquells que no estan familiaritzats amb els conceptes de programació de baix nivell. Tot i que Zig té una comunitat en creixement, a partir del 2024, segueix sent un idioma nou amb àrees de millora en la maduresa, l'ecosistema i les eines. La interoperabilitat amb altres idiomes pot suposar desafiaments, ja que sovint requereix un esforç addicional per gestionar la gestió i la comunicació de dades. Finalment, la disponibilitat de recursos d'aprenentatge és limitada per a casos d'ús complexos, tot i que això va millorant gradualment a mesura que augmenta l'interès i l'adopció.

## Referències

* ↑ «Taking the warts off C, with Andrew Kelley, creator of the Zig programming language» (en anglès). Sourcegraph, 19-10-2021. [Consulta: 18 abril 2024].
* ↑ «Zig has all the elegant simplicity of C, minus all the ways to shoot yourself in the foot» (en anglès americà). JAXenter, 31-10-2017. Arxivat de l'original el 2017-11-01. [Consulta: 11 febrer 2020].
* ↑ Elizabeth, 2017.
* 1 2 3 Yegulalp, 2016.
* ↑ «ARC vs. GC» (en anglès). Elements.
* 1 2 3 4 5 Chigozie, Oduah. «Comparing Rust vs. Zig: Performance, Safety, and More» (en anglès). LogRocket Blog, 04-06-2024. [Consulta: 16 juliol 2024].