guile-user
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Me no understand scoping


From: Maciek Godek
Subject: Re: Me no understand scoping
Date: Sun, 10 Aug 2008 23:49:42 +0200

2008/8/8 Neil Jerram <address@hidden>:

>> The main reason is that there's no documented way
>> of accessing GOOPS objects from C (except from using
>> scm_c_eval_string etc.), or at least I couldn't find any
>> documentation for that.
>
> Yes, that's a fair point.  And one that keeps coming up.  I hope we
> can remedy this some time soon.

I obviously started to develop my own OO system -- purely
to understand everything. By the way I came up with some
conclusions regarding objects and classes and that is:
- a class can be implemented as a vector of three elements:
  * vector of methods (closures)
  * hash table mapping method names to their closures
  * hash table mapping slot names to vector indices.
- an object (instance) could also be implemented as a
simple vector -- its first field would be a reference to its
class, and the remaining ones would be the slots.

Interfacing such a system from the C level is rather
straightforward (or at least as straightforward as accessing
scm_vectors) and efficient.
(Perhaps goops does it more efficiently, I dunno)

>> I also get this unpleasant feeling that all these 'getters'
>> and 'setters' are entities multiplied beyond necessity
>> (even the infamous C++ doesn't explicate them)
>
> I don't understand you here.  And in any case, getters and setters are
> optional.  You can just use slot-ref and slot-set! if you prefer.

I bet you're right. I'm just learning and trying to justify all the
features that are provided by goops. Anyway, I can't get rid of
a feeling that many of them are redundant and quite random,
but I'm still examining it.

>> I'm really trying to get close
>> to the classical OOP notation: object.method() -- and
>> it's probably why I explore the potential of using these
>> "poor man's objects"
>
> Unfortunately that's only "classical" for non-Lisp-like languages!
> Still, I'd take your point if you said you wanted to write something
> that would be familiar to OO programmers in non-Lisp languages.

Fortunately Andy Wingo recommended his essay about this.

>> And so I never stopped to believe that (define x 5) is more or
>> less equivalent to (hash-set! global-scope 'x 5).
>
> Well yes.... but I'm afraid I'm still not sure how that leads us to
> local-eval !  Sorry if I'm being dumb about this!

Its genesis reaches the Kejtil's suggestion for accessing closure's
scope. The fact that it is possible in guile lead me to the conclusion
that it can be done to implement a simple oo system. (I'm just
beginning to realize how inefficient this can be).


Thanks a lot
M.




reply via email to

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