xaccAccountEqual ?

Hendrik Boom hendrik at topoi.pooq.com
Sun Jan 8 22:06:58 EST 2012


On Sun, Jan 08, 2012 at 11:52:41AM -0800, John Ralls wrote:
> 
> On Jan 8, 2012, at 10:40 AM, Hendrik Boom wrote:
> 
> > On Sat, Jan 07, 2012 at 04:23:16PM -0500, Derek Atkins wrote:
> >> Hi,
> >> 
> >> On Sat, January 7, 2012 2:35 pm, Hendrik Boom wrote:
> >>> What's xaccAccountEqual for?  Is it actually something gnucash uses (I
> >>> can't imagine what for), or is it just there because guile wants the smob
> >>> to have a function that tests deep equality?
> >> 
> >> I don't understand the question.  It's there to test equality of two
> >> Account objects. The API is used in a dozen places throughout the code.
> > 
> > I can see testing two pointers to Account objects to see if they point 
> > to the same Account object.  But I thought, perhaps wrongly, that the 
> > engine would make sure that no account would ever have two 
> > different Account objects, presumably by some kind of test before 
> > creating the second Account object..  
> > 
> > I do find myself wondering how one could ever be in the situation where 
> > two accounts are Equal, with Equal subaccounts, and even Equal splits 
> > except by amazing coincidence.  And then why that coincidence should be 
> > worth testing for.  Evidently I'm misunderstanding something here. 
> 
> Not two accounts, two account objects -- both of which might have been loaded from the same data in storage, or might have been deep-copied. (There was a partially-completed book closing implementation that did that as the first step. We're slowly weeding out the remnants.) 
> 
> I thought you were working on learning to script Gnucash with Guile.

In part, yes.  But I'm really trying to learn to write an introduction 
for people who want to learn to script Gnucash with Guile.

> Why are you worrying about the internals? 

Because

(a) it's hard to know which things are internal and which aren't.  And 
everyone trying to write scripts is going to have to figure out what 
they really need to know.

(b) When I saw this, I started to wonder if I had completely 
misunderstood how gnucash works.

(c) It's impossible to write something well without knowing more than 
you're writing.  Even in fiction, it's a truism that if the author 
don't know what brand of cereal the main character eats for breakfast, 
there's a gaping hole in the story, even if that fact never really 
enters into it.

(d) Besides, I start wandering through the docs, and encounter things 
like this.

> (Yes, it's true that the scripting interface exposes too much -- *far* 
> too much -- of Gnucash's internals. That's partly laziness on the part 
> of those writing the wrapper code and partly a legacy of Gnucash 1.x 
> when it was written mostly in Guile.

There's lots more here than needed for report generation, true.  But I'm 
sure there are going to be other things the scripting interface is good 
for, for which we may need to expose those internals.  So I vote no 
change here, for now.

But when it gets documented properly, one of the things that's going to 
have to be decided is just which of the internals are going to be the 
official interface, which ought to be preserved during further 
development, and which of them, though useful in the moment, are *not* 
guaranteed to be there in the next revision.

-- hendrik


More information about the gnucash-devel mailing list