Path: csiph.com!v102.xanadu-bbs.net!xanadu-bbs.net!news.glorb.com!news-out.readnews.com!news-xxxfer.readnews.com!news.misty.com!news.iecc.com!.POSTED!nerds-end From: George Neuner Newsgroups: comp.compilers Subject: Re: Programming language and IDE design Date: Mon, 18 Nov 2013 19:02:39 -0500 Organization: A noiseless patient Spider Lines: 62 Sender: johnl@iecc.com Approved: comp.compilers@iecc.com Message-ID: <13-11-018@comp.compilers> References: <13-11-016@comp.compilers> NNTP-Posting-Host: news.iecc.com Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Trace: leila.iecc.com 1384872356 18100 64.57.183.58 (19 Nov 2013 14:45:56 GMT) X-Complaints-To: abuse@iecc.com NNTP-Posting-Date: Tue, 19 Nov 2013 14:45:56 +0000 (UTC) Keywords: design, comment Posted-Date: 19 Nov 2013 09:45:55 EST X-submission-address: compilers@iecc.com X-moderator-address: compilers-request@iecc.com X-FAQ-and-archives: http://compilers.iecc.com Xref: csiph.com comp.compilers:1042 On Sat, 16 Nov 2013 15:55:10 +0000, Martin Ward wrote: >On Friday 08 Nov 2013 at 21:04, George Neuner wrote: > >> The majority of successful languages are LL(k) for small k. It's hard >> to get much simpler than that for parsing. > >C is not LL(K), neither is COBOL, nor C++, nor I think is Java. >That probably covers the majority of successful languages: >if "success" is defined as "total lines of code in production". They _all_ are LL(k). More specifically, I believe all of your examples are, at most, LL(2). AFAIK, Fortran's DO loop requires the most lookahead of any of the classic language features: LL(4) [if I'm counting correctly]. 10DOI=42 10DOI=42,45 Card Fortran didn't require whitespace separation. You had to look ahead to find [or not] the comma to distinguish DO "I = m,n" from the assignment "DOI = n". >> It's impossible not to have implementation dependent behavior: e.g., >> program execution time is a behavior that can't be specified. > >In my opinion, execution time is not part of the semantics or meaning >of a program. Then I hope never to encounter any devices you have programmed. >Early CPUs did not have a hardware stack: your attitude would suggest >that *therefore* languages should define the behaviour of a recursive >subroutine to be "implementation dependent". Fortunately, there were >language designers, such as the designers of Lisp and Algol, >who recognised the value of recursion and included it in their language. >As a result, hardware designers added stack operations to their CPUs. I simply said that your assertion: (2) Absolutely no behaviour should be "implementation dependent" or "undefined". Every syntactically valid program should have a single semantically valid meaning (even if that meaning is "halt with an error message"). is not plausible. I did not offer an alternative. Since you brought up this ludicrous example, you ought to know that the people who programmed those early CPUs - stack or no - were far more aware of the program's runtime environment and of the tradeoffs of using "equivalent" codings than you seem to want to be. George [Fortran through F77 potentially had to look arbitrarily far ahead to tell FORMAT statements from an assignment to an array called FORMAT. BTDT. But I would be surprised if any modern languages were that hard to lex. -John]