Newsgroups: comp.lang.misc
Path: utzoo!utgpu!jarvis.csri.toronto.edu!turing.toronto.edu!mendell
From: mendell@turing.toronto.edu (Mark Mendell)
Subject: Re: Turing programming language.
Message-ID: <89Jan20.111000est.4328@turing.toronto.edu>
Keywords: programming language
Organization: CSRI, University of Toronto
References: <11@euteal.UUCP>
Date: Fri, 20 Jan 89 11:09:55 EST

I would like to know what you don't like about the syntax of Turing.  I admit
that as the main Turing development person, I am biased, but I like the Turing
syntax.

    You give two examples of features that you don't like:
	"I especially hate the very ugly loop statement"
	"And what about the cumbersome linked list example on page 1415."


I think that loop statement in Turing is simple and easy to use.  It is more
powerful than the equivalent Pascal loops.  For example:

(Please forgive minor Pascal syntax errors)

    Pascal				Turing

    while condition do			loop
	begin				    exit when not condition
	    ... code ...		    ... code ...
	end				end loop


    repeat 				loop
	... code ...		    	    ... code ...
    until condition			    exit when condition
					end loop

    
    { the one and a half loop }		/* the one and a half loop */
    read (i)				loop
    while i <> 0 do			    get i
	begin				    exit when i = 0
	    .... code ...		    ... code ...
	    read (i)			end loop
	end

As you can see, in Pascal, you have to repeat the 'read(i)' at the bottom of
the loop.  This can lead to problems maintaing the program, if only one of
the lines are ever changed.  In turing, there is only one copy of this code.


You have a better point with collections.  The Turing syntax:

    var symbolEntry : collection of
	record
	    name : string
	    location : int
	    /* ... more fields ... */
	    next : pointer to symbolEntry
	end record

    type SymbolPtr : pointer to symbolEntry


    var sym : SymbolPtr

    new symbolEntry, sym	/* ==  sym = (symbolEntry *) malloc (sz); */

    symbolEntry (sym).name := "fubar"
    symbolEntry (sym).next := nil(symbolEntry)


The 'collectionName(pointer)' syntax is more wordy than C or Pascal.  On the
other hand, it does tell you explicitly what the pointer points to.  In
addition, the syntax is deliberately identical to array subscripting.  This
is because the formal proof rules consider collection elements to be the same
as array elements.  A collection is just an array that can grow and shrink
using 'new' and 'free'
-- 
Mark Mendell
	    Computer Systems Research Institute    University of Toronto
	    Usenet:	{linus, ihnp4, allegra, decvax, floyd}!utcsri!mendell
	    Internet:	mendell@turing.toronto.edu
			mendell@turing.utoronto.ca

