Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP
Posting-Version: version B 2.10.1 6/24/83 (MC840302); site boring.UUCP
Path: utzoo!linus!philabs!cmcl2!seismo!mcvax!boring!jack
From: jack@boring.UUCP
Newsgroups: net.lang
Subject: Reading programs left-to-right.
Message-ID: <6571@boring.UUCP>
Date: Sat, 10-Aug-85 17:18:16 EDT
Article-I.D.: boring.6571
Posted: Sat Aug 10 17:18:16 1985
Date-Received: Mon, 12-Aug-85 22:35:40 EDT
Reply-To: jack@mcvax.UUCP (Jack Jansen)
Organization: AMOEBA project, CWI, Amsterdam
Lines: 43
Apparently-To: rnews@mcvax.LOCAL


Something that caught my attention a while ago is the following:

Why do most programming languages do assignments like
	  

This has two major disadvantages over
	  
in my opinion.

1. The second case is simpler to produce good code for.
   In the first case, the compiler should remember the 
   expression, which may involve putting it on the stack or something
   like that if the  is very complicated.
2. (More important) The second case is much easier to read.
   Everyone (well, almost everyone) reads and writes a program
   left-to-right:
       if(a+b == 3)
   Calculate a+b, then compare to 3, as opposed to 
       if(3 == a+b)
   Remember 3 for later, calculate a+b, compare to what we remembered
   previously.

   I tend to read a statement like
   foo[i+j].bar->bletch = a+b		in the order
   2    3   4    5         1
   (although it could be discussed that 2 and 3 should be the other way
   around).

   So, wouldn't
   a+b => foo[i+j].bar->bletch
   be more logical?

   Moreover, I what about the infamous C construction
   a[i++] = i

I remember seeing a language with the second type assigments once,
but it hasn't seemed to catch on.

Does anyone know any good reasons for this?
-- 
	Jack Jansen, jack@mcvax.UUCP
	The shell is my oyster.