The Unix Heritage Society mailing list
 help / color / mirror / Atom feed
From: arnold@skeeve.com
To: will.senn@gmail.com, tuhs@minnie.tuhs.org
Subject: Re: [TUHS] ratfor vibe
Date: Tue, 01 Feb 2022 08:37:34 -0700	[thread overview]
Message-ID: <202202011537.211FbYSe017204@freefriends.org> (raw)
In-Reply-To: <c0fd1aec-55a8-54a4-94dc-748068d9e15d@gmail.com>

Will,

This will be a high level reply. I undoubtedly have some details wrong, as
I wasn't inside Bell Labs.

	Sherman, set the wayback machine for 1974.
		-- Mr. Peabody

In 1974, Unix was still young, and while C existed, it was not widespread.
The predominant programmng language in use at the time in Bell Labs
and in many, many other places, was Fortran.  For our purposes, Fortran IV
and Fortran 66 are the same thing: the only control flow constructs the
language had was 'if', 'goto' and a 'do' loop that could only count up.
The only data structure was the array.

Structured Programming had started to take hold in the Computer Science
community, with lots of discussion and papers about what the best control
flow structures were, and so on.

At the time there were preprocessors for Fortran that made it easier to
program in.  I don't know what got him started, by Brian Kernighan decided
to write one that would give Fortran control flow constructs similar or
identical to those of C.  This was ratfor, for RATional FORtran. He used
C and Yacc (which was also fairly young) to do this.

Recognizing that the Unix environment was very pleasant, but that the
wide world wouldn't drop everything they had to move to it, he and
P.J. (Bill) Plauger used ratfor to create a bunch of tools that provided
functionality similar or identical to many of the Unix utilities,
and wrote a book on the tools, using it as a platform to at the
same time teach good programming practices.  This is

https://www.amazon.com/Software-Tools-Brian-W-Kernighan/dp/020103669X/ref=sr_1_5?crid=LXBHQKV9D0QP&keywords=software+tools&qid=1643720166&s=books&sprefix=software+tools%2Cstripbooks%2C220&sr=1-5

which I STRONGLY recommend getting and reading, even almost 50 years
after it was published (1975 or 1976).

This book changed my life. Literally.

The original tools are in the TUHS archives. (If anyone has not synched
their copy, please do so, there were some errors in the files that I
have recently fixed and which Warren has put in place.)

(A modernized version of UNIX ratfor is at
https://github.com/arnoldrobbins/ratfor, so you don't have to use V7 to
get it. The doc is included and it's easy to make PDF of it.)

The book and tools were extremely popular into the early 80s, until Unix
itself started to spread.  Debbie Scherer can give the history of her
group, which took the tools and made them portable to all kinds of
computing environments. At Georgia Tech, 3 students took the tools and
adapted them into a lovely environment for use on Pr1me systems, which
were otherwise rather less user-friendly.

At Bell Labs, Brenda Baker wrote 'struct' which read Fortran and turned
it into ratfor; see the recent list archives for more on my efforts to bring
that program into the 21st century. (Apologies for the self plugs. :-)

In ~ 1981, Kernighan and Plauger rewrote the tools in Pascal and redid
the book to go with it. This is

https://www.amazon.com/Software-Tools-Pascal-Brian-Kernighan/dp/0201103427/ref=sr_1_3?keywords=software+tools+in+pascal&link_code=qs&qid=1643727958&sourceid=Mozilla-search&sr=8-3

which I also recommend getting a copy of. This in turn led to Kernighan's
famous "Pascal is not my favorite programming language" memo (which is also
in my github :-).

The Pascal tools are also in the TUHS archive.

I hope this helps.

Arnold


Will Senn <will.senn@gmail.com> wrote:

> All,
>
> I have been doing some language exploration in v7/4.3bsd and came across 
> Software Tools (not the pascal version). It's written using ratfor, 
> which I had seen in the v7 UPM. I fired up v7 and tried my hand at the 
> first example:
>
>     # copy - copy input characters to output
>              integer getc
>              integer c
>
>              while(getc(c) != EOF)
>                      call putc(c)
>              stop
>              end
>
> The first thing I noticed was that it read more like C than Fortran (I 
> know C quite well, Fortran just a smidge)... awesome, right? So I ran 
> the preprocessor on it and got the following f77 code:
>
>     c copy - copy input characters to output
>            integer getc
>            integer c
>     c     while
>     23000 if(.not.(getc(c) .ne. eof))goto 23001
>               call putc(c)
>               goto 23000
>     c     endwhile
>     23001 continue
>            stop
>            end
>
> Cool. The way it translated the EOF test is weird, but ok. Trying to 
> compile it results in complaints about missing getc and putc:
>
>     $ f77 copy.f
>     copy.f:
>         MAIN:
>     Undefined:
>     _getc_
>     _putc_
>     _end
>
> Ah well, no worries. I know that they're in the c lib, but don't about 
> fortran libs... Meanwhile, over on 4.3BSD, it compiles without issue. 
> But running it is no joy:
>
>     $ ./a.out
>     This is a test
>     $
>
> I remembered that the authors mentioned something about EOF, so I 
> tweaked the code (changed EOF to -1) and rebuilt/reran:
>
>     $ ./a.out
>     This is a test
>     This is a test
>     $
>
> Fascinating. Dunno why no complaints from F77 about the undefined EOF 
> (or maybe mis-defined), but hey, it works and it's fun.
>
> I'm curious how much ratfor was used in bell labs and other locations 
> running v6, v7, and the BSD's. When I first came across it, I was under 
> the impression that it was a wrapper to make f66 bearable, but the 
> manpage says it's best used with f77, so that's not quite right. As 
> someone coming from c, I totally appreciate what it does to make the 
> control structures I know and love available, but that wasn't the case 
> back then, was it? C was pretty new... Was it just a temporary fix to a 
> problem that just went away, or is there tons of ratfor out there in the 
> wild that I just haven't seen? I found ratfor77 and it runs just fine on 
> my mac with a few tweaks, so it's not dead:
>
>     ratfor77 -C copy.r | tee copy.f
>     C Output from Public domain Ratfor, version 1.0
>     C copy - copy input characters to output
>            integer getc
>            integer c
>     23000 if(getc(c) .ne. eof)then
>            call putc(c)
>            goto 23000
>            endif
>     23001 continue
>            stop
>            end
>
> What's the story? Oh, and in v6 it looks like it was rc - ratfor 
> compiler, which is not present in v7 or 4.3BSD - is there a backstory 
> there, too?
>
> Will
>
>
>

  reply	other threads:[~2022-02-01 15:38 UTC|newest]

Thread overview: 75+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-01-31 20:46 Will Senn
2022-02-01 15:37 ` arnold [this message]
2022-02-01 15:52   ` Ralph Corderoy
2022-02-01 16:58     ` Clem Cole
2022-02-01 17:02     ` silas poulson
2022-02-02  7:47     ` arnold
2022-02-03  5:47       ` [TUHS] more about Brian Rich Morin
2022-02-03  7:44         ` markus schnalke
2022-02-03  8:18           ` Rich Morin
2022-02-04  2:23           ` Adam Thornton
2022-02-04  2:34             ` [TUHS] more about Brian... [really Rust] Jon Steinhart
2022-02-04 13:07               ` Thomas Paulsen
2022-02-04 23:18               ` Dan Cross
2022-02-04  3:28             ` [TUHS] more about Brian Dan Stromberg
2022-02-04  5:11             ` Rich Morin
2022-02-04 21:22               ` [TUHS] Go vs. Rust, and etc. (was: more about Brian...) Greg A. Woods
2022-02-04 21:37                 ` Richard Salz
2022-02-04 22:32                   ` Steffen Nurpmeso
2022-02-04 23:05                   ` Thomas Paulsen
2022-02-04 23:15                   ` Seth J. Morabito
2022-02-05  1:41                     ` Adam Thornton
2022-02-04  7:38             ` [TUHS] more about Brian Andy Kosela
2022-02-04  8:10               ` Steve Nickolas
2022-02-04  8:44                 ` markus schnalke
2022-02-04  9:16                   ` Steve Nickolas
2022-02-04 18:54                 ` John Cowan
2022-02-04 19:45                   ` Thomas Paulsen
2022-02-04 20:28                     ` Hellwig Geisse
2022-02-04 21:03                       ` Jim Capp
2022-02-04 22:30                         ` Steffen Nurpmeso
2022-02-04 22:25                       ` Steffen Nurpmeso
2022-02-06  0:56                       ` Larry McVoy
2022-02-06  1:10                         ` Will Senn
2022-02-06  4:52                           ` Rob Pike
2022-02-06  4:58                             ` Dan Halbert
2022-02-06  5:06                             ` Will Senn
2022-02-06  6:19                             ` Ed Carp
2022-02-06  6:27                               ` Rob Pike
2022-02-06  6:40                                 ` Stuart Remphrey
2022-02-06  6:44                                 ` Bakul Shah
2022-02-06 19:08                                   ` Steffen Nurpmeso
2022-02-06 12:52                                 ` Ralph Corderoy
2022-02-06 13:14                                 ` Ed Carp
2022-02-06 14:13                                   ` Dan Cross
2022-02-06 14:15                                   ` Larry McVoy
2022-02-06 16:31                                     ` Warner Losh
2022-02-06 18:36                                     ` [TUHS] more about Brian... [ really GC vs malloc/free languages ] Jon Steinhart
2022-02-06 19:27                                     ` Jon Steinhart
2022-02-06 19:33                                       ` Warner Losh
2022-02-06 19:37                                         ` Jon Steinhart
2022-02-06 20:21                                           ` [TUHS] COFF is over there Ralph Corderoy
2022-02-06 16:16                           ` [TUHS] more about Brian Brad Spencer
2022-02-08  5:22                             ` Ed Carp
2022-02-03 18:57       ` [TUHS] ratfor vibe silas poulson
2022-02-04  8:26         ` arnold
2022-02-04 19:41           ` John Cowan
2022-02-10 15:18       ` Ralph Corderoy
2022-02-03  4:00 ` Will Senn
2022-02-03  4:31   ` Al Kossow
2022-02-03  5:16     ` Warner Losh
2022-02-03 20:00   ` Adam Thornton
2022-02-04  6:06     ` Ori Idan
2022-02-04 17:35       ` Adam Thornton
2022-02-04 17:44         ` Will Senn
2022-02-01 18:19 Noel Chiappa
2022-02-01 18:47 ` Clem Cole
2022-02-01 19:10   ` Dan Cross
2022-02-01 19:39     ` Clem Cole
2022-02-01 21:21       ` Dan Cross
2022-02-01 21:33         ` Clem Cole
2022-02-01 23:12           ` John Cowan
2022-02-01 19:39   ` Richard Salz
2022-02-01 22:30   ` Erik E. Fair
2022-02-02  0:54     ` Yeechang Lee
2022-02-01 21:50 ` Win Treese

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=202202011537.211FbYSe017204@freefriends.org \
    --to=arnold@skeeve.com \
    --cc=tuhs@minnie.tuhs.org \
    --cc=will.senn@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).