Favorite operating systems query (UNIX vs VMS flaming!!!)

Jem Taylor taylor at glasgow.glasgow.UUCP
Mon Aug 11 07:13:46 AEST 1986

In article <859 at kbsvax.steinmetz.UUCP> davidsen at kbsvax.UUCP (Davidsen) writes:
>In article <909 at rti-sel.UUCP> rcb at rti-sel.UUCP (Random) writes:
>>In article <1320 at psivax.UUCP> friesen at psivax.UUCP (Stanley Friesen) writes:
>>>In article <873 at rti-sel.UUCP> rcb at rti-sel.UUCP (Random) writes:
>	the original pro-VMS statement
>>>>No. VMS programs will not let you invoke them with bogus arguments. Since
>>>>the arguments are parsed by DCL before the program is invoked, if you give
>>>>too many parameters or an unknown switch DCL will reject it with an error
>>>>message that points out the specific problem.
>overkill flame, the poster didn't say (or, could it be, didn't know)
>that the user can define his/her commands with a mechanism similar to
>an alias, and get no parameter checking at all. It can even be put in a
>startup file and done at login.
>Examples: (! starts comments)
>  $ check:==$usr$disk:[user.bin]check.exe ! binary executable image
>  $ redo:==@usr$disk:[user.bin]redo.com   ! DCL (shell) command file
>     |   | |________________________ $ for binary, @ for DCL shell
>     |   |__________________________ mystic assignment operator
>     |______________________________ symbol now defined as valid command
mystic, yes, but powerful. And much of unix is mystic of course ...

	= and := are 'local' symbol assigns - like 'set'
	== and :== are 'global' - like setenv

(except that unlike set and setenv, these things are _also_ usable as aliases
as in csh )

	the ':' suppresses symbol substition on the RHS unless the symbol is
	explicitly quoted.
	A == B
	A:== 'B'
are equivalent. If you don't use ':', you need '"' around strings. The example
here sets C to a string, rather than A to the VALUE OF B as above :

	C == "text"
	C :== text

Like everything, once you are used to it, it's fine.

>I hope this has spread some rational light on the subject. The ability
>to have the arguments parsed is very useful, but time consuming for the
>system operator. The method described above provides no checking, but
>is easily doable by the user. It is far easier to write commands
>knowing that they will never get bad arguments than to put recovery
>code in each and every program. VMS provides both.
It's NOT time consuming for the operator. The .CLD (Command language definition)
of a command is written by the author at the same time as the command. I write
my .CLD first, then the .HLP ( Help ) input for the LIBRARY/HELP command, and
finally code the command itself. This ensures that the command interface is
properly defined and that the help page is true; finally the code has to
conform to the definition.
The .HLP file is incorporated into the system help library at installation of
the command, and the .CLD is incorporated into the system command table at
the same time - once only. This is akin to putting the files into /bin and
/usr/man (or wherever) - which always strikes me as rather ad hoc, the set
of available commands being a one-to-one mapping to the contents of certain
directories of the filestore.

One very powerful aspect of .CLD which no-one mentions is the 'image' keyword,
which defines where the executable image is to be found. If no image is
is assumed, but the file can be put anywhere and need not have the same name
as the command.
Even more powerful is the use in this example:

define verb mycommand
	image	userdisk:[mydir]mycommand1.exe
	qualifier	special	syntax=otherformat

define syntax otherformat
	image	otherdisk:[mydir]mycommand2.exe

with this definition, 'myco' (DCL supports unique truncation of the command
verb) will invoke the image mycommand1, but 'mycom/spe' enforces the alternate
syntax of the command and invokes a different image. This means that a number
of different programs can be given the same name, as in DEFINE (define a
logical name for a device), DEFINE/KEY (redefine the keyboard) etc, but invoke
unrelated images. I have used this mechanism to support the use of two images
with common code, one small and fast for the common options, the other more
powerful but larger and slower. Users need not know that they are using 
different images, and do not need to remember which of 'prog', 'xprog' or
'nprog3' they should be using this week.

>Please don't count me as pro-VMS, I have used it since we got our first
>VAX (I believe it was S/N < 30) and still only consider it acceptable.
>I find the UNIX interface more convenient and the response far better
>for small programs due to the overhead of process start in VMS.
>Flamers, please MEASURE the overhead for UNIX and VMS on similar
>machines (in cpu or disk access) before rebutting this.

In my experience of VMS 782's and 785's versus Unix 750's and 780's, I find
the above to be true ( SPAWN takes an age in VMS ), but the VMS systems
seem to degrade more gracefully when too many users are logged on. The Unix
system seems to give up completely when overloaded. Obviously page and swap
space tuning and the myriad sysgen parameters under VMS give a diligent
system manager more scope to fit the machine to the performance demanded of

-Jem.	I'm very happy with my 42nix WCW MG-1 workstation - thou' it did
crash completely the other day when I put 25+ clocks on the screen, all with
the second hand moving, and tried to move them around *fast*.



JANET:   taylor at uk.ac.glasgow.cs                 -o     Jemima
USENET:  {ukc,ucl-cs}!cs.glasgow.ac.uk!taylor     (=-)   Puddleduck
ARPANET: taylor%cs.glasgow.ac.uk at ucl-cs.arpa
Phone:   +44 (0)41 339-8855 extn. 6054
Mail:    J.A.Taylor, Computer Science, 17 Lilybank Gardens, GB-GLASGOW G12 8QQ

More information about the Comp.org.usenix mailing list