[comp.software-eng] VMS vs. UNIX s/w development tools - query

rayl@bionov.UUCP (Ray Lillard) (03/29/89)

I am a software consultant working with a client company with lots
of code developed for RSX-11.  We are casting about for a new
system (hardware and software) to replace the existing imbedded
target system.  At the same time we are also addressing the
issue of a development system.  My personal favorite is 
of course, UNIX.  VMS is the favorite of some permanent staff
members.  I have extolled the virtues of the UNIX software 
environment and have been told that VMS has tools which are
equally good. (They haven't been using them and the results
are obvious.)  What I have been shown of VMS doesn't begin
to cover the UNIX tools set.  It seems that the concept of
a regular expression is almost completely missing from VMS.

The question:
	Are tools available under VMS which are as powerful
	as YACC, LEX, AWK, SCCS, grep, make, etc... to name
	a few.

Please email responses to me at this account or post to one
of the newsgroups other than comp.os.vms.  This machine doesn't
carry it.  Also, please be rational, I don't wish to start a
VMS bashing session.  Thanks to all who respond.

todd@stiatl.UUCP (Todd Merriman) (03/29/89)

In article <401@bionov.UUCP> rayl@bionov.UUCP (Ray Lillard) writes:
>I am a software consultant working with a client company with lots
>of code developed for RSX-11.  We are casting about for a new
>system (hardware and software) to replace the existing imbedded
>target system.........

I do cross development between Unix, VMS, and MSDOS; and I have
a few opinions on the subject.  I consider Unix to be a superior
*development* environment, but VMS to be a superior *production*
environment.  The variety of tools and power of the Shell make Unix
an ideal choice for technical types and programmers.  The 
sophistication of VMS, combined with its excellent documentation 
and reliability make it the clear winner in production.

   ...!gatech!stiatl!todd
   Todd Merriman * 404-377-TOFU * Atlanta, GA
   Note:  I have no idea what my employer's views on the subject are.

piet@cs.ruu.nl (Piet van Oostrum) (03/29/89)

In article <401@bionov.UUCP>, rayl@bionov (Ray Lillard) writes:

	    I have extolled the virtues of the UNIX software 
 `environment and have been told that .....

My question is: What do people generally consider to be a ``software
development environment''. Is it something like the collection of tools
that Unix has or is there much more in it, for example tools for the
specification and design parts of the software life cycle.

What experience do you have with additional tools in the Unix environment?
-- 
Piet van Oostrum, Dept of Computer Science, University of Utrecht
Padualaan 14, P.O. Box 80.089, 3508 TB Utrecht, The Netherlands
Telephone: +31-30-531806. piet@cs.ruu.nl (mcvax!hp4nl!ruuinf!piet)

cberg@leadsv.UUCP (Charles R Berg) (03/30/89)

In article <401@bionov.UUCP> rayl@bionov.UUCP (Ray Lillard) writes:
>At the same time we are also addressing the
>issue of a development system.  My personal favorite is 
>of course, UNIX.  VMS is the favorite of some permanent staff
>members.

I am also a consultant, and have participated in developing several million
lines of code on various projects, for various companies, all on VMS or RSX.
(I have also developed a lot of code under UNIX, but nowhere near as much.)

Whatever you do, don't encourage your client to work across multiple
environments!  A current client is developing 500,000 lines of code using SUNs,
Masscomps, VAX's running UNIX, and primarily on VAX's running VMS.  I just saw
an IBM PC slip in here, too.  They are using three different 'c' compilers, 
we're moving executables to our target environment in a.out and S-records, and
beleive me, version control has been a nightmare!!!

>What I have been shown of VMS doesn't begin
>to cover the UNIX tools set.  It seems that the concept of
>a regular expression is almost completely missing from VMS.
>
>The question:
>	Are tools available under VMS which are as powerful
>	as YACC, LEX, AWK, SCCS, grep, make, etc... to name
>	a few.

First of all, VMS does not have all the tools available under UNIX, but I've
never lacked for a NECESSARY tool on VMS.

Second, to respond to your admittedly short list:
I've never had the need for YACC, LEX or AWK.  DEC supplies CMS as an
alternative for SCCS, and third party vendors provide many other systems for
both VMS and UNIX.  DEC also provides MMS as an alternative for MAKE, and has
the SEARCH command instead of GREP (although yes, it does not support the UNIX
concept of regular expression).

Finally, if you really must have the UNIX tool environment, there are several
sources of UNIX tools (including DECUS) that sit on top of VMS.  I've used a
few of these toolboxes and they're quite satisfactory, IMO.  Your client sounds
like they've run a DEC shop for awhile.  I personally wouldn't try to change
them.  You can get the job done well in any environment you want, if you really
want to get the job done well.

Chuck

gm@mitisft.Convergent.COM (G.M. Harding) (03/31/89)

An Open Letter to Ray Lillard:

     I've had a fair amount of development experience in both
the Unix and VMS environments. Like you, I prefer Unix. However,
VMS has some nice things about it, particularly its debugger
system. Many of the tools you mention are written in reasonably
portable C and can be (actually, have been) ported to VMS. I have
personally ported yacc, but since that's owned by AT&T you may
find it difficult to do likewise. Take a look at "bison" (from the
Free Software Foundation, I believe) which is supposed to be fully
yacc-compatible. For scanners, check out "flex," which was posted
in comp.sources.unix a while back (or write Rich Salz at uunet for
a copy).

     Yes, RE's are mostly missing from the VMS user interface, and
almost entirely missing from the VMS utilities, and that's a shame.
You just don't realize what RE's can do for you until you use them.
(On the other hand, VMS's "grep" equivalent has a contextual option
which displays not only the matched lines, but N lines before and
after--very nice, and something I've seen only on a couple of Unix
systems.) The VMS counterparts of "sccs" and "make" are serviceable
(though the last time I used CMS, years ago, it ran slower than a
slug; I hope they've improved it by now).

     The problem with VMS isn't so much in the tools per se, but
in the lack of certain elegant concepts to which Unix programmers
are accustomed. There's only a limited notion of stdin/stdout, and
no notion whatsoever of a pipe. Version-control numbers embedded in
the OS code and actually used as part of the file name--obscene!
(It violates the fundamental, Unix-inspired concept of a file:
a file is nothing more than an ordered collection of data, to which
the system attaches no special significance other than ordering.
Besides, the old versions of files accumulate and moulder unless
you take special steps to exterminate them. I had one colleague
who actually had FILE.EXT;1001 in his directory, with all of the
previous versions as well, and didn't realize that the sysadmin's
desperate email pleadings for cleanup applied to him. We finally
got the guy fired.)

     Because pipes on VMS are a pipe dream, forget about handy
things like "sed" and "tr". This means that VMS shell scripts
(DCL procedures, I think they call them) are often more cumber-
some than equivalent Unix scripts, due to the constant need to
open temp files. (DCL scripts do allow goto's, which is a mixed
blessing.)

     Todd Merriman's statement, to the effect that Unix is a
superior development environment but VMS is a superior production
environment, has been voiced before. It's a catchy thing to say,
but I'm not so sure I agree. If anything, I'd suggest that Unix
is VASTLY superior as a development environment (except for the
debugger), while VMS is at best slightly superior as a production
environment. "Sccs," "make," "ar," et. al. are no slouches. DEC's
documentation is unquestionably superb, and always has been. But
have you seen some of the glossy stuff coming out of Summit lately?
AT&T is quickly catching up in the documentation department.

     Whatever you do, forget that Chuck Berg even mentioned Unix-
like interfaces that sit on top of VMS. Pick one or pick the other,
but don't shackle yourself to an interface with all the drawbacks
of both systems and none of the advantages of either. I admit I'm
biased in the matter, having spent the better part of a year trying
to live with Eunice. It finally got to the point where I didn't even
want to get out of bed and go to the office. I was that depressed.

     I agree with Chuck that you shouldn't encourage your client to
work across multiple environments, but human nature being what it is,
they may want to, unless they're engineers themselves and understand
concepts like engineering elegance and cleanliness of design. If their
orientation is toward business issues, you can bet they'll want to
compromise, and sling around lots of "best of both worlds" nonsense.
If you can't avoid mixing Unix and VMS in your computing environment,
at least insist on coding in C. Unix programs written in C with a
reasonable amount of concern for portability issues will generally
port to VMS without much grief. A few defensive-programming caveats,
however:

     * Unix thinks that a program which returns zero to the invocation
       environment executed successfully, and that a program which
       returns nonzero to the invocation environment executed with an
       error of some kind. The VMS convention is almost exactly the
       opposite of this. At least the VMS preprocessor has the string
       "VMS" as a built-in, so you can write:

       #ifndef VMS
       #define GOODEXIT 0
       #define BADEXIT 1
       #else
       #define GOODEXIT 1
       #define BADEXIT 0
       #endif

     * The !@$*#%! VMS C library does not have an unlink() call.
       Instead, they offer delete(), which does basically the same
       thing. So:

       #ifdef VMS
       #define unlink delete
       #endif

     * Remember that you can't count on redirecting stdio. If you
       want to have your program read input from, or send output to,
       a file, allow for optional input and output file names on the
       command line.

     * Argv[] may not point to the types of strings you expect.
       The only way to find out for sure is to look at them.

     * VMS text files typically use CR/LF as a line delimiter, and
       the standard library routines deal with this fact in various
       non-Unix ways. RTFM. Also, since the VAX architecture is based
       on 32-bit ints, it is incompatible with some PC architectures.
       Be ESPECIALLY careful with the portability implications of
       right shifts.

     You say that VMS is the favorite of some permanent staff. If
these people have tried Unix and still feel that way, you're sunk.
But if their problem is ignorance, as opposed to stupidity, insist
to management that the VMS heads write a few production programs
on Unix. They probably won't be so obdurate afterwards.

--GMH
-- 
                  * * * * * * * * * * * * * * * * * *
                  * All of your opinions are sound. *
                  *     That's all--just sound.     *
                  * * * * * * * * * * * * * * * * * *

eversoler@hw-allen.UUCP (Rick Eversole) (03/31/89)

In article <401@bionov.UUCP>, rayl@bionov.UUCP (Ray Lillard) writes:
> I have extolled the virtues of the UNIX software 
> environment and have been told that VMS has tools which are
> equally good. (They haven't been using them and the results
> are obvious.)  What I have been shown of VMS doesn't begin
> to cover the UNIX tools set.  It seems that the concept of
> a regular expression is almost completely missing from VMS.
> 
> The question:
> 	Are tools available under VMS which are as powerful
> 	as YACC, LEX, AWK, SCCS, grep, make, etc... to name
> 	a few.


VMS has tools that can replace SCCS and make. The VMS debugger is one of the
better debuggers I've used. It is still superior the Microsoft Codeview
debugger on the PC.

MMS (module management system) is analogous to make. 
CMS (code management system) is anlogous to SCCS.

Also interesting in VMS are SCAN (a lexical analysis language {I've
never used it}) and the performance analizer (I can not remember 
real name of tool but it is a profiler)

As for YACC, LEX, GREP, and AWK you have a couple of choices :
	1) Purchase EUNICE from Wollongong and run a UNIX shell
		on your VMS system.
	2) Obtain the GNU versions of these excellent developement tools.

I used EUNICE under VMS for about 3 years. It is very close to a complete
implementation of UNIX. We've had trouble with cron, uucp, and the 
berkley series of TCP/IP commands (rsh and rlogin). yacc, lex, awk,
sed, nroff, grep, fgrep, egrep, cc and lint all work great!

You can get LINT for VMS from the Free Software Foundation (GNU) or else
from IPT (Information Processing Technologies).

IPT's LINT-PLUS is very good. It also can be purchased to check FORTRAN
(I've no experience with the Fortran version). LINT-PLUS catches everything
that UNIX LINT does plus more. LINT-PLUS has a whole lot of options to
control the things it reports on. I've used LINT-PLUS for 2 years and it
has saved me on several occassions. LINT-PLUS messages are a whole lot less
cryptic than UNIX LINT. For the first year I would use LINT-PLUS until I had
eliminated all the messages. Then I would run EUNICE's UNIX LINT (nothing
new would show up). I finally started using only LINT-PLUS.

Now, I'm in an Apollo environment and LINT-PLUS is not readily available here.
I have to use UNIX LINT..... oh well ....

VMS does not really have pipes and that can be a real pain !

It aint' cheap but EUNICE on top of VMS will give you access to the best of
both worlds. While in EUNICE you can use most VMS commands. Many can even
be put in a pipe. This little feature has been very helpful on several
occassions. Most of the pipe work I did in EUNICE tended to be a very
one-shot deal. 



----------------------------------------------------------------
Rick Eversole                  AG Communication Systems

	# No association with IPT or DEC
	# The views expressed are soley my own and not those of the
	#  company. 
	# Opposing views are welcome.

 UUNET!zardoz!hrc!gtephx!eversoler

sommar@enea.se (Erland Sommarskog) (04/01/89)

G.M. Harding (gm@mitisft.Convergent.COM) writes:
>Version-control numbers embedded in
>the OS code and actually used as part of the file name--obscene!
>(It violates the fundamental, Unix-inspired concept of a file:
>a file is nothing more than an ordered collection of data, to which
>the system attaches no special significance other than ordering.

With the risk of turing this into an OS war, I must object here.
I fail to see what fundamental concept being violated, all I 
know that the multiple versions helps me sleep well at night.
Just today I happenbed to press the wrong key in the editor and 
believing I was reading another file, I was actually writing the current
file to the name of the other. (This is my own editor interface,
so don't blame VMS). No problem, as soon as I had seen it. Just
spawn out, and delete the newly-written file and the correct file
was still there. On Unix it would have been long gone. 
  VMS may be violating some theoretical principal, but it gives
you safety.

>Besides, the old versions of files accumulate and moulder unless
>you take special steps to exterminate them. I had one colleague
>who actually had FILE.EXT;1001 in his directory, with all of the
>previous versions as well, and didn't realize that the sysadmin's
>desperate email pleadings for cleanup applied to him. We finally
>got the guy fired.)

Which just goes to show that on any system you're on, you're on
lose ground if you refuse to read the manual. PURGE is an essential
command on VMS, as is SET DIRECTORY/VERION_LIMIT. If you think
that more than one version of a file is a crime, just set the
volume limit for all your directories to 1, and you have what you
want.
-- 
Erland Sommarskog - ENEA Data, Stockholm - sommar@enea.se
I used to say "It could have been worse, it could have been Pepsi",
then I drank a Diet Coke...

session@uncw.UUCP (Zack Sessions) (04/03/89)

As far as grep and awk are concerned, grep is handled by the DCL Command
SEARCH. And the functionality of awk, though in no way similar, can be
done with the optional layered product, Datatrieve.

Zack Sessions

rickc@pogo.WV.TEK.COM (Rick Clements) (04/04/89)

In article <600@mitisft.Convergent.COM> gm@mitisft.Convergent.COM (G.M. Harding) writes:
}     * Unix thinks that a program which returns zero to the invocation
}       environment executed successfully, and that a program which
}       returns nonzero to the invocation environment executed with an
}       error of some kind. The VMS convention is almost exactly the
}       opposite of this. At least the VMS preprocessor has the string
}       "VMS" as a built-in, so you can write:

}       #ifndef VMS
}       #define GOODEXIT 0
}       #define BADEXIT 1
}       #else
}       #define GOODEXIT 1
}       #define BADEXIT 0
}       #endif

It has been a few years since I have worked on VMS.  But, doesn't 0 indicate
not finished to VMS?  A value greater than one indicates an error.
Passing a 0 back from a VMS driver will crash your program (80% of the
time), work ok (15%) and crash the system (5%).  These are estimates
based on the experience of my self on others at a previous company.

}     * VMS text files typically use CR/LF as a line delimiter, and
}       the standard library routines deal with this fact in various
}       non-Unix ways.
    
File types are a problem in VMS.  There are a lot of them.  The default
type for a C program is different than the default type for FORTRAN.

------
All opinions are my fault.
-----
-- 
Rick Clements (RickC@pogo.WV.TEK.COM)

peter@ficc.uu.net (Peter da Silva) (04/04/89)

On file versions:

In article <4401@enea.se>, sommar@enea.se (Erland Sommarskog) writes:
>   VMS may be violating some theoretical principal, but it gives
> you safety.

In practice it gives you overflowing disks. I've used VMS, and I've found
that if you don't have lots of money to spend on extra disk drives you're
always PURGEing stuff.

What's wrong with just making the editor keep a .bak file? Or do you REALLY
want to keep all those old .EXE and .OBJ files?
-- 
Peter da Silva, Xenix Support, Ferranti International Controls Corporation.

Business: uunet.uu.net!ficc!peter, peter@ficc.uu.net, +1 713 274 5180.
Personal: ...!texbell!sugar!peter, peter@sugar.hackercorp.com.

phil@dhw68k.cts.com (Phil Suematsu) (04/05/89)

In article <401@bionov.UUCP> rayl@bionov.UUCP (Ray Lillard) writes:
>          ...  What I have been shown of VMS doesn't begin
>to cover the UNIX tools set.  It seems that the concept of
>a regular expression is almost completely missing from VMS.
>
>The question:
>	Are tools available under VMS which are as powerful
>	as YACC, LEX, AWK, SCCS, grep, make, etc... to name
>	a few.
>

I use the GNU Yacc, GNU Lex, DECUS grep, and a public-domain
make for software development under VAX/VMS.  The GNU software
has distribution restrictions.  If you distribute a binary
that includes any of GNU's code, you have to distribute the
source to generate the binary.

DEC distributes a source control system called CMS and a 'make'
type program called MMS.  VMS has routines for terminal independent 
I/O (what you might use curses for under Unix).

I also have the Zmodem file transfer programs sz and rz and the
LZW compress programs from Unix working under VMS.  I can't easily 
distribute things on tape, but I can easily distribute source code 
by MS-DOS diskettes if you are interested in the utilities I have 
that may be freely distributed (Yacc, Lex, Grep, Make).  In summary, 
yes, you can have your Make and EDT it too.

-----------------+------------------------------------------------------
  Phil Suematsu  | InterNet: phil@dhw68k.cts.com
Optical Research | or  uucp: ...{trwrb,hplabs}!felix!dhw68k!phil
   Associates    | or  Work: (818) 795-9101  or  Home: (714) 633-0876
-- 
-----------------+------------------------------------------------------
  Phil Suematsu  | InterNet: phil@dhw68k.cts.com or phil@turnkey.tcc.com
Optical Research | or  uucp: ...{trwrb,hplabs}!felix!dhw68k!phil
   Associates    | or  Work: (818) 795-9101  or  Home: (714) 633-0876

gm@mitisft.Convergent.COM (G.M. Harding) (04/07/89)

In article <7036@pogo.WV.TEK.COM> rickc@pogo.WV.TEK.COM (Rick Clements) writes:

> But, doesn't 0 indicate
> not finished to VMS?  A value greater than one indicates an error.
> Passing a 0 back from a VMS driver will crash your program (80% of the
> time), work ok (15%) and crash the system (5%).  These are estimates
> based on the experience of my self on others at a previous company.

     The last time I used VMS (4.3? 4.4? Am I thinking of some other
software product?) code ported from Unix with a standard "return (0)"
at the end of main() would cause VMS to display a particularly
unaesthetic error message on the screen at process termination.
The system did not, however, crash or otherwise behave abnormally.
Perhaps zero has the connotation you mention at the driver level,
but I don't think such is the case at the application level. The
way I discovered what was happening was peculiar: I noticed that
the VMS termination-error message went away if my program had an
internal error! In that case, it would return 1 from main(), which
VMS thought was just fine.

     The Unix convention on process-termination values makes a lot
of sense. Think about it: There are many flavors of failure, but
there's only one variety of success, namely, the complete kind.
So, the Unix shell correlates the process-termination value with
the question: Were there errors? If the termination value is
logically TRUE, the answer is "yes"; otherwise, "no."

> File types are a problem in VMS. There are a lot of them. The default
> type for a C program is different than the default type for FORTRAN.

     This underscores the point I was making in my original reply
to the fellow who asked for an OS comparison. The system has no
business knowing (or thinking it knows) what's in my files. When
OS writers try to do cute things like that, they throw device
independence out the window. (Notice that nobody has ever accused
VMS of being based on the spirit of device independence. Ever try
to mount a tape on VMS?)
-- 
G. M. Harding                      /* * * * * * * * * * * * * * * * * * * * * *
POB 4142 Santa Clara CA 95054       * Opinions expressed on Usenet are sound. *
Work: (408)-435-3294                *         That's all--just sound.         *
...{uunet,pyramid}!ctnews!gm        * * * * * * * * * * * * * * * * * * * * * */

bobd@zaphod.UUCP (Bob Dalgleish) (04/12/89)

The major difference between Un*x and V*S is that it is EASY to write
your own tools in Un*x.  The use of pipes means that homomorphic
transformations can be applied one after the other until you get the
desired result: read this as functional decomposition.  When pipes are
expensive, inconvenient, or awkward to use, the software developers
spend less time writing simple tools to help them in their work and
more time doing things by hand or using the supplied tools.

There is no argument that the programs available on V*S are better or
worse than those on Un*x.  The argument is whether it is easy to put
several tools together to make one that does the job that *I* want done
right now.  Remember, Man is the tool-MAKING animal.  Many other
animals use tools (birds, monkeys, otters, etc.).  Spending a small
time to put tools into one's bag of tricks makes one much more
effective as a software developer.

The shells that run on V*S cannot hide all of the differences.  The
architecture of V*S assumes monolithic applications with well-defined
interfaces that start up, run for a (relatively) long time, and get
ready for the next request; Un*x assumes small applications that come
and go as they please, creating and destroying files readily.
Consequently, Un*x shells run slowly and awkwardly, destroying any
advantage that might have been gained by making your own tools.  Any
argument that writing a C program to more efficiently do the job is
absurd; the expensive part of the process is the programmer time, not
the machine time.  It takes me 5 minutes to design, implement and test a
simple three stage shell script to do some straight-forward analysis; it
takes me one day to design, write, and test the same code in C.  With
that trade-off, which do you think I would prefer?  How about you?

-- 
--[ It is good to be back in the saddle ]--
Bob Dalgleish		bobd@zaphod.UUCP