Prism criticism

Jim Little jiml@inconnect.com
Sun, 13 Jun 1999 09:15:35 -0600


"Thomas M. Farrelly" wrote:
> 
> James Little wrote:
> [ prism ]
> 
> I think I follow your idea. I just use a different terminology. I.e. in
> an oo-context you would say that a class specifies a consept and the
> protocol of the class specifies the language.

I think you could look at it that way.  I'm a little dubious about using
OO terminology because Prism is definitely not OO.  But I think I see
where you're coming from.

> Just two questions:
> 
> How do you write the meta-models, languages? In other words what is the
> language of the meta-meta model?

Well, I'm not sure if you got this far in the spec, but programs are
represented internally in Prism with three basic "atoms" -- _Bit,
_Stream, _Map.  I call these representations of programs "models."  The
internal format is important because mini-compilers interoperate by
manipulating these models, not source code.

So a metamodel doesn't define a "language" per se.  It defines how a
program (or other concept) may be modeled.  It does so by describing a
set of models and then using natural language to define how each model
is interpreted.  It's not as complex as it sounds... check out my web
site (http://www.teleport.com/~sphere) for some simple examples for
representing strings, integers, etc.  (They're all linked from the front
page.  Look for "Xxx Metamodel Specification.")

> And what do you do when languages conflict? I.e. when I reserve the
> notation ' ${foo.foo} ', or ' ** use ... ** ' in own little sublanguage.

I haven't figured this part out yet.  :)  I've got some ideas for a
'universal language' which will be extensible with arbitrary
sub-languages.   I think it will contain a lot of meta-syntax allowing
the programmer to define how it is parsed.  (I.e., "${...} constructs
should be parsed into a FOO model by the Prism/FOO parser...")

> Also, when going about the problem as you do, i.e. code within code and
> languages within languages, there is an accute need to clearly define
> the order of evaluation. For example:
[example deleted]

Good points.  As I've said, I haven't really determined how I'm going to
make the languages interact.  At this time, I'm focusing on making
metamodels interact.  (Well, I will be once the Prism compiler is done,
which will be in the next month or so.)  If I can get that solved, then
I'll have a solid foundation, and a little bit of trial and error with
the languages is okay.

> I haven't gone into to much detail on the Prism specification, so this

The Prism specification doesn't really say anything about languages. 
:)  Just that the Prism compiler has to be able to read in text files
and represent them in terms of such-and-such metamodel.  Once they're
inside the compiler, transforming them to "actual" models is the job of
a mini-compiler, or mini-parser, really.  So we've got free reign in
terms of how we deal with languages, including the possibility of
multiple 'universal' languages.  So if I come up with a solution, then
you come up with a better one, both can be used.  :)

Good comments all around... thanks!

Jim

PS: I'm going on vacation, so if you respond I won't be able to answer
for about 5-7 days.