wpaisb-devel
[Top][All Lists]
Advanced

[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.




reply via email to

[Prev in Thread] Current Thread [Next in Thread]