giovedì 26 luglio 2007

DSL e Ruby

Ogni nuovo programma è un nuovo linguaggio! Le librerie che scrivi, le interfacce, gli oggetti si compongono tra loro per parlare una lingua specifica del tuo dominio applicativo. In questo caso si parla di DSL (Domain Specific Language).

Il nuovo linguaggio si poggia sul linguaggio base (Java, Ruby etc.) ma in realtà parla una lingua diversa introducendo nuovi vocaboli (ex. Utente, Cliente, Contratto, Azienda etc. ) e tramite le funzioni delle librerie introduce una nuova sintassi/semantica. Ad esempio in Java:

new Cliente().aggiungi(new Contratto())

Il metodo aggiungi è un nuovo verbo che non esisteva in java come non esistevano i sostantivi Cliente e Contratto.

Il programmatore costruisce ogni volta un nuovo linguaggio specifico per il particolare dominio applicativo senza nemmeno rendersene conto. Se pero' il linguaggio alla base è potente (come nel caso di Ruby) esso rende evidente la creazione del nuovo linguaggio, più esplicita e comprensibile! In pratica Ruby puo' letteralmente estendere se stesso e comportarsi come un meta-linguaggio (linguaggio descrittore di altri linguaggi). Nel caso di Ruby si parla anche di MOP (Meta Object Programming).