[comp.lang.misc] assembler v. HLL

cik@l.cc.purdue.edu (Herman Rubin) (12/19/86)

As a user having great difficulties producing efficient programs,
I must reject both alternatives presented.  One purpose of any
language, operating system, etc., must be to efficiently use the
hardware capabilities.  I have no difficulty in deciding quickly
which machine operations to use, how to use registers, and other
"goodies" which I find the HLL's not even to have the vocabulary
to describe.  The assemblers, on the other hand, have kept the ease
of parsing which was necessary 35 years ago, which makes it difficult
to write in them.

  What is needed is a semi-portable "language" or macro system
in which at least the usual constructs are easy to write, e. g.,
I want to write  "x = y - z", assuming that is available as a
hardware instruction, in that manner, rather than "sub?? a, b, c",
where ?? depends on some designer's fancy, and a, b, and c are
x, y, z in some order.  I may wish to override types, in which 
case I may have to use, say, "x =.t y - z".  I also would like
to be able to define macros of the same ilk.

   A programming tool of this type would have much of the readability,
ease of programming, and semi-portability of high level languages,
and have the full efficiency of assembler.  I have produced programs
to produce floating-point numbers in which the major operations are
shifts, masks, and conditional transfers on bits--try that in your
HLL to get any speed.  (C fails on the bit transfers as well as many
other points, but is better than the others.)  Remember that the
guru producing the HLL probably has no idea of what you or I can
think of with the hardware.

   I firmly believe that anyone capable of understanding what a
computer does will find it easy to understand machine language if
it presented with understanding rather than as a totally disjointed
collection of ideographs.  Since it is much more functional than
the HLL's, I find it easier to learn the machine architectures of
several machines (not the assemblers) rather than the conventions
of one HLL.  A good programmer should know when to use totally
different algorithms on different machines.

   Also, one should realize that, as opposed to 30 years ago, transfers
and subroutine calls have become expensive.  I have no trouble in
directly writing non-structured code which is as easy to follow as
any structured HLL code, given the above tools, which I believe would
not be too difficult to produce.

    Also, languages like FORTRAN and C are designed mainly for 
mathematical purposes.  Mathematical notation was not arrived at
by fiat; most mathematicians who wish to use the hardware operation
"and not" will use the symbol "backslash", which most HLL's will
not allow, and similarly for other Boolean operations.

    Let us produce compilers and languages that make use of the natural
powers of computers and of the human mind, instead of stifling both.

-- 
(Usual disclaimer line.)
Herman Rubin, Dept. of Statistics, Purdue Univ., West Lafayette IN47907
Phone: (317)494-6054
(decvax,ihnp4,uiucdcs)!pur-ee!stat-l!cik
(decwrl,hplabs,ucbvax)!purdue!stat-l!cik
hrubin@l.cc.purdue.edu

rentsch@unc.UUCP (Tim Rentsch) (12/29/86)

In article <483@l.cc.purdue.edu> cik@l.cc.purdue.edu (Herman Rubin) writes:
>    Also, one should realize that, as opposed to 30 years ago, transfers
> and subroutine calls have become expensive.

Now, wait a minute.  That statement is misleading if not downright
false.

In the first place, subroutine calls (and transfers) have gotten
faster over the years.  So if they have become expensive, they are
only *relatively* expensive, compared to other operations which may
have gotten faster at a larger rate.  So even if this is the only
consideration (it isn't, see the following), subroutine calls have
not "become expensive", they have instead gotten *cheaper*, only at a
(perhaps) slower rate than some other things.  

In the second place, work done on pipelining and instruction
look-ahead (yes, done in the last 30 years) has given a great deal
of attention of subroutine calls and branches, precisely because
they were expensive to begin with.  (There are some very clever
schemes for branching -- inlcuding one machine where an
unconditional branch takes ZERO time.  Zero anythings is never
"expensive".)  Since they were expensive to begin with, and since
they had more attention paid to them, one would think they are
cheaper now.  (Studies comparing machines of thirty years ago to
machines of today are welcome.)

And, in the third place, subroutine calls do *more* now than they
did thirty years ago.  (Early machines did not even have subroutine
call instructions, remember.)  Comparing a Pascal subroutine call
with a Fortran subroutine call is like comparing apples and oranges.
The increased semantic power of the call must be considered before
such a call can be said to be "more expensive".

cheers,

txr