Re: What attributes of a programming language simplify its implementation?

gah4 <gah4@u.washington.edu>
Sat, 1 Oct 2022 17:05:56 -0700 (PDT)

          From comp.compilers

Related articles
| List of all articles for this month |
From: gah4 <gah4@u.washington.edu>
Newsgroups: comp.compilers
Date: Sat, 1 Oct 2022 17:05:56 -0700 (PDT)
Organization: Compilers Central
References: 22-09-026 22-10-002
Injection-Info: gal.iecc.com; posting-host="news.iecc.com:2001:470:1f07:1126:0:676f:7373:6970"; logging-data="14637"; mail-complaints-to="abuse@iecc.com"
Keywords: design, comment
Posted-Date: 01 Oct 2022 21:34:55 EDT
In-Reply-To: 22-10-002

On Saturday, October 1, 2022 at 12:28:25 PM UTC-7, Martin Ward wrote:


(snip)


It seems to me that there are two questions, more or less
syntax and semantics. Mattbe what the language allows you to ask,
and what happens when you do it.


I have always found Fortran had strange restrictions on what you
were allowed to do. Some because it made the compiler easier
to write (especially in the early days), but also because someone
thought you shouldn't do that.


REAL DO variables were added in Fortran 77, and then removed
not so much later.


On the other hand, PL/I is pretty good at allowing things, even if
there isn't much reason. I did this one in high school, not knowing
if it would actually work:


DCL (I, J, K, L) CHAR(100);
J='1';
K='100';
L='1';
DO I=J TO K BY L;
      PUT LIST(I, SQRT(I));
END;


I suspect no designers of PL/I ever expected someone to try it,
but the ability is there, and compilers do it.


Now, it turns out that you have to add a few blanks to K, as the
loop comparison is done as a string compare. (I didn't guess
that until finding that the loop didn't end.)


C lets you do some things that it probably shouldn't, though.


Unlike many languages, the whole definition of PL/I was written
before writing the first compiler. (Not that all features were
implemented in the first compiler.)
[PL/I was a remarkably good language considering what a rush job it was but
it has plenty of odd things, e.g.


DCL (I, J, K) CHAR(3);
I = 1;
J = 2;
K = I+J;


What does K contain? Nope, it contains three spaces because the 1 and 2
are converted to ' 1' and ' 2', they're converted back to integer,
added, converted back to to a default size integer string
like ' 3' and string assignment truncates from the right. -John]


Post a followup to this message

Return to the comp.compilers page.
Search the comp.compilers archives again.