[comp.sys.apollo] Extending the DM / DSEE Benefits / Converting to DSEE

nazgul@apollo.UUCP (06/20/87)

Extending the DM

    J.W. Peterson states that he sent in a UCR complaining about the lack
of word wrap, extensibility, etc. in the DM two years ago and nothing ever 
happened.  From this he concludes that it's not worth complaining.  I beg
to differ.  We listen to complaints and we try to act on them.  Due to the
realities of software releases, schedules and the like we unfortunately can't
say much more than "we'll consider that" even if we *are* doing more.  I
will grant you that two years is a long time to wait - I've certainly been
itching for the changes myself.  As usual it has been a question of whether
to do the quick patch, or do it right.  Ideally we'd like to do both -one
for the short term, one for the long - but that simply takes up too many
people's time.  

So keep sending UCRs.  In fact I'll ask you one better.  If you have specific 
things you'd like to see Apollo do in the user environment arena, (e.g. 
windowing, key definitions, editors...), send me mail.  I'm not talking about 
bug reports or specific enhancement requests - those should be UCRs - but 
rather what you're ideal user environment would look like.  Do you want tiled 
windows?  Overlapping?   Psuedo-tiled (like the ones I recently posted)?  What 
kinds of things do you want to use keydefs for?  Would you like to have them 
more context senstive?  Bind them to specific programs?  (Actually even now you 
can bind them to specific streams, see pad_$def_pfk).  What's the ideal editor 
look like?  Multi-font?  Word-wrap?  Give me a list of what you'd like and
(importantly) prioritize it.

I'm not promising we'll do any of it, I'm certainly not promising that I'll
respond to any of it, but I *do* promise that it will get to the people who
are working on those issues and that it will be taken into account in what
ever work we do.  Remember, so long as we work in a vaccum the only thing you'll
get from us is what we *think* you want.  If you trust our guesses, don't
send us any information.

[Oh boy, now my mail box is in BIG trouble!]

Actually, if you could do me the favor of including the string "ue-request"
in the subject line I'd appreciate it, then at least I can have AZ store it
in a separate inbox.

------

DSEE Benefits
    A couple of things that I think DSEE has over RCS/Make.

    DSEE manages binaries.  This means that if I'm working on one part of
a system, and someone else is working on another, we can share binaries.
DSEE keeps track of what binaries have been built using what compiler options.
The model description tells it which options are critical and which are not,
so it knows whether or not you can use the result of someone elses build.
This is very nice on large projects when multiple people are working on
different branches of a few files, but need to share the rest.  Furthermore
you can tell DSEE whether or not the tools are critical, so if you get a
new compiler, or translator or whatever tool you are using, DSEE will know
whether it should recompile everything.

    DSEE can automatically perform actions when something happens (such as
the replacement of an item).  So you can tell it to watch a file for you
and tell you when it changes.

    DSEE supports threads.  These allow you to tell DSEE what versions of
what files to use when you build, and what options to use on what files
(either specifically or by wildcard).  For instance I often have a thread
that looks like this:

    -for %.c -reserved -use -O -g -T bsd4.2
    -reserved
    -for %.c -exact -use -O -T bsd4.2
    /nazgul -when_exists
    []

Or, in English:
    Compile reserved (checked out) files using -O, -g and a systype of bsd4.2.
    Use the reserved version of a file if it exists.
    For other files use exactly the flags -O and systype of bsd4.2
        (this ensures that all non-reserved files don't have debug flags on)
    IF there's a branch in my name use it.
    Otherwise take whatever you can get.

Threads allow you to do things like (as I just did now) tell DSEE that I want a 
different version of a header file and have it promptly know that as a result
it has to recompile five other programs that depend on that file.

    DSEE supports multiple builders.  For instance I have a version of the
ICON programming language under DSEE.  It consists of 4 libraries (insert
files, translator, linker, runtime) under control of a single dsee model.
There are about 80 files in all.  I'll start off a rebuild of everything
right now and see how long it takes.  This will take a little longer than
a normal build, since it purges the old builds in the process, but it should
still give you and idea of the advantage.

------

Converting to DSEE

    Converting *any* software system from one system of control to another
is going to be painful.  In going from Makefile control to DSEE I've generally
found it better just to start from scratch.  Make and DSEE have opposite views
of the world (consider "make foo.o" vs. "build foo.c" and you'll get an idea
of the difference).  I've written a shell script which runs in conjunction
with the DSEE make_model tool.  You run it over your .c and .h files and
it produces a DSEE model that's just about ready to run.  Once you've got
the model description out of the way converting to DSEE becomes *much* easier.
I will send the script and some rudimentary instructions (I haven't had time to 
write a man page for it) to Scott Turner for him to add to his Apollo archive.


                                                    Kee Hinckley

Oh yes!  The DSEE build time?

    DSEE> sh date
    Sat Jun 20 16:14:25 EDT 1987
    DSEE> build -force_all
    ...
    Build completed.
    
       95 builds were required,
       all were completed successfully.
    
    DSEE> sh date
    Sat Jun 20 16:30:27 EDT 1987
    
16 minutes.

-- 
UUCP: {mit-erl,yale,uw-beaver}!apollo!nazgul  ARPA: apollo!nazgul@eddie.mit.edu
I'm not sure which upsets me more; that people are so unwilling to accept
responsibility for their own actions, or that they are so eager to regulate 
everyone else's.