# Hybris (linguaggio di programmazione)

Hybris, acronimo di hybrid scripiting language, è un linguaggio di scripting open source con tipizzazione dinamica, ovvero un linguaggio che non richiede la dichiarazione esplicita del tipo di una variabile ma capisce come trattare la variabile in questione in base al valore con il quale viene inizializzata e successivamente trattata, ed orientato ad oggetti che viene incontro alle esigenze degli sviluppatori che vogliono automatizzare determinate procedure in modo semplice e veloce. Anche se è un progetto giovane, nato nel 2009, è già ad uno stato maturo e funzionale pronto per essere utilizzato. Hybris nacque inizialmente come progetto personale di Simone Margaritelli, per poi essere distribuito sotto licenza GPL 3 e diventare un progetto pubblico.

## Filosofia

La grammatica e il set di funzionalità integrate nella libreria standard sono state realizzate con tre soli scopi, scopi che riassumono abbastanza bene il target qualitativo del progetto:
* Eliminare le caratteristiche inutili delle grammatiche finora esistenti per ottenere uno stile pulito, intuitivo e soprattutto che non comporti inutili sprechi di tempo per la scrittura del codice.
* Includere nella libreria standard stessa quelle funzionalità che, benché non siano incluse nei “core” degli altri linguaggi, son diventate per qualità e/o per necessità lo “stato dell'arte” nel mondo della programmazione.
* Mantenere una certa interazione a basso livello con il sistema operativo per fornire un linguaggio che, se pur di scripting ed estremamente astratto, abbia potenzialità simili e a volte analoghe a linguaggi compilati di basso livello.

## Le caratteristiche principali del linguaggio

* Garbage collector mark and sweep per diminuire il consumo di risorse.
* Tipizzazione dinamica con dati strutturati a contenuti misti.
* Interazione a basso livello con il sistema tramite loading di librerie dinamiche e funzioni implementate in C.
* Supporto sia per la programmazione procedurale, che per la programmazione ad oggetti, ereditarietà e overloading degli operatori.
* Gestione delle eccezioni.
* Due librerie standard, una per la programmazione procedurale ed un'altra per la programmazione object oriented, che possono coesistere nello stesso sorgente.

## Tipologie supportate

Come specificato precedentemente, hybris è un linguaggio a tipizzazione dinamica, di conseguenza non è necessario specificare il tipo di variabile durante la dichiarazione poiché tale tipo verrà automaticamente impostato da hybris stesso al momento dell'inizializzazione della variabile con un valore.
I tipi fondamentali di hybris sono i seguenti:
* Booleano: Una tipologia che può assumere i valori "true" o "false".
* Intero: Come è facile immaginare, l'intero rappresenta un numero intero (senza decimali), il cui range varia da un valore minimo di -(2^32 – 1) ad un massimo di 2^32 per i sistemi a 32 bit, mentre per quelli a 64 da -(2^64 -1) a 2^64.
* Reale: Un numero che presenta dei decimali dopo la virgola o che comunque deve essere trattato come tale, la cui precisione arriva a 10 decimali dopo la virgola.
* Carattere: Contiene appunto un carattere ascii, e di conseguenza il suo valore varia da 0 a 255.
* Stringa: Una stringa di caratteri, può contenere un numero *teoricamente* infinito di caratteri nei limiti della memoria del computer.
* Binario: Un tipo che serve a gestire dati di tipo binario non gestibili tramite gli altri tipi.
* Array: Un insieme di valori di tipologia non necessariamente omogenea, affronteremo gli array più avanti con maggiore precisione.
* Mappa: Un array associativo, anche di questo parleremo più avanti.
* Alias: Un tipo particolare, utilizzato come una sorta di puntatore ad una funzione o comunque ad un'altra variabile alla quale fare riferimento.
* Struttura: Un tipo di dato strutturato.
* Classe: Un'estensione delle strutture che supporta anche delle funzioni interne, chiamate metodi.
* Reference: Un riferimento ad una variabile, usato principalmente per passare argomenti a delle funzioni.