[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Wpaisb-devel] Il progetto su Savannah e` stato creato
From: |
Luca Saiu |
Subject: |
Re: [Wpaisb-devel] Il progetto su Savannah e` stato creato |
Date: |
Tue, 26 Sep 2006 11:56:16 +0200 |
User-agent: |
Thunderbird 1.5.0.7 (X11/20060915) |
Ciao Matteo.
address@hidden wrote:
Ciao Luca,
mi ricordo che un po' di tempo fa mi hai fatto vedere un bug della
libreria rpc.
Quando eri a casa mia con Massimo, immagino. Sinceramente non mi
ricordo del bug; puo` darsi che l'abbia corretto io nel frattempo.
adesso non ricordo bene quando si verificava, potresti inviarmi uno
script que generi il bug, cosi gia potrei mettermi a vedere qualcosina
Benissimo. Se vuoi fare subito qualcosa di utile puoi provare con
questo, che e` piuttosto facile da realizzare ma importante: fare in
modo che le eccezioni scatenate dalla valutazione di una RPC sul server
si propaghino sul client; non parlo di errori di rete, ma semplicemente
di casi come:
;;; Server:
(define-exported (divide-by a b)
"Divide a by b"
(/ a b))
;;; Client:
((rpc port divide-by) 1 0)
In questo caso dovrebbe essere il *client* a ricevere l'eccezione di
divisione per zero, e non il server. Basta una catch nei thread del
server che servono le RPC che prenda *tutte* le eccezioni (cerca nella
documentazione di Guile se non hai usato le eccezioni, sono molto
semplici). Va leggermente cambiato il protocollo, perche` adesso c'e` da
distinguere il caso di "rpc eseguita con successo, il risultato e`
questo" da "rpc fallita, l'eccezione e` questa". Nell'implementazione
attuale il server restituisce una semplce S-espressione che e` il
risultato, ma se supportiamo i fallimenti la cosa si puo` estendere; per
es. si puo` usare il cons di un simbolo e il risultato/eccezione:
;;; Protocollo rpc-server->client:
(success . 42) ;; in caso di successo
(failure numerical-overflow) ;; in caso di fallimento
Per i principianti in Scheme, la seconda riga e` esattamente
equivalente a:
(failure . (numerical-overflow))
Grazie,
--
L.