janney@unm-cvax.UUCP (08/07/84)
I doubt if we will get a "long and fruitless debate" over Pascal vs.
Modula-2. Modula-2 is too clearly an improvement over Pascal. Even
the "advantages" of Pascal can be considered disadvantages, as they
make the language larger and more difficult to implement. Let's talk
about a more interesting comparison: Modula-2 vs. C. I'll make some
initial comments to get things going.
Advantages of Modula-2
Clean, consistent support for the notion of data types and data
structures. This is probably the biggest advantage. Type
declarations are clear and readable even for complicated types,
whereas even simple declarations in C take some getting used to.
Arrays and records are passed to procedures in the same way.
You don't have to worry about how to declare NULL.
Many aspects of program correctness can be checked by the
compiler, thus eliminating whole classes of errors. The
separation of definition and implementation modules makes
it easy to do checking across files. This, and the whole
concept of modules, should be most valuable in very large
projects.
Advantages of C
Unquestionably, the greatest advantage of C is its unification
of pointers and arrays, and the ability to do address
arithmetic in a simple and well-defined way. Properly used,
this flexibility can greatly simplify many programs. It
allows a natural, useful implementation of strings without
further extension of the language.
Global data, in particular arrays, can be initialised at load
time--in Modula-2, all initialization must be done with executable
code. This is particularly useful in table-driven software
like the output of yacc or lex.
Having a built-in, standard (well, mostly standard) preprocessor
can be really nice. It's nice to be able to give a complicated
expression a symbolic name without incurring the overhead of a
function call. On the other hand, file inclusion wouldn't be
too useful in Modula-2: that's what the modules are for.
A really nifty for loop, and the ability to break out of any
kind of loop.
Some differences that are arguable are runtime array bounds checking,
sets vs. explicit bit manipulation, and of course syntax. I claim that
the "ease of typing" argument is a bogey-man: when I edit a Pascal program,
I have vi set up so that when I type ^B I get begin, ^E end, ^P procedure,
and so on. This should be possible with any good screen editor.
Hoping to see some more discussion,
Jim Janney
{{ucbvax,gatech}!unmvax, {purdue,lbl-csam,ihnp4!cmcl2}!lanl-a}!unm-cvax!janneyprl@murdu.OZ (Peter Lamb) (08/15/84)
Most things in Modula 2 are safer than C, but I think that the ADDRESS operator returning POINTER TO WORD, rather than POINTER TO <object_type> as happens in C is a bit of a grot. If POINTER TO WORD was what you *REALLY* wanted, then it can be coerced that way. The only other aggravation is the persistance of the ban on string constants of length 1. Why is it that Pascal and MODULA both fail to provide a syntax for this object? The problem is that '' and 'ab' are ARRAY OF CHAR, but 'a' is CHAR, ie, trying to use the same syntax for two very different objects.
rcd@opus.UUCP (Dick Dunn) (08/17/84)
>Re: Modula-2 and Initialization. > >A highly optimizing complier could take most of the statements in a >module's initialization block, and convert them into load time data, as >opposed to run-time initialization code. I can't remember anything in >the language definition that would prevent this. While this is a valid argument for an existing language, it always pains me to see the following sequence: - language design omits a necessary (or commonly useful) feature [case at hand: variable initialization] - user is forced to work around lack of the feature [substitute assignment statements] - compiler-writer has to figure out the optimization step to recognize the now-disguised feature and implement it [find a certain class of assignments and turn them into load-time initializations] It's painful because both the user and implementor of the language recognize a mechanism that the designer has ignored. -- Dick Dunn {hao,ucbvax,allegra}!nbires!rcd (303)444-5710 x3086 ...Never attribute to malice what can be explained by stupidity.
tower@inmet.UUCP (08/21/84)
Re: Modula-2 and Initialization.
A highly optimizing complier could take most of the statements in a
module's initialization block, and convert them into load time data, as
opposed to run-time initialization code. I can't remember anything in
the language definition that would prevent this.
I don't know of an implementation that does this yet
but it is quite do-able!
-len tower UUCP: {ihnp4,harpo}!inmet!tower
Intermetrics, Inc. INTERNET: ima!inmet!tower@CCA-UNIX.ARPA
733 Concord Ave.
Cambridge, MA 02138 (617) 661-1840
U.S.A.