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.