[gsharp-devel] Architecture question

Robert Strandh strandh at labri.fr
Tue Jul 20 09:57:47 UTC 2004

Timothy MOORE writes:
 > Presumably the score pane knows how to render scores. A score is a 
 > collection of objects that follow a "score protocol" that is, have some 
 > semantics for functions that "do stuff" with scores.

I kind of don't think so.  The reason is that a real score is much
more than what is visible in a score pane.  It is therefore convenient
to define what is visible in a score pane as a different kind of
object from that which is managed by the score editor. 

Also, you do not want to put too much semantics into a score pane
object, because different applications might want to do different
things with it. 

 > Right, but these seem a bit more like protocol classes than 
 > presentation types to me. That is, the score pane will handle the 
 > rendering of the entire score and do the right thing when it finds 
 > clefs, noteheads, etc. 

Again, I am not sure.  If you build all that into the score pane, you
no longer have a free choice of which application you want to write. 

 > I don't imagine that a "client" of a score pane 
 > would write (present x 'notehead). 

Why not?

 > On the other hand, the presentation 
 > type 'notehead does make sense for input; if the score pane rendering 
 > code has recorded the presentation type of each interesting object with 
 > with-output-as-presentation, then these types will be available to the 
 > commands of the client code.


 > You can make these types disjoint from Gsharp types if you want but, 

I have the feeling that that is what I want, but I am not sure. 

 > like I said, these make sense to me as protocol superclasses inherited 
 > by the concrete Gsharp classes.

Hmmm.  That would mean that the internal data structure assumes the
existence of a GUI.  I am not sure that is a good idea.

 > Right; use-package should never be mandatory for a client. I wouldn't 
 > worry too much about choosing a short package nickname for your 
 > package; after all, that might conflict with a nickname in the client's 
 > system, which is a far more painful problem to work around than 
 > individual symbol conflicts. 

Good point. 

 > The client should be free to use a package 
 > if they want, import individual symbols, use the package name 
 > explicitly, or "adopt" the external symbols into a package of their own 
 > with a short nickname, if they really want that.


Robert Strandh

Greenspun's Tenth Rule of Programming: any sufficiently complicated C
or Fortran program contains an ad hoc informally-specified bug-ridden
slow implementation of half of Common Lisp.

More information about the gsharp-devel mailing list