[TUHS] roff(7) [ and other related stuff ]

Jon Steinhart jon at fourwinds.com
Sun Jan 2 06:00:15 AEST 2022


Larry McVoy writes:
> On Sat, Jan 01, 2022 at 09:07:49AM +1000, George Michaelson wrote:
> > But macros aside, anyone who had used runoff had a
> > massively simpler path into roff than TeX. My future was set. The phd
> > students at Leeds looked down their noses at me for using cryptic .2 letter
> > inline magic. They were the high priests of things, I was just a computer
> > operator.  Watching them spend weeks and weeks wrangling a one em offset
> > problem stopping perfection in print was.. entertaining.
>
> I was program committee chair for Linux Expo in 1999 (all that means is
> I formatted the proceedings into a book).  I let people use LaTex but
> encouraged troff.  A few people tried out troff and their reaction was
> "Wow, that was so easy and groff is really fast!"
>
> The only negative reaction was table of contents complaints, LaTex is
> 2 pass so it can do them, roff is one pass so you have to fiddle with
> things.  A lot.
>
> I've used *roff for almost 40 years and I've never had the urge to use
> something else.  I wrote a paper a while back where they insisted on
> LaTex and it just made me like *roff more.
>
> It's Betamax and VHS all over again, the crappy answer won.

Happy New Year to everybody.  COVID has taken its toll if people are
spending New Year's Eve thinking about text formatting :-)  Warning - this
is a grumpy pendantic Jon post...

First of all, I love *roff.  It's the thing that got me started on UNIX when
I needed to write documentation for my first summer project at BTL.  There was
a V3 UNIX machine across the hall from my lab (2C-517?) that I used for that.
Been a fan ever since.

Complaints about things like tables of contents are just that - complaints.
C'mon - this is UNIX, composable software tools.  So what if LaTex is 2 pass
and *roff is 1 pass.  I have a simple script and a Makefile that adds a 2nd
pass and does all that.  Even with that the LaTex ecosystem is way more
complex than *roff.

The one thing that *roff doesn't do which I think I remember from runoff is
that runoff allowed in-line formatting requests; not just special escape
sequences but everything.

I never got into TeX although I've tried.  Probably just first language
syndrome.  Coming from UNIX, I just find using \ as a non-escape character
ugly, just like DOS\Windows pathnames.  But there are a number of things
that annoy me about it leading to the pendantic part.

In my opinion, the big innovation in TeX is the two-dimensional layout.  I
do spend a bit of time on big documents adding keeps and such to avoid orphan
and widow lines.

In my opinion, much of what Don did in TeX added no value.  Been meaning to
ask him about it but with COVID haven't seen him in a while.  For example,
the language parsing broke no new ground.  If it were me, and I wanted to
explore/demo/implement two-dimensional layout, I would have added it to *roff.
To me, the rest of it was not only a waste of time, but actually made the
world worse by making two incompatible ways of doing things that practitioners
have to learn instead of one.  Make's life harder, not easier.

How much time went into the development of the TeX front end that could have
been done in a few hours had Don used lex/yacc?  I made a similar comment to
Alan Wirfs-Brock when proofreading his big 20th anniversary article on
JavaScript.  I don't get the "oooo, Eich did this one-week sprint to get a
demo up and running" stuff.  Had Eich used lex/yacc instead of rolling his
own not only would he have not had to sprint, but we likely wouldn't still be
fighting with optional semicolons decades later since that's harder to do with
those tools.  I read it as praising him for making a bad decision.

This is my biggest issue with "modern software development".  Seems like every
project has to begin with it's own language, build system, package manager,
and so on.  Were I a modern software developer I'd create all that plus a new
email client just to send this message :-)  None of this behavior adds value.
It makes it so that practitioners have to learn many arcane incompatible
systems that all do pretty much the same thing.

While I haven't given it a hard look, I'd look at the netstat/ss/... stuff
with the same lens.  Sure, new features were needed, but was it necessary
to make the old stuff work differently?

In my roll as a mentor, this is the stuff that freaks out students, especially
during their first internships.  I have to explain that there are two types of
knowledge at play: their coursework and company crap.  I tell them that they
should be secure in the quality of their education and never ask their boss
how to copy a string or something like that.  But, it's perfectly OK to ask for
help on the internal undocumented crufty development environment.

In some respects, it's similar to how I decide what to bill for and what not
to on consulting projects.  I don't bill for learning some general knowledge
thing that I didn't know.  I do bill for learning odd project-specific
weirdness that I'll never use on anything else.

Back to *roff.  Might have said this before, but pic is probably my favorite
little language.  It's like having an artist on staff because I can tell it
what to draw and it will; I'm terrible at drawing.  One of its best features
that unfortunately was missed by the people who wrote fig is invisible
objects.  I typically start a figure with a big invisible box and hang things
on it.  If I need to move or scale things I just change the size of the box.
Sure beats hours of carpal-tunnel clicking to move a pile of objects in a
drawing program.  I guess it's relative addressing versus absolute all over
again; relative addressing makes it easier to relocate objects.

One more way to look at this.  I think that a lot depends on the state of the
world when one starts using stuff.  I remember a friend of mine telling me how
much simpler DOS was as compared to UNIX.  I told him that I thought that it
was because he was growing up with DOS, and learned new features as they came
along which is what I did with UNIX.  By the the time he got started UNIX was
more complicated.  Of course, DOS caught up.

It's sadly amusing how this applies to markup languages.  People who carped
about *roff requests are happy to craft HTML.

I guess what's missing from the field is Lorites from Neal Stephenson's Anathem
if you haven't read it.  A priesthood who's role is to inform people claiming
to invent something new that it's already been done.

Jon


More information about the TUHS mailing list