[R6RS] How SRFI 35 enables communication protocols via conditions

Michael Sperber sperber
Thu Jun 9 10:42:18 EDT 2005


Marc Feeley <feeley at iro.umontreal.ca> writes:

> Moreover I think that multiple inheritance is not the right approach  
> for conditions.

I agree---as I said in the message at the top this thread, compound
conditions are typically created ad-hoc, which makes (static) multiple
inheritance an awkard fit.

> I prefer the nested Throwables of Java.  Let me give you an example.
> Say I have a piece of code that can either raise an "file-not-found
> condition" in a call to open-input-file or a "key-not- found
> condition" in a call to a database lookup operation.  In the handler
> you test for the file-not-found condition and then the key-
> not-found condition.  With compound conditions there will be a
> problem if the lookup operation uses the filesystem as a database
> (i.e. it implements the lookup with open-input-file), because both
> conditions are file-not-found conditions.  By nesting conditions
> this problem is avoided, yet it is still possible to know (by
> following the nesting chain) that the key-not-found condition is due
> to a file- not-found condition.

The Java approach seems to have the disadvantage that the regular
condition-type discrimination mechanism (via types in the catch
clauses) only applies to the outermost condition object---you have to
apply more elaborate tests to find specific condition types along the
chain.  (It may be they added more magic to make this work---maybe
Marc or Anton could help elucidate.)  There certainly isn't always a
natural order to the component conditions.

Having an explicit nesting chain is also no problem with SRFI 35.
Just add:

(define-condition-type &nested &condition
  nested-condition?
  (inner nested-condition-inner))

-- 
Cheers =8-} Mike
Friede, V?lkerverst?ndigung und ?berhaupt blabla


More information about the R6RS mailing list