Hack (linguaggio di programmazione)
# Hack (linguaggio di programmazione)

Hack è un linguaggio di programmazione per la macchina virtuale HipHop (HHVM), creato da Facebook come un dialetto del PHP. L'implementazione del linguaggio è open-source, concessa sotto i termini della Licenza BSD.

Hack permette ai programmatori di usare contemporaneamente sia la tipizzazione dinamica che quella statica. Questo modello di tipizzazione viene chiamato tipizzazione graduale, implementata anche in altri linguaggi di programmazione come l'ActionScript. Il sistema dei tipi del linguaggio Hack permette di specificare tipi per i parametri delle funzioni, per i valori di ritorno e per le proprietà di classe ma il tipo delle variabili locali è sempre dedotto dalla macchina.

## Storia

Hack venne introdotto il 20 marzo 2015. Prima dell'annuncio del nuovo linguaggio di programmazione, Facebook aveva già implementato il codice e l'aveva provato su una grossa parte del suo sito.

## Caratteristiche

Hack è progettato per interagire senza alcun problema con il PHP, linguaggio di scripting open-source ampiamente utilizzato che si concentra sullo sviluppo web e può essere incluso nel HTML. La maggioranza degli script validi in PHP sono validi anche in Hack, nonostante ciò, molte strutture del PHP meno utilizzate non sono supportate in Hack.

## Sintassi e semantica

La struttura base di uno script Hack è simile a quella di uno script PHP con alcune modifiche. Un file Hack inizia con <?hh rispetto al <?php per uno script PHP:

Lo script sovrastante, simile al PHP, sarà eseguito e sarà mandato al browser il seguente risultato:

Un importante punto da notare è che differentemente dal PHP, hack e HTML non si mescolano. Normalmente si può mescolare PHP e codice HTML insieme nello stesso file, come qui:

Questo tipo di codice non è supportato in Hack; deve essere utilizzato un template engine come XHP.

### Funzioni

Hack permette di specificare i tipi per i parametri di una funzione come anche per i valori di ritorno. Le funzioni in Hack sono quindi annotate con i tipi come nell'esempio sottostante:

