Versione finale relazione
[toni-reis.git] / doc / analisi_supporto_tecnologico.tex
blob160dad4ad05253e1305c132762388a27afe10e8c
1 \chapter{Analisi del supporto tecnologico}
2 Come supporto tecnologico è stata utilizzata la suite \textit{gnat} in versione GPL.
3 In particolare i pacchetti utilizzati sono stati:
4 \begin{itemize}
5 \item Gnat: il compilatore per il linguaggio \textit{Ada}.
6 \item Xmlada: il modulo per interagire con i documenti in formato XML.
7 \item Gtkada: modulo per creare interfacce grafiche con le note librerie GTK.
8 \item Polyorb: per l'implementazione di Ada Distributed System \(Annex E\).
9 \end{itemize}
10 \section{Documentazione}
11 Il principale problema, che riguarda tutte le tecnologie utilizzate, è stata la scarsa documentazione disponibile. La poca documentazione è inoltre pensata per utenti che conoscono bene i problemi di concorrenza e distribuzione, assumendo molte conoscenze come scontate. Questo, specialmente per le fasi iniziali del progetto, è stato un grosso problema: è stato necessario molto tempo quindi solo per raccogliere la documentazione disponibile.
13 Per quanto riguarda Xmlada questo problema è ancora più marcato: la documentazione è completamente assente,a meno di un piccolo tutorial, e rimanda alle specifiche del W3C, abbastanza dispersive e verbose.
15 \section{Polyorb}
16 Polyorb, oltre a soffrire dello stesso problema di scarsa documentazione, soffre di altri problemi, a nostro avviso ben più gravi.
17 \begin{itemize}
18 \item non è implementato il \textit{marshalling} e \textit{unmarshalling} dei record: non è possibile passarli come parametro, nè utilizzarli in una unità definita \textit{shared passive}.
19 Tale difetto non è documentato e non si può riscontrare se non in codice complesso. Solo nella fase di codifica è stato possibile accorgersi di questo problema. E' stato necessario modificare la progettazione del componente \textit{Monitor} e della parte relativa alla gestione
20 delle statistiche del componente \textit{Race}.
21 \item non è possibile compilare i sorgenti in modalità debug: funzionalità che sarebbe molto utile in fase di verifica.
22 \end{itemize}
24 \section{Limitazioni delle tecnologie }
25 \subsection{Limitazioni del linguaggio}
26 Molte delle limitazioni dovute al linguaggio sono giustificate dal punto di vista logico: questo non è un grosso problema perchè una volta capito il significato delle varie unità di distribuzione, non è difficile adattare il codice per rispettare questi vincoli.
27 Ci sono però altre caratteristiche del linguaggio che hanno lasciato alcune perplessità:
28 \begin{itemize}
29 \item per l'inizializzazione dei campi dati all'interno delle risorse protette si possono usare i parametri del costruttore, ma non effettuare operazioni matematiche su di essi.
30 Ad esempio non è legale il seguente codice:
31 \texttt{
32 protected type Test(parametro : Integer) is \\
33 ...\\
34 private \\
35 a : Integer := 3*parametro; \\
36 ...\\
37 end Test;
39 \end{itemize}
41 \subsection{Limitazioni GTKAda}
42 La libreria \textit{gtkada} sono un implementazione delle librerie grafiche GTK in Ada. I problemi riscontrati non riguardano l'implementazione Ada, ma in generale le librerie GTK.
43 \begin{itemize}
44 \item problemi nella gestione di eventi provenienti da diversi \textit{thread}: è necessario infatti utilizzare delle chiamate di basso livello a \textit{Gdk.Threads} per non incorrere in errori, tra l'altro difficili da individuare. Non dovrebbe essere necessario eseguire macro per l'acquisizione di lock su tutti gli elementi dell'interfaccia,
45 le librerie dovrebbero essere invece \textit{thread-safe}. Altre librerie grafiche (ad esempio le \textit{QT}) non soffrono di queste problematiche. La scelta sulle \textit{GTK} è stata però obbligata poichè il porting
46 delle \textit{QT} al linguaggio \textit{Ada} non è ad uno stato sufficientemente maturo.
47 \item uso abbondante delle procedure piuttosto che di delle funzioni. Questo richiede la dichiarazione di variabili esplicite anche per assegnazioni ``intermedie''; vedere ad esempio i metodi \textit{Gtk\_New\(\)}.
48 \item funzioni esplicite per l'\textit{upcasting} ad interfaccia dalla nomenclatura discutibile, ad esempio \textit{+\(\)} o \textit{-\(\)}.
49 \item scarsi vantaggi offerti dall'utilizzo dell'applicativo \textit{Glade} per il design delle UI. Il livello di dettaglio che si raggiunge non è sufficientemente preciso, e il codice generato non è così chiaro da poter essere modificato facilmente.
50 \item scelte architetturali complesse, ad esempio il pattern \textit{Model View Controller} applicato alla visualizzazione delle liste. Per mantenere ordinata la vista, è necessario utilizzare due modelli, uno grezzo con i dati ed un secondo per gestirne l'ordinamento.
51 \end{itemize}
53 \section{Considerazioni sullo svolgimento del progetto}
54 La scelta di intraprendere il secondo livello di difficoltà nel progetto didattico è stata presa con l'intento di ottenere buoni risultati e di capire affrontandole, le principali problematiche dovute alla concorrenza ed alla distribuzione. Tuttavia si cercava anche di evitare ulteriori problematiche legate alle tecnologie da utilizzare e alla luce delle conclusioni la scelta non è stata ripagata. Probabilmente utilizzando uno standard più diffuso come \textit{CORBA} i problemi relativi alla distribuzione sarebbero stati maggiormente prevedibili, e il tempo a disposizione sarebbe stato impiegato in modo più fruttuoso. Un cambiamento così radicale non poteva essere affrontato a progetto iniziato dati gli eccessivi costi.