[comp.lang.misc] What is the language for ?

cik@l.cc.purdue.edu (Herman Rubin) (07/26/90)

This appeared in comp.lang.fortran.  The article quoted appears after
my comments.

A language is a means of communication.  Unlike hardware tools, languages
can be even interspersed.  To someone who knows more than one language, 
sentences, phrases, and even words in different languages can be strung
together in a meaningful fashion.

The hardware is the tool.  The communications scheme should be such as to
enable the programmer to make use of the tool.  This is not possible now.

It seems that the various groups of language designers seem more concerned
with restricting the language than in having it a means of communication.
We have functional languages, object-oriented languages, numerical processing
languages, list processing languages, statistical languages, etc.  None of them
is any good if the problem does not fall in the slot.  These languages tend to
have unnatural restrictions in their syntax.

We need a language with reasonable syntax with which we can communicate with the
computer.  It will necessarily have to contain a super-assembler.  Such a beast,
with a flexible macro processor, and a user-rewritable flexible syntax, would
enable someone like me to produce good code at a comparable rate to the HLLs.
HLL features can be added; I have no opposition to that.  But we cannot afford
languages like the present analogues of Basic English, where the language takes
the position that something cannot be said.
----------
In article <1990Jul25.210639.20509@murdoch.acc.Virginia.EDU>, gl8f@astsun8.astro.Virginia.EDU (Greg Lindahl) writes:
> In article <11029@chaph.usc.edu> ajayshah@aludra.usc.edu (Ajay Shah) writes:
> 
> >I recently hit a research group which worked exclusively in
> >fortran, and had to write fortran for a while, and was it a
> >nightmare!!  A language which has no data structures to speak of,
> >no dynamic allocation, no recursion, everything passed by
> >reference, no checking for number/type of arguments to
> >functons/subroutines, no control over scoping..not to mention the
> >silly syntactic irritations.
> 
> If you were using FORTRAN 77 to write programs which need the features
> it doesn't have, you're using the wrong tool. Use another one. If you
> are writing programs for which F77 is good, use it. It just so happens
> that the programs I write fit the F77 model well.
> 
> BTW, checking the number/type of arguments to functions/subroutines is
> something which can be done. The Sun compiler doesn't do it, but
> running the code through f2c does.
> 
> Followups to alt.religion.computers.
> 
> --
> "In fact you should not be involved in IRC." -- Phil Howard


-- 
Herman Rubin, Dept. of Statistics, Purdue Univ., West Lafayette IN47907
Phone: (317)494-6054
hrubin@l.cc.purdue.edu (Internet, bitnet)	{purdue,pur-ee}!l.cc!cik(UUCP)

nick@lfcs.ed.ac.uk (Nick Rothwell) (07/27/90)

In article <2408@l.cc.purdue.edu>, cik@l.cc (Herman Rubin) writes:
>A language is a means of communication.  Unlike hardware tools, languages
>can be even interspersed.  To someone who knows more than one language, 
>sentences, phrases, and even words in different languages can be strung
>together in a meaningful fashion.
>
>The hardware is the tool.  The communications scheme should be such as to
>enable the programmer to make use of the tool.

The communications scheme should be such as to enable the programmer
to express and solve his problem.

No?

		Nick.
--
Nick Rothwell,	Laboratory for Foundations of Computer Science, Edinburgh.
		nick@lfcs.ed.ac.uk    <Atlantic Ocean>!mcsun!ukc!lfcs!nick
~ ~~ ~~ ~~ ~~ Hey, son, get that DeLorean off the track! And ~~ ~~ ~~ ~~ ~
            what have you done with all my lovely harpsichords?

utoddl@uncecs.edu (Todd M. Lewis) (07/28/90)

I think there is a real tendency to confuse the notion of language
as a tool to communicate (like people talking) with the notion of
formal languages used to specify programs.  The former is really
a protocol while the second is instantiated as a statement.  The
remarkable (and useful) similarities of the two obscure their
differences.  Do you really want the computer to start second-guessing
your intentions based on its interpretation of the current operating
context?  To add more than the common safety checks ("Are you sure [y/N]?"
type messages) would require far more than a quantum leap in system
complexity--it would have to _understand_itself_ to be able to
_understand_ what you want it to do.  To really specify something
unambiguously, a sequence of commands--a program, is not easy at all.

Software isn't stupid because it "does not let users communicate their
needs".  The formal language that controls that software is either
inadequate in itself, or too alien to the user to allow efficient
control.  The common ways to approach the problem are (1) improve the
formal language so adequate commands are possible (this may involve
adding function to the software, but we aren't talking about that),
(2) alter the language so it more closely parallels the user's
normal way of communicating (the ever-popular "natural language
interface"), and last-but-by-no-means-least (3) alter the user
to more closely parallel the software's normal way of communicating.
This last one usually costs about $300 to $500 per day for several
days and involves traveling to the other coast.

cik@l.cc.purdue.edu (Herman Rubin) (07/29/90)

In article <5374@castle.ed.ac.uk>, nick@lfcs.ed.ac.uk (Nick Rothwell) writes:
> In article <2408@l.cc.purdue.edu>, cik@l.cc (Herman Rubin) writes:

			..........................

> The communications scheme should be such as to enable the programmer
> to express and solve his problem.
> 
> No?

With enough work, I could interpret any machine and any of the current
languages in any other, assuming that memory problems do not occur.  

It should be such as to enable the programmer to express his problem
in a manner that is compatible with the structure of his problem and
the capabilities of the machine.  It should also be such that the
resulting program is reasonably efficient.

Now I do not believe that a language which can accomplish all this
can be produced which is completely portable.  But it is necessary
to take these things into account in designing the language.  Making
it extensible can enable local modifications to be made. 
-- 
Herman Rubin, Dept. of Statistics, Purdue Univ., West Lafayette IN47907
Phone: (317)494-6054
hrubin@l.cc.purdue.edu (Internet, bitnet)	{purdue,pur-ee}!l.cc!cik(UUCP)

cg@myrias.com (Chris Gray) (07/31/90)

In article <2416@l.cc.purdue.edu> cik@l.cc.purdue.edu (Herman Rubin) writes:
>It should be such as to enable the programmer to express his problem
>in a manner that is compatible with the structure of his problem and
>the capabilities of the machine.  It should also be such that the
>resulting program is reasonably efficient.
>
>Now I do not believe that a language which can accomplish all this
>can be produced which is completely portable.  But it is necessary
>to take these things into account in designing the language.  Making
>it extensible can enable local modifications to be made. 

It seems to me that Herman has a completely different set of needs (from a
programming language) than I do. Hence, his opinions on what a good programming
language needs differ from mine. Herman is concerned about the efficiency
and ease of representation of small pieces of code which are crucial to
his overall application. I am concerned about the readability, maintainability
and efficiency of much larger programs. Most programs that I work on are
well over 10,000 lines, and, usually, no one part is much more important than
any other (there are of course hot spots, but there are lots of them, rather
than just one or two). I don't agonize over a small piece of code, either
to make it as short as it can be or to make it as fast as it can be. I let
the compiler worry about code size and speed. I worry about the overall
operation and readability of the whole program, since I am constantly adding
new things, fixing bugs (like critical sections and timing-related bugs in
my IOP code), etc.

As someone who has designed, implemented and regularly uses his own compiler
(don't ask - its only available on CP/M and the Amiga), I also disagree with
Herman's ideas about very loose syntax, extensibility, etc. Such a beast would
have very poor error handling, and hence would be quite unfriendly to work
with (even worse than pre-ANSI C!!). It would, also, in my opinion, be
DANGEROUS to work with - the compiler would have to trust the programmer
implicitly (just like in assembler), so would have few opportunities to point
out things that don't make sense. I wouldn't want such a language to be
used in things like nuclear reactors, railroad control systems, etc. It
could be fine for Herman's fine detail fiddling, but its not for me!
-- 
Chris Gray		Myrias Research, Edmonton	+1 403 428 1616
	cg@myrias.COM          {uunet,alberta}!myrias!cg

phipps@garth.UUCP (Clay Phipps) (08/17/90)

In article <avhch3ro@myrias.com> cg@myrias.com (Chris Gray) wrote:
>In article <2416@l.cc.purdue.edu> cik@l.cc.purdue.edu (Herman Rubin) wrote:
>>
>>[Rubin's ideal language] should be such as to enable the programmer 
>>to express his problem in a manner that is compatible with the structure 
>>of his problem and the capabilities of the machine.  It should also be 
>>such that the resulting program is reasonably efficient. [...]
>>Making it extensible can enable local modifications to be made. 
>
>Herman has a completely different set of needs (from a programming language)
>than I do.  [Our] opinions on what a good programming language needs differ.
>Herman is concerned about the efficiency and ease of representation of 
>small pieces of code which are crucial to his overall application.
>I am concerned about the readability, maintainability and efficiency of much
>larger programs. [...]  I let the compiler worry about code size and speed. 
>I worry about the overall operation and readability of the whole program, 
>since I am constantly adding new things, fixing bugs (...), etc.

In all of Herman's postings over the last 2 years that I have had 
continuous recent net access, my impression of his work is thus:
[1] Attaining the maximum speed provided by the hardware is important.
[2] No one but he will ever work on the programs that he writes.
[3] He never makes sweeping changes in any program that he writes.
[4] He has no collection of users of his programs who present him with
    new or changed requirements for his programs that he must satisfy.
[5] Errors in his programs are not life-threatening nor comparably critical.

Were it not for Herman's insistence on all possible speed from
apparently arbitrary machine architectures and organizations, 
numerous programming language design academicians ought to be able 
to design a language that would suit him.

In an era when the size of resident code for single-task operating 
systems + environments for microcomputers exceeds the size of the resident 
code for multitasking operating systems for the mainframes of 20 years ago,
and the dominant microcomputer software house ("those who fail to learn
from history...") is rumored to be The Second Coming Of The Mythical 
Man-Month ("...shall be destined to repeat it"), the most important
challenges in the programming languages field seem to be in designing
languages and compilers that can be an asset (not a hindrance) in
development, maintenance, and market-driven enhancement of large but
reliable and reasonably efficient software products.

I suspect that many of us in the business of providing compilers to 
The Real World adopt this orientation because of an intense desire
to quit being bitten by bugs resulting from our own innocent mistakes
("to err is human"), or from the laziness and stupidity of others :-).
I believe that despite the admiration that many of us doing language
design or compiler work in The Real World feel for certain prominent
programming languages academicians, and despite our appreciation for all
of the useful ideas that they have contributed to the field, many of us 
remain skeptical that most academicians will ever overcome their lack of 
experience with large software projects in The Real World, so as to design 
programming languages that meet the often less-than-ideal ("life is cruel") 
requirements of software development and *maintenance* and *enhancement* 
in The Real World.

>I also disagree with Herman [on] very loose syntax, extensibility, etc. 
>Such a beast would have very poor error handling, 

It's implausible to me that the people who made the effort to extend
the language--if speed freaks like Herman--would make the effort to
provide error handling that was up to the standards of an original
compiler-writer concerned about the quality of the human interface.

I recall clearly that those nifty "one-liners" written in APL 
by its zealots never seem to have any error-handling other than
the system built-in ("DOMAIN" | "INDEX" | "RANK" | "VALUE") "ERROR"
two-word diagnostic messages.

>and hence would be quite unfriendly to work with 
>(even worse than pre-ANSI C!!). 

I'd much rather have a griping compiler than a boss who has just gotten
an earful of griping from an important ($$$) user of a shipped product.
C is customarily not the former, but can certainly make the latter easy.

>It would, also, in my opinion, be DANGEROUS to work with - the compiler 
>would have to trust the programmer implicitly (just like in assembler), 

I've long wanted to use language features for expressing my intent 
in a program in a form that can be checked by the compiler.
I have in mind more than just "assert" statements or range-checking,
but I'll have to defer that to a future posting.

>so would have few opportunities to point out things that don't make sense.

Like in passing parameters between separately compiled routines of 
the large dusty-deck FORTRAN programs still in use today ?

>I wouldn't want such a language to be used in things like 
>nuclear reactors, railroad control systems, etc. 

That is, like those dusty decks written for good ole FORTRAN ?

>It could be fine for Herman's fine detail fiddling, but its not for me!
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
That depends whether or not Herman is like many university faculty
members whose income is raised above subsistence level by consulting.
If his "fine detail fiddling" is on statistical failure analysis of
nuclear reactors, buildings in active seismic zones, or the incidence
of illness among users of proposed "wonder drugs" undergoing testing,
the consequences will reach far beyond his ivory tower in Hoosier Country.

Herman's contrarian views are useful to those of us who would prefer
not to exclude users of our own programming languages through our own
oversights, as hidden by personal blind-spots (e.g.: making it impossible 
or unnecessarily aggravating to perform multiple-precision arithmetic,
without intending that things work out that way).  Considering that
just about everything in language design imposes a cost, or conflicts
with some desirable goal, there will probably continue to be plenty of 
instances in which the cost of accomodating Herman's perceived needs 
simply exceeds the cost to a language design of doing so, or conflicts
with a goal deemed more important by the person who has to make the
language design work.
-- 
[The foregoing may or may not represent the position, if any, of my employer, ]
[ who is identified solely to allow the reader to account for personal biases.]
[Besides,  this was posted during test runs executing during the "lunch-hour".]
                                              
Clay Phipps 
Intergraph APD: 2400#4 Geng Road, Palo Alto, CA 94303; 415/852-2327
UseNet (Intergraph internal): ingr!apd!phipps
UseNet (external): {apple,pyramid,sri-unix}!garth!phipps        EcoNet: cphipps
[Patience--our delay for receipt of postings is now approximately 2 weeks !!!!]