This is the mail archive of the guile@sourceware.cygnus.com mailing list for the Guile project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: GOOPS question (bug?)


Mikael Djurfeldt <mdj@mdj.nada.kth.se> writes:

> Nicolas Neuss <Nicolas.Neuss@IWR.Uni-Heidelberg.De> writes:
> > guile> (is-a? 1234567890 <number>)
> > #f
> > guile> 
> > 
> > Is this a bug?  Probably it will vanish if rationals are implemented
> > via GOOPS...  But is there a workaround for now?
> > 
> > I'm using guile-1.3.5/goops-0.1.6.
> 
> The numerical types have been reorganized in guile-1.3.5.  You need to
> use GOOPS from CVS.
> 
> I'll try to make a new release soon after the Guile-1.4 release.

I have tried now the CVS goops version together with guile-1.3.5.
Indeed, the recognition of longints as numbers works.  But other
problems have shown up:

* 1. In contrast to the earlier version, not error is signaled when
     overloading e.g. + without defining it as a generic function
     first.  Nevertheless, it does not work:
----------------------------------------------------------------
guile> (use-modules (oop goops))
guile> (define-method + ((x <number>) (y <number>))
  (* x y))  ; only purpose is testing
guile> (+ 2 3)
5
guile> 

	It works in the following way:
guile> (define \+ +)
guile> (define-generic +)
guile> (define-method + ((x <number>) (y <number>))
  (* x y))
guile> (+ 2 3)
6
guile> 
----------------------------------------------------------------

* 2. < and > behave different in this respect.  Why?
----------------------------------------------------------------
guile> (use-modules (oop goops))
guile> (define-method < () #t)
guile> (define-method > () #t)

0* (define-method > () #t)
1  (begin (if # #) (add-method! > #))

standard input:5:1: In expression (begin (if # #) (add-method! > #)):
standard input:5:1: #<primitive-procedure >> is not a valid generic function
Backtrace:
ABORT: (goops-error)
guile> 
----------------------------------------------------------------

* 3. GOOPS becomes very slow when generating more generic functions
     or methods, e.g.
(use-modules (oop goops))
(define-generic aa)
(define-generic ab)
(define-generic ac)
(define-generic ad)
(define-generic ae)
(define-generic af)
(define-generic ah)
(define-generic ai)
(define-generic aj)
(define-generic ak)
(define-generic al)
(define-generic am)
(define-generic an)
(define-generic ao)
(define-generic ap)
(define-generic aq)
(define-generic ar)
(define-generic as)
(define-generic at)
(define-generic au)
(define-generic av)
(define-generic aw)
(define-generic ax)
(define-generic ay)
(define-generic az)
(define-generic ba)
(define-generic bb)
(define-generic bc)
(define-generic bd)
(define-generic be)
(define-generic bf)
(define-generic bh)
(define-generic bi)
(define-generic bj)
(define-generic bk)
(define-generic bl)
(define-generic bm)
(define-generic bn)
(define-generic bo)
(define-generic bp)
(define-generic bq)
(define-generic br)
(define-generic bs)
(define-generic bt)
(define-generic bu)
(define-generic bv)
(define-generic bw)
(define-generic bx)
(define-generic by)
(define-generic bz)

    Is there a flag which switches between C and Scheme for the OO
    stuff?

* 4. A question: I had in mind that Neil Jerram was documenting the
     MOP.  Is this available?  It seems not to be in the CVS source.

Yours, Nicolas.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]