Prism criticism

Maneesh Yadav 97yadavm@scar.utoronto.ca
Thu, 3 Jun 1999 14:12:59 -0400 (EDT)


You're goals seem clearer to me now, and I agree with them for the most
part.  However I really don't see what you are trying to sya here.  Is the
meaning part just a part of the code?  How is this different than writing
out a c struct and a comment beside it?

Jim give me a clear example on how using Prism's methods provides more
elegance/usefullness whatever, than doing it in C++....that's all that you
need to prove your case.

On Wed, 2 Jun 1999, Jim Little wrote:

> Maneesh Yadav wrote:
> > 
> > Jim, I think you need to provide clearer examples.
> > I really don't see much here except that if you use the word class for
> > metamodel and write all data out in binary it's no different than any
> > traditional structure representation (C++, smalltalk etc.) which 
> > isn't particularly different.  For example you "universal" text 
> > import export model example is just the binary representation of Hello
> > World...I really don't see how writing a string down in binary makes 
> > it possible to mix languages and do visual programming.
> 
> Perhaps a quick introduction to Prism is in order.  For the theoretical
> background, please see my "The Will and the Word" essay -- it's the best
> explanation of what I'm trying to do. 
> http://www.teleport.com/~sphere/documents/0006/4/index.html
> 
> Prism is an attempt to realize the theories presented in my essay. 
> Here's how it works:
> 
> The fundamental concept behind Prism, presented in "The Will and the
> Word," is that programs are ethereal constructs.  The only things we
> humans ever deal with are representations of programs -- models.  Source
> code, object code, executable files -- these are all different ways of
> modeling programs.  Some of them can even be run by a computer.  But the
> fundamental concept is unchanged: they are all models.
> 
> 
> THE META-METAMODEL
> 
> What Prism does is provide a standard format for modeling programs...
> or, as it turns out, any other concept.  (In this way, it's very similar
> to Arrow.)  Prism's standard format is called its "meta-metamodel," for
> reasons almost explained below.  The format defines three data types,
> which I call "atoms:"
> 
> _Bit:    Prism's fundamental unit of information
> _Stream: An ordered collection of atoms
> _Map:    An indexed collection of atoms
> 
> (The underscore serves to distinguish Prism's atoms from normal bits,
> streams, and maps; it serves no other purpose.)
> 
> The most important part of Prism's meta-metamodel is that it only
> defines a format for models.  It implies absolutely no meaning.  So if I
> say (using the Prism/GTL language):
> 
> _Stream
> +-----------+
> | _Bit: FOO |
> | _Bit: FOO |
> | _Bit: FOO |
> | _Bit: BAR |
> | _Bit: BAR |
> | _Bit: BAR |
> | _Bit: FOO |
> | _Bit: FOO |
> | _Bit: FOO |
> +-----------+
> 
> You know that I have a model consisting of a _Stream which contains nine
> _Bits in the order given.  But you don't know what it represents.  To
> save space, I might have described the same model this way (still using
> Prism/GTL):
> 
> _Bit[]: 111000111
> 
> But you still couldn't assume anything about what the model represented.
> 
> This is where metamodels come in.  Prism's meta-metamodel defines a
> standard format for modeling any concept.  But it doesn't say anything
> about which concept a particular model represents!  We use metamodels to
> determine that.
> 
> 
> METAMODELS
> 
> As I've mentioned, every program -- indeed, every concept -- can be
> modeled in the format defined by Prism's meta-metamodel.  But if you
> don't know how to interpret a model, it's meaningless.  That concept --
> the knowledge of how to interpret a model -- is represented by a
> metamodel.  A metamodel is a description of a set of models and a
> description of the concept each model represents.
> 
> (Astute readers will have noticed that, since metamodels represent a
> concept, they could theoretically be described with Prism's
> meta-metamodel.  We're seeing the first glimpse of how reflection could
> possibly play a role, which is what makes this relavent to TUNES.)
> 
> In Prism, I use a language called Prism/GTL to describe sets of models. 
> (You've seen the basic "model syntax" of Prism/GTL above.  It describes
> a single model.  There's a variant called the "metamodel syntax" which
> describes sets of models.)  Then I use plain English to present rules
> which an intelligent human could use to understand how to interpret all
> of the models described by a metamodel.  Here's an example:
> 
> FORM: _Bit[0+]: * (Morse Code)
> 
> MEANING: All Morse Code models represent a message in Morse code.  Each
> _Bit in the model corresponds to a dot or a dash in the message.  _Bits
> in the FOO state represent a dot.  _Bits in the BAR state represent a
> dash.
> 
> Basically, what this metamodel is saying is that there's a set of models
> called "Morse Code" models which represent messages in Morse code.  The
> form of the model is zero or more _Bit atoms in a _Stream.  Each _Bit
> can either be FOO or BAR; FOO corresponds to a dot, and BAR corresponds
> to a dash.
> 
> Armed with this information, we're ready to interpret the model I gave
> above:
> 
> _Stream
> +-----------+
> | _Bit: FOO |
> | _Bit: FOO |
> | _Bit: FOO |
> | _Bit: BAR |
> | _Bit: BAR |
> | _Bit: BAR |
> | _Bit: FOO |
> | _Bit: FOO |
> | _Bit: FOO |
> +-----------+
> 
> Assuming the above model is a Morse Code model, then it represents the
> message:
> 
> . . . - - - . . .
> 
> ...or, "SOS."
> 
> (Astute readers will have noticed that the levels of meaning here are
> rather astounding -- the Prism model, which represents the morse code
> message, which represents the word "SOS," which represents the phrase
> "Save Our Ship," which has connotations of extreme need.  Extremely
> astute readers will have realized that each one of these levels of
> meaning -- each being a slightly different concept -- could be
> represented by Prism models.  Now if only a computer could perform the
> interpretation...)
> 
> 
> TRANSFORMING MODELS
> 
> Models only make sense in context.  You can only interpret a model if
> you know which metamodel you should use to interpret it.  Above, I
> interpreted the example model as meaning "...---..." because I assumed
> it was a Morse Code model.  The same model interpreted with a different
> metamodel could mean something entirely different!
> 
> More importantly, the same concept can be represented with different
> models if they are interpreted by using different metamodels -- that is,
> if their context is different.
> 
> So how does all of this relate to programs and programming?  Well,
> consider this.  If source code is a model of a program, and executable
> code is a model of a program, then what is a compiler?
> 
> Answer: It's a mechanism for automatically transforming models from one
> context to another.  The source code and executable code are both models
> of the same program -- they're just interpreted differently.  The
> context is different.  One context is recognized by humans; the other,
> recognized by CPU's.  The program represented is the same.
> 
> 
> THE POINT
> 
> It's getting late and I'm losing my lucidity.  But the point of all this
> is that a compiler isomorphically transforms models.  It changes the
> representation, but doesn't change what is being represented.  Now,
> suppose we had a common format for representing all models.  And further
> suppose that format was so well-suited to modeling concepts that
> metamodels for that format clearly mapped concepts to syntactic
> structures.  What would that give us?  
> 
> It would give us the ability to write a single program which could
> manipulate any model.  If we made the program itself programmable, the
> simple metamodels would give us the ability to easily write programs to
> transform models from one context to another.  And since all the models
> would have a common form, we could even write programs which transformed
> multiple models into one.
> 
> And that, Maneesh, is what the Prism Compiler is.  That's why "writing a
> String down in binary" is so important.  I'm not writing a string down
> in binary; I'm defining a metamodel for representing strings, so that
> henceforth, any person using Prism can look at a String model and know
> what it means and how to transform it, so that any future metamodel he
> wishes to create can incorporate strings, and any existing programs that
> transform or manipulate strings can be re-used.
> 
> What I'm providing are the basic building blocks required to create
> interoperable, high-level, useful metamodels.  You can't define a
> metamodel for 3D text adventures if you're constantly having to explain
> how a string is represented.
> 
> Anyway, that's what Prism is about.  I'm sorry I couldn't make it
> shorter, but to understand Prism, you really have to understand the
> theoretical underpinnings.  Otherwise all this stuff looks like a bunch
> of C structs tacked on to a sort of programmable yacc.  But once you
> look past the surface, I think you'll see a whole lot more.
> 
> Jim
> 
> 
> PS: Maneesh, I do appreciate your criticism.  It's easy, especially on a
> project like this one, for me to lose sight of reality.  So please,
> continue to pick holes in my arguments!
> 
> Thanks,
> Jim
> 
> 
> Prism is at http://www.teleport.com/~sphere
>