<div dir="ltr"><div class="gmail_default" style="font-family:monospace,monospace">If you want to see a nice use of a restricted subset of C++,<br></div><div class="gmail_default" style="font-family:monospace,monospace">that is, code written in the early days before the accretion<br></div><div class="gmail_default" style="font-family:monospace,monospace">of hideous excrescences, I highly recommend Tom Cargill's<br></div><div class="gmail_default" style="font-family:monospace,monospace">'pads'. You will find it in the 10th Edition distributions.<br></div><div class="gmail_default" style="font-family:monospace,monospace">It is a typical blit-style program, with a 'terminal' and<br></div><div class="gmail_default" style="font-family:monospace,monospace">'host' portion, the 'host' portion being written in the said<br></div><div class="gmail_default" style="font-family:monospace,monospace">restricted, earlier form of C++.<br><br></div><div class="gmail_default" style="font-family:monospace,monospace">The 'terminal' part is in C (this is the graphics front-end)<br></div><div class="gmail_default" style="font-family:monospace,monospace">but written for the blit. There was an OpenLook port by Dave<br></div><div class="gmail_default" style="font-family:monospace,monospace">Kowolski, and I have a version that runs under Plan9 (via<br></div><div class="gmail_default" style="font-family:monospace,monospace">Russ Cox's plan9port)---there is a straight-forward mapping<br>of blit graphics operations to the Plan9 model.<br><br></div><div class="gmail_default" style="font-family:monospace,monospace">Noel Hunt<br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Dec 1, 2017 at 2:44 AM, Steffen Nurpmeso <span dir="ltr"><<a href="mailto:steffen@sdaoden.eu" target="_blank">steffen@sdaoden.eu</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Larry McVoy <<a href="mailto:lm@mcvoy.com">lm@mcvoy.com</a>> wrote:<br>
 |On Wed, Nov 29, 2017 at 08:00:55PM +0100, Steffen Nurpmeso wrote:<br>
 |> Larry McVoy <<a href="mailto:lm@mcvoy.com">lm@mcvoy.com</a>> wrote:<br>
 |>|On Mon, Nov 27, 2017 at 07:06:51PM -0500, Ron Natalie wrote:<br>
 |>|> 1977 marks my entry into the world of UNIX.   I've always stated \<br>
 |>|> there was<br>
 |>|> only one person who truly understood nroff and he was dead.<br>
 |>|> I mourn the fact that of all the UNIX greats I've met, I missed out on<br>
 |>|> Ossanna.<br>
 |><br>
 |>|I think one could argue that James Clark has a pretty good handle on<br>
 |>|roff (having written the GNU version of nroff/troff/tbl/eqn/pic etc).<br>
 |><br>
 |> And Werner Lemberg, who carried the torch for the last almost two<br>
 |> decades.  He brought in some really great improvements, like<br>
 |> arguments for strings, which allows to write pretty much TeX like<br>
 |> a.k.a. inline if you want to (as in "this is \*[I talic] text").<br>
 |<br>
 |Yep.  James exited stage left and Werner stepped in.  I mean no disrespect<br>
 |to anyone, I was just saying that James has a really good handle on roff,<br>
 |he redid it all.  I admire him for doing so (even though I curse the fact<br>
 |that he did it in C++).<br>
<br>
The original source was no free code back then, so he did it for<br>
the free and open software world.  Thankfully.  And i do not know,<br>
i mean C++ was in 1989-1992, when he did most of the work as far<br>
as i can tell from a shallow look, a class, later template<br>
extension layer for plain C, not that overly huge stands-by-itself<br>
monster that i call it now.<br>
<br>
I am absolutely in favour and a of classes and objects, the<br>
encapsulation they provide, the method-on-object rather than<br>
object-on-function that you have with C.  (Multiple) Inheritance<br>
including automatic upcasts (to the given parent).  Virtual<br>
function pointer tables, automatically managed.  And "simple"<br>
templates.  For example, myself, in the process of creating my own<br>
fork, can write (globbering the global namespace)<br>
<br>
   color &assign_rgb(rf_ui32 r, rf_ui32 g, rf_ui32 b){<br>
      m_scheme = scheme_rgb;<br>
      return set_red(r).set_green(g).set_<wbr>blue(b);<br>
   }<br>
   color &set_red(rf_ui32 c){<br>
      rf_ASSERT(scheme() == scheme_rgb);<br>
      m_comps[0] = rf_min(c, max_val);<br>
      return *this;<br>
   }<br>
   ...<br>
<br>
instead of<br>
<br>
  rf_color *rf_color_assign_rgb(rf_color *self, rf_ui32 r, ....){<br>
    self->c_scheme = rf_COLOR_SCHEME_RGB;<br>
    self->c_comps[0] = rf_MIN(r, rf_COLOR_MAX_VAL);<br>
    ...<br>
    return self;<br>
  }<br>
<br>
and programming all that out over and over again.  (Or using<br>
macros with side-effects.  Or relying on inline functions.)<br>
And that is a simple object with a short name.<br>
References are unfortunate in my opinion, but you will not see any<br>
light if you try doing C++ without them because they are<br>
omnipresent for core functionality like standard copy constructors<br>
etc.  Like many other things, including the complete departure<br>
from an underlaying C standard.  C++03/C99 or so i would have<br>
appreciated.  But as long as -fno-rtti -fno-exceptions is possible<br>
i can somehow live with it.  (Let aside the fact that i have to<br>
live with it no matter what bloat the C++ standard introduces<br>
next.)  And then C is not what it was no more, too, and<br>
unfortunately the usage-makes-fun guideline from what Plan9<br>
documents and extends onto ISO C89 was not what the ISO C people<br>
looked at when they did.  Well.<br>
<br>
Maybe if he would have known what C++ ends up as he would have<br>
used C instead?  That would be an interesting question.  Myself<br>
i currently appreciate coming back to a C++ codebase, however,<br>
because thinking in objects is my personal way of dealing with<br>
programming, that is how i really got used to it, anyway.<br>
<br>
--steffen<br>
|<br>
|Der Kragenbaer,                The moon bear,<br>
|der holt sich munter           he cheerfully and one by one<br>
|einen nach dem anderen runter  wa.ks himself off<br>
|(By Robert Gernhardt)<br>
</blockquote></div><br></div>