next up previous Sommario
Next: 8. Il progetto Up: 7. Il linguaggio Gödel Previous: 7.7 I moduli di   Sommario

7.8 Stato dell'implementazione

Il manuale del linguaggio Gödel è stato scritto pensando di fornire la specifica del linguaggio, non di descrivere uno strumento completo e definitivo. D'altra parte la versione disponibile (indicata come v.1.04c)[HL91], e con cui è stato realizzato il progetto esposto in questa tesi, presenta numerose discrepanze con il manuale.

Primo notevole problema è stata la mancanza dei moduli per la metaprogrammazione Language, Theory, Program. I primi due moduli, che sono indispensabili per la realizzazione di metaprogrammi che operano su teorie logiche, sono stati implementati al Dipartimento di Informatica, quasi di pari passo alla realizzazione del presente lavoro.

Inoltre, l'utilizzo di funzionalità del linguaggio ha reso evidente un altro problema, legato al modo in cui il linguaggio è realizzato. Per esempio, utilizzare il commit in una clausola che definisce un predicato ne rende necessaria, a differenza di quanto indicato nel manuale, la presenza anche in tutte le altre clausole che definiscono lo stesso predicato. Infatti il generico modulo Gödel, quando viene caricato, viene compilato in Prolog e a seguito di questo processo le clausole vengono ordinate. Le clausole che definiscono un certo predicato e non contengono commit precedono in tale ordinamento quelle con il commit; in tal modo può cambiare la semantica operazionale del programma rispetto a quella desiderata.

Inoltre, a differenza di quanto indicato nel manuale dove è denotato da $=$, il predicato built-in nel sistema rappresentante l'uguaglianza è denotato da $@=$.

Nella versione ora disponibile non è implementato il commit $\{ \ldots \} \_{ \em l}$ perchè, come spiegato nel manuale, l'estensione del commit one-solution a tale nuovo tipo di commit richiede tecniche ancora non sviluppate.



Poco prima di completare il presente lavoro si è resa disponibile una nuova versione del linguaggio (indicata stranamente come v.0.4)[HL91]. Tale versione, pur essendo più aderente al manuale per alcuni aspetti, come il modo di scrivere i condizionali, ha rivelato dei problemi sostanziali che ne hanno causato il mancato utilizzo per gli scopi di questa tesi.

Sostanzialmente, i moduli per la metaprogrammazione Syntax e Program (il primo dei quali ha sostituito Language), ora disponibili, offrono i predicati per manipolare la rappresentazione ground di programmi oggetto, alcuni dei quali, peraltro fondamentali, presentano un comportamento errato. Un esempio per tutti: il goal $\leftarrow$ EmptyProgram(x), che dovrebbe restituire associata alla variabile x la rappresentazione ground di un programma vuoto, fallisce inspiegabilmente.

È stato quindi necessario continuare ad adottare la versione meno recente, i moduli per la rappresentazione ground della quale, peraltro, offrono, essendo stati realizzati quasi di pari passo con il presente lavoro, predicati non presenti nel manuale ma che sono stati decisamente utili.

Infine, è opportuno descrivere come gli autori del linguaggio pensino di estendere Gödel nel prossimo futuro realizzando, partendo da esso, alcuni tra i più promettenti paradigmi di programmazione logica recentemente sviluppati.

In particolare, tre sono le principali estensioni possibili: la prima intende accogliere nel Gödel sofisticate capacità di constrant-solving introdotte nei linguaggi di programmazione logica con vincoli CLP(R) [JL87], CHIP [DHSA88] e Prolog III [Colm90].

La seconda riguarda la possibilità di realizzare un linguaggio per la programmazione logica concorrente. Come messo in evidenza dai linguaggi di questo tipo realizzati come estensione del Prolog, è necessario rinunciare ad alcune caratteristiche, come l'uso della negazione, avendo comunque a disposizione possibilità proprie dei linguaggi concorrenti, come l'esplicito controllo della comunicazione e della sincronizzazione tra processi. È attualmente allo studio l'introduzione nella regola di computazione del Gödel dell' Andorra principle [HB88]: esso consiste nel selezionare, nel goal, determinati letterali e lanciarli in un modo and-parallelo. Un letterale è determinato se esso ha al più una clausola con cui poter unificare. In Gödel ciò è realizzabile selezionando, se presenti, tutti i letterali (e condizionali) determinati che non contengano vincoli, altrimenti selezionando il letterale o condizionale leftmost.

Proseguendo con le possibili estensioni del Gödel a moderni paradigmi di programmazione, è da sottolineare quella che mira a introdurre strumenti per la programmazione object-oriented. Per ottenere ciò, sarebbero da realizzare un type system del tipo order-sorted, per avere a disposizione sottotipi, strumenti specializzati per strutturare teorie che rappresentano oggetti e la possibilità di dichiarare e utilizzare moduli parametrici.

A più lungo termine, nell'ambito degli strumenti per la metaprogrammazione, è in programma la possibilità di fornire primitive, ad un livello relativamente basso, per definire particolari rappresentazioni ground. Così il singolo programmatore che voglia realizzare un metaprogramma su un particolare linguaggio oggetto provvederà a costruirsi la rappresentazione ground più adatta.


next up previous Sommario
Next: 8. Il progetto Up: 7. Il linguaggio Gödel Previous: 7.7 I moduli di   Sommario
Roberto Giungato 2001-03-14