emacs-devel
[Top][All Lists]
Advanced

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

Re: Slot accessing issues in EIEIO


From: Jonas Bernoulli
Subject: Re: Slot accessing issues in EIEIO
Date: Thu, 07 May 2020 15:44:45 +0200

>> OK, a closql-object (This is a class defined in closql) is a proxy
>> object to a row in SQL database. So each time user tries to read a
>> slot, closql must sync values between database and Emacs first.

Not every time; only when the slot is still unbound.

> OK, I'm starting to see vaguely what this is about, but it's still
> rather fuzzy.

I'll give it a try...

Every object slot represents a table column.  There is one additional
column at the front of each row, which holds a representation of the
object's class.

Class allocated slots on the other hand are not stored in the database.

Two types of object slots exist (or three depending on how you count):

1. Direct slots whose value is stored directly in the row.
2. Indirect slots whose value is a secondary key identifying a row in
   another table.
   
For example an object that represents an Emacs package has a `name'
slot, which is sufficiently represented by a direct slot.  But the list
of provided features is stored using an indirect slot.  We might want to
SELECT the package that provides a certain feature using SQL instead of
creating a list of every package (which is expensive) and then finding
the desired package using, for example `cl-find-if'.

The elements in the other table, which is accessed indirectly, may be
objects themselves or they may be simple lists.

Once an indirect slot has been accessed its value is cached in the
object, so future uses don't require database queries.

> To better understand, I suggest that I'll throw some solutions so you
> can shoot them down explaining why they're not applicable.
>
> Would it work to use the `slot-missing` generic function?

I think the above addresses that.  But I guess the questions becomes
"Well, what about `slot-unbound' then?".

For `eieio-oref' that *might* work but not for `eieio-oset'.  The user
may wish to change the value of any object slot; it doesn't matter
whether it is direct or indirect and in the latter case whether the slot
is still unbound or has already been resolved.



reply via email to

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