Philosophical musings: interpreting models

Jim Little jiml@inconnect.com
Tue, 07 Sep 1999 00:02:26 -0600


Laurent Martelli wrote:
> 
> >>>>> "Jim" == Jim Little <jiml@inconnect.com> writes:
> 
>   Jim> So it's important to know the limitations of a program's
>   Jim> original metamodel.  And when modeling a new program, it's
>   Jim> important to specify as little as possible (while still
>   Jim> specifying everything necessary) so that metaprograms which
>   Jim> operate on the model may have as much flexibility as possible
>   Jim> to optomize the program for the user's current computing needs.
> 
> I fully agree. That's what I call abstraction. I believe this is the
> key to portability and reusability. I think it can be achieved by
> minimising the dependencies.

I also think this kind of abstraction can lead to better optomizing
compilers.  The higher the level of abstraction, the more the compiler
can "know" about the program, and thus the better job it can do of
optomization.

I would say that the key is not so much minimizing dependencies, though,
as it is using languages which provide high-level semantic constructs. 
I.e., the language should be capable of expressing your goals exactly. 
If your goal is to output 'hello world' and you don't care where, then
'PRINT STDERR "Hello, World!"' will work, but only 'OUTPUT "Hello,
World!"' exactly expresses your goals.

If the language allows you to describe your desires exactly, and your
desires are cross-platform, then the modeled program will be
cross-platform (assuming the right compilers are available).  On the
other hand, if you're using a language which doesn't allow you to
exactly express your desires, then you might have to translate those
desires into a form which isn't cross-platform.

The tricky part is finding languages with semantics which allow you to
exactly express your desires.  I think the key is domain-specific
languages rather than general-purpose languages.

Jim Little
jiml@inconnect.com