Path: utzoo!utgpu!news-server.csri.toronto.edu!cs.utexas.edu!usc!apple!uokmax!d.cs.okstate.edu!norman From: norman@d.cs.okstate.edu (Norman Graham) Newsgroups: comp.lang.misc Subject: Re: Multi-compilers Message-ID: <1990Sep22.061027.9223@d.cs.okstate.edu> Date: 22 Sep 90 06:10:27 GMT References: <2581@l.cc.purdue.edu> Organization: Oklahoma State University Lines: 63 From article <2581@l.cc.purdue.edu>, by cik@l.cc.purdue.edu (Herman Rubin): > A language is a set of macros to be interpreted by the compiler into machine > procedures. There is no good reason why the user should not be allowed to > add macros in convenient notation to this list, nor why many of the restric- > tions on the current macros need be there. This view explains why you're constantly at odds with the rest of the netnews community. First, as anyone with a basic knowledge of languages can tell you, a language is a set of strings (of finite but arbitrary length) over some alphabet. In addition, computer languages are notations for expressing computations; they are not notations for expressing the machine instructions you want a compiler to generate. As a general rule, a computer language exists apart from any particular compiler or computer architecture, although issues of compilation and computation model may influence the design of a language. (eg. The design of Pascal's syntax makes it easy to be parsed using a particular method. Also, the constructs offered by Pascal reflect the choice of the von Neumann machine as the underlying computational model.) The point is that a program has a meaning that is independent of any particular sequence of machine instructions. Second, it is simply naive to describe what a compiler does as macro expansion. Otherwise, you would have had your super-macro super-assembler decades ago and we wouldn't have bothered to expend the great effort to design so many different languages and compilers. > If the machine can do something, > the user should be able to invent a notation to do it, if necessary. For > example, I find the general vector operation on the CYBER 205, with its dozen > optional fields, easy to explain in a notation easy to read and write. And in a previous post, cik@l.cc.purdue.edu (Herman Rubin) writes: > [...] Apart from machine language, there is no language designed to > use the power of the computer. This is written as if you believe the 'power of the computer' resides in its instruction set. I disagree with this idea. In fact, the whole RISC movement is founded on the idea that to build a faster computer you must _remove_ instructions from the instruction set. Likewise, adding an instruction to a modern computer will not increase its computational power. I believe the 'power of the computer' resides in its ability to be used as an abstraction device on which we can build higher and higher levels of reality. Personally, I chose to live in a reality where lambda calculus is the underlying computational model. This implies that not only do I give up the ability to control the machine instructions used by my programs, I also give up any notion of the sequencing of those instructions (control flow) and the notion of updatable memory locations (ie. updatable variables, machine state). But by living in this level of reality I gain the ability to write extremely clear and straight-forward programs that are 10, 20, and sometimes even 30 times _shorter_ than the equivalent programs written in a typical high-level language. -- Norman Graham {cbosgd,rutgers}!okstate!norman The opinions expressed herein do not necessarily reflect the views of the state of Oklahoma, Oklahoma State University, OSU's Department of Computer Science, or of the writer himself.