comp.lang.ada
 help / color / mirror / Atom feed
From: smize@Starbase.NeoSoft.COM (Samuel Mize)
Subject: Re: "Subtract C, add Ada"
Date: 1 Feb 1995 04:23:48 -0600
Date: 1995-02-01T04:23:48-06:00	[thread overview]
Message-ID: <3gnnfk$bfa@Starbase.NeoSoft.COM> (raw)
In-Reply-To: 3gebnq$7f3@cronkite.seas.gwu.edu

In article <3gebnq$7f3@cronkite.seas.gwu.edu>,
David O'Brien <dobrien@seas.gwu.edu> wrote:

Several things that made me think harder before I wrote.
Painful, but thanks.  ;-)

Specifically, he wrote
>Code layout and where expressions may be used is what this thread was
>about.

True.

To bring it back around:

Ada was not designed to be hard to write per se, but it *was*
explicitly designed to be easy to read accurately, even when
that made it harder to write.  Note also, not just easy to
read, but easy to read *accurately.*

The designer felt that assignments embedded in expressions
were easy to miss, and easy to screw up.  This opinion is
based, in large part, on our collective experiences with
debugging C.  So, Ada does not let assignment return a value.
However, if it really really (not just really) makes your
code better somehow, Ada provides a construct with which
you can "wrap" the assignment, to make it visible that
this particular assignment returns a value.  This construct
is the function declaration.  With pragma inline and a
little attention to what you are doing, this should be
as efficient as an embedded expression, and should also
be clearer to the maintenance programmer.  For example,

>...The original
>C code was:
>	while ( (c = getchar()) == ' ' ) { /* count spaces */ }

To make truly equivalent Ada code, you would need a function,
probably in a shared file package, that assigns and returns
the next character from the file:

    package Files_Like_C is
      C: character;
      function Next_Char return character;
    end Files_Like_C;

    with Text_Io; use Text_Io;
    package body Files_Like_C is
      function Next_Char return character is
      begin
        if End_Of_File then
          C := Ascii.Nul; -- no EOF character so using NUL
        else              -- to emulate the C string terminator
          Get (C);
          return C;
        end if;
      end Next_Char;
    end Files_Like_C;

Once all this infrastructure has been set up, you can code:

    while (Next_Char = ' ') loop
      null; -- count spaces here if needed
    end loop;

Before anyone says "but look at all that code!" remember, we
are recoding the interface to the standard file package, on
the assumption that there is a compelling reason to put
Next_Char into expressions.

Sam Mize - smize@starbase.neosoft.com



  parent reply	other threads:[~1995-02-01 10:23 UTC|newest]

Thread overview: 85+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
1995-01-20 10:20 "Subtract C, add Ada" R.A.L Williams
1995-01-20 13:22 ` Renaud HEBERT
1995-01-24  3:35   ` David Moore
1995-01-25  5:38     ` Robert Dewar
1995-01-28 16:35     ` Jules
1995-01-29  8:06       ` Matt Kennel
1995-01-30  5:31       ` Michael Feldman
1995-01-31 22:22         ` David O'Brien
1995-01-24 20:23   ` N. Mellor
1995-01-25  8:50     ` Robb Nebbe
1995-01-25 14:19     ` John Volan
1995-01-26  5:07     ` Samuel Mize
1995-01-26 18:51       ` Mark A Biggar
1995-01-21 15:18 ` Robert Dewar
1995-01-21 21:03 ` David O'Brien
1995-01-23  3:09   ` Jay Martin
1995-01-23 12:50     ` Andrew McConnell
1995-01-24  0:54     ` Matt Kennel
1995-01-25 17:03       ` Norman H. Cohen
1995-01-26  1:13         ` Dr. Richard Botting
1995-01-26 14:32         ` Anders Juul Munch
1995-01-24  0:17   ` Bob Kitzberger
1995-01-23 20:46 ` Robert Firth
1995-01-24 14:25   ` Samuel Mize
1995-01-25  7:27     ` David O'Brien
1995-01-25 12:14     ` Robert A Duff
1995-01-25  5:57   ` David O'Brien
     [not found]     ` <3g9rf0$71k@Starbase.NeoSoft.COM>
1995-01-28 21:08       ` David O'Brien
1995-01-31 18:07         ` Samuel Mize
1995-02-01 10:23         ` Samuel Mize [this message]
1995-01-30  0:24     ` Mark S. Hathaway
1995-01-31  3:30       ` Jay Martin
1995-02-01 13:25         ` Jesper Kaagaard
  -- strict thread matches above, loose matches on Subject: below --
1995-02-10 13:49 R.A.L Williams
     [not found] <3gsr0e$oin@miranda.gmrc.gecm.com>
1995-02-07 16:58 ` Mark S. Hathaway
1995-02-08  7:39   ` Travis C. Porco
1995-02-08 16:07     ` Fred J. McCall
1995-02-08 21:30       ` Garlington KE
1995-01-31  9:34 R.A.L Williams
1995-02-01 16:45 ` Charles H. Sampson
1995-01-23  8:49 R.A.L Williams
1995-01-25 23:18 ` Charles H. Sampson
1995-01-20  9:33 R.A.L Williams
     [not found] <3fgphd$sc3@rational.rational.com>
1995-01-20  5:51 ` RonaldS60
1995-02-07 13:55   ` Robert C. Soong
     [not found] <3fdcoi$chn@miranda.gmrc.gecm.com>
1995-01-20  5:01 ` Samuel Mize
1995-01-20 22:07   ` Garlington KE
1995-01-24  5:02     ` R_Tim_Coslet
     [not found] <3etund$hnr@miranda.gmrc.gecm.com>
1995-01-12  9:56 ` Erik Svensson
1995-01-12 14:44 ` Norman H. Cohen
1995-01-13  1:51 ` David O'Brien
1995-01-13 12:38   ` Laurent Gasser
1995-01-13 20:53     ` John DiCamillo
     [not found]       ` <3f8fnf$c8p@gamma.ois.com>
1995-01-16 11:02         ` Matt Kennel
     [not found]         ` <milodD2IFpG.329@netcom.com>
1995-01-17 21:39           ` R. William Beckwith
     [not found]       ` <3fa11q$sdh@gnat.cs.nyu.edu>
1995-01-16 20:20         ` David Moore
1995-01-14  0:24     ` David O'Brien
1995-01-20  4:43     ` Samuel Mize
1995-01-21 20:28       ` David O'Brien
1995-01-22 21:12         ` Robert Dewar
1995-01-23 18:35         ` Norman H. Cohen
1995-01-23 19:18         ` John Cosby - The Coz
1995-01-24 14:11         ` Samuel Mize
1995-01-14 10:37   ` Keith Thompson
     [not found]     ` <3fcjgt$b0v@cronkite.seas.gwu.edu>
1995-01-16 18:47       ` Robert Dewar
     [not found]   ` <D2It0r.4rp@inmet.camb.inmet.com>
1995-01-17 14:11     ` Norman H. Cohen
1994-12-30 16:06 Mitch Gart
1995-01-03 19:04 ` whiting_ms@corning.com (Matt Whiting)
1995-01-05  4:31   ` Michael Feldman
1995-01-04 21:40 ` Fred McCall
1995-01-05  4:30   ` Richard Pattis
1995-01-05 16:07   ` Kevin Weise
1995-01-06 13:06   ` Jahn Rentmeister
1995-01-06 16:47     ` Laurent Gasser
1995-01-06 17:29       ` David Weller
1995-01-06 17:30         ` David Weller
1995-01-10 18:28       ` Bob Kitzberger
1995-01-06 23:36   ` Kenneth Almquist
1995-01-04 22:45 ` Jay M. Martin
1995-01-05  4:37   ` Michael Feldman
1995-01-05 18:08     ` Jay Martin
1995-01-05 23:56       ` Robert Dewar
1995-01-08  8:04         ` Jay Martin
1995-01-06  0:07       ` Michael M. Bishop
1995-01-10 21:30         ` Jay Martin
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox