unofficial mirror of guile-user@gnu.org 
 help / color / mirror / Atom feed
From: Mikael Djurfeldt <mikael@djurfeldt.com>
To: Damien Mattei <damien.mattei@gmail.com>
Cc: guile-user <guile-user@gnu.org>
Subject: Re: GOOPS question
Date: Fri, 30 Apr 2021 12:43:30 +0200	[thread overview]
Message-ID: <CAA2XvwLBq5oCjCjSBUTuBLLbG4ctxN=W7p2m5zkszfVVbbHjQQ@mail.gmail.com> (raw)
In-Reply-To: <CADEOaddosJ_4g7eFGpKw2ED8nD1GnfZo=mBcYhcA4kfz2ZCQkw@mail.gmail.com>

The superclass question is a matter of taste.

First note that in CLOS-like objects systems, such as GOOPS, methods are
not components of classes but it is rather the set of operations =
generics/methods around a type which define its behavior. Roughly speaking,
the only things directly tied to the class are the slots. In this regard
<array> is opaque---there are no accessible slots. Therefore, if using it
as a superclass, it won't add any slots to your instances apart and above
what you explicitly add in your class definition. So, you should think of
the role of <array> as a superclass more in terms of natural grouping, and
its role in selecting methods when you operate on the object using
generics, than anything else. The *only* functional effect of using <array>
as a superclass in this case is that methods taking an <array> argument
will also accept instances of <gvector> as an argument. (This does not
apply to *functions* now taking array as an argument.)

I would say that you could choose between having no explicit superclass and
having <array> as superclass. In your case there would not be any big
functional difference.

If you, in your last answer, by "template" refer to my answer, then you are
of course free to replace all <vector> stuff with the corresponding <array>
stuff.

In my example, I chose to use <vector> as superclass because I regarded
<gvector> to be a specialization. It is true that <vector> logically could
be regarded as a specialization of <gvector>, but you can't do anything
about that.

Best regards,
Mikael

On Fri, Apr 30, 2021 at 11:48 AM Damien Mattei <damien.mattei@gmail.com>
wrote:

> thank for your answer but my question was just about use of superclass....
> SRFI implementation is too complex  for what i want to do now,
> template is 1 dimension gvector, that's neolithic for me :-) and do not
> explain use of superclass...
> Damien
>
> On Fri, Apr 30, 2021 at 9:57 AM Linus Björnstam <
> linus.internet@fastmail.se>
> wrote:
>
> > This does not answer your question, but:
> >
> > There was just a SRFI released for growable vectors. I don't know about
> > any interest to have it included in guile, but the reference implentation
> > is probably trivially portable:
> > https://srfi.schemers.org/srfi-214/srfi-214.html
> >
> >
> >
> > --
> >   Linus Björnstam
> >
> > On Fri, 30 Apr 2021, at 01:10, Damien Mattei wrote:
> > > hi,
> > > i want to create a growable vector class in Guile,
> > > such as std::vector or python list,
> > > first i do not know if it exist already? seems not
> > >
> > > i want to use GOOPS but i do not understand how the superclass could be
> > > accessed,used, instanciate...
> > > for example in the doc there is:
> > > (define-class <my-complex> (<number>) r i #:name "Complex")
> > >
> > > seems <number> superclass is of no use
> > >
> > > for my growable vector i would like to use array as superclass?
> > > but perhaps should it be just a slot as array are a subset of growable
> > > array ,so a subclass
> > >
> > > anyway if i write something ike that:
> > > (define-class <gvector> (<array>) .....
> > > how can i use the <array> object?
> > >
> > > i think perhaps i should not define a superclass or <object> as super
> > > class....
> > > any advice welcome...
> > >
> > > Damien
> > >
> >
>


  reply	other threads:[~2021-04-30 10:43 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-04-29 23:10 GOOPS question Damien Mattei
2021-04-30  5:52 ` Atom X
2021-04-30  7:55 ` Mikael Djurfeldt
2021-05-02  0:07   ` Damien Mattei
2021-05-02 10:14     ` Damien Mattei
2021-05-02 10:26       ` Mikael Djurfeldt
2021-05-02 10:58         ` Damien Mattei
2021-05-02 10:34       ` Damien Mattei
2021-05-02 10:35       ` tomas
2021-05-02 10:21     ` Mikael Djurfeldt
2021-05-08 21:11       ` Damien Mattei
2021-05-10 12:22         ` Mikael Djurfeldt
2021-04-30  7:57 ` Linus Björnstam
2021-04-30  9:47   ` Damien Mattei
2021-04-30 10:43     ` Mikael Djurfeldt [this message]
2021-04-30 11:08 ` Mikael Djurfeldt
2021-04-30 12:19   ` Stefan Israelsson Tampe
2021-04-30 14:50     ` Mikael Djurfeldt
2021-04-30 15:15       ` Mikael Djurfeldt
     [not found] <Pine.GSO.4.05.10207071043010.9685-100000@sallust.ida.ing.tu-bs.de>
2002-07-08 18:26 ` goops question Marius Vollmer
     [not found] ` <87fzyu9iu0.fsf@zagadka.ping.de>
2002-07-08 19:59   ` Dirk Herrmann
2002-07-09 21:17   ` Neil Jerram
  -- strict thread matches above, loose matches on Subject: below --
2002-07-07  8:45 Dirk Herrmann

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/guile/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CAA2XvwLBq5oCjCjSBUTuBLLbG4ctxN=W7p2m5zkszfVVbbHjQQ@mail.gmail.com' \
    --to=mikael@djurfeldt.com \
    --cc=damien.mattei@gmail.com \
    --cc=guile-user@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).