From: Dave Thompson <david.thompson1@worldnet.att.net>
Subject: Re: Ada Advocacy.
Date: Mon, 01 Sep 2003 21:26:53 GMT
Date: 2003-09-01T21:26:53+00:00 [thread overview]
Message-ID: <c2e7lv47k1rev5phanv60r0jtmdmcjd7vg@4ax.com> (raw)
In-Reply-To: pan.2003.08.26.21.20.35.693597@__n_o_s_p_a_m__abyss2.demon.co.uk
On Tue, 26 Aug 2003 22:20:36 +0100, "Luke A. Guest"
<laguest@__n_o_s_p_a_m__abyss2.demon.co.uk> wrote:
<snip>
> Not an URL, but something that I and other programmers have always wanted
> to do in C/C++/etc. but cannot is the printing of names of variables ;-)
>
> That's a damn nice debugging feature. It's been a while but I think it's
> something like
>
> declare
> test : Integer := 5;
> begin
> -- I'm really unsure about the overloaded + operator here, like I said
> -- it's been a while (around 6 years!)
> Write test'Name + " = " + test;
> end
>
Put[_Line] and test'Image.
> should send "test = 5" to the console.
>
> Something like that anyway ;-P Try doing that in C/C++ without a lookup
> table :-(
>
Generating the string label is easy enough in C or C++ using the
preprocessor # (stringize) operator -- as well as just writing it out
by hand for a fixed value. But the value conversion in C must be
coded knowing the data type, e.g.:
#define STR(x) #x
... printf (STR(test) " = " "%d" "\n", test ); /* for an int */
/* but %ld for long int, %f for a float or double, etc. */
/* and this doesn't work at all for non-builtin types */
In C++ all builtin types have operator<< predefined, and you can
define it yourself for class types (and enums, although those can also
default to builtin integers), in which case this always works:
... cout << STR(test) << " = " << test << endl;
and can be generated automatically from one variable name like:
#define PRINTVAR(x) cout << # x << " = " x << endl;
... PRINTVAR(test)
These can also be modified in obvious ways to do other things than
stdout, like C sprintf to a buffer or C++ << to a stringstream,
display in a GUI messagebox, send via RPC or CORBA, etc.
PL/I has a builtin facility to output any variable(s), or all, with
names -- PUT DATA -- but cannot be used for any other purpose.
Fortran has NAMELIST I/O to do the same thing for pre-chosen groups of
variables, which works bit is a bit clumsy for just one.
> Another thing that's really useful is being able to declare the range of,
> say, an integer variable - and with bounds checking it gets caught at
> compile & runtime (depending on whether it's accessed with a constant or
> not).
>
Pascal also does this. C++ doesn't for builtin integer types, but you
can write an integer-like class which does, or better a template which
generates such (lightweight) classes on demand. Similarly subscripts
are not checked for builtin arrays, but can be for stdlib containers
like std::vector and for array-like classes that you write or generate
from a template.
> The only downside to Ada is the amount of work that has to go into a
> simple program just to dump out some text (not very good for beginners) to
> the console.
>
> Also meaningful names negates the need for the absolutely disgusting
> hungarian notation.
>
This is equally true of all languages above (and most if not all
others) for user names. Although the names in the Ada standard
library(s) are with perhaps a few exceptions more meaningfully (and
consistently) chosen than in pretty much all other common languages.
- David.Thompson1 at worldnet.att.net
next prev parent reply other threads:[~2003-09-01 21:26 UTC|newest]
Thread overview: 102+ messages / expand[flat|nested] mbox.gz Atom feed top
2003-08-26 20:33 Ada Advocacy Stephane Richard
2003-08-26 21:20 ` Luke A. Guest
2003-08-26 22:28 ` Stephane Richard
2003-08-26 23:04 ` Luke A. Guest
2003-08-27 16:15 ` Warren W. Gay VE3WWG
2003-08-27 23:06 ` Luke A. Guest
2003-08-28 10:39 ` Preben Randhol
2003-08-26 23:55 ` Chad R. Meiners
2003-08-27 0:44 ` Anisimkov
2003-08-27 8:26 ` Dmitry A. Kazakov
2003-08-27 20:12 ` Wes Groleau
2003-08-27 23:09 ` Luke A. Guest
2003-08-29 16:13 ` Jon S. Anthony
2003-08-29 18:15 ` Luke A. Guest
2003-08-28 8:34 ` Dmitry A. Kazakov
2003-08-27 8:29 ` Luke A. Guest
2003-08-28 5:29 ` Dmitriy Anisimkov
2003-09-01 21:26 ` Dave Thompson [this message]
2003-08-27 6:56 ` David Holm
2003-08-27 16:00 ` Rod Chapman
2003-08-29 6:38 ` Adrian Hoe
2003-08-29 9:34 ` Stephane Richard
2003-09-01 5:45 ` Adrian Hoe
-- strict thread matches above, loose matches on Subject: below --
2012-03-20 12:54 Ada advocacy tonyg
2012-03-20 13:54 ` Ludovic Brenta
2012-03-20 14:39 ` Marc C
2012-03-20 15:13 ` Ludovic Brenta
2012-03-20 16:34 ` Yannick Duchêne (Hibou57)
2012-03-20 16:35 ` Yannick Duchêne (Hibou57)
2012-03-20 20:06 ` Shark8
2012-03-20 15:42 ` Georg Bauhaus
2012-03-20 18:31 ` Jeffrey Carter
2012-03-20 21:42 ` anon
2012-03-20 23:05 ` Shark8
2012-03-21 0:32 ` Shark8
2012-03-21 1:58 ` Robert Love
2012-03-21 5:37 ` Per Sandberg
2012-03-25 11:10 ` Peter C. Chapin
2012-03-21 8:59 ` anon
2013-06-17 23:42 ` johannes falcone
2013-06-18 0:09 ` tmoran
2013-06-18 0:14 ` Leo Brewin
2013-06-18 0:59 ` Jeffrey Carter
2013-06-19 19:22 ` johannes falcone
2013-06-19 19:34 ` Jacob Sparre Andersen
2013-06-19 20:16 ` Shark8
2013-06-19 19:36 ` Ludovic Brenta
2013-08-30 7:36 ` johannes falcone
2013-06-18 1:28 ` Dennis Lee Bieber
2013-06-18 5:55 ` Peter Brooks
2013-06-18 17:15 ` Robert A Duff
2013-06-18 17:43 ` Bill Findlay
2013-06-18 19:22 ` Robert A Duff
2013-06-18 19:30 ` Bill Findlay
2013-08-27 13:34 ` Yannick Duchêne (Hibou57)
2013-08-27 14:08 ` Bill Findlay
2013-08-27 14:13 ` Bill Findlay
2013-08-27 21:25 ` J-P. Rosen
2013-08-28 7:45 ` Dmitry A. Kazakov
2013-08-27 22:42 ` Dennis Lee Bieber
2013-08-28 7:45 ` Maciej Sobczak
2013-08-28 8:58 ` Georg Bauhaus
2013-08-28 9:42 ` Dmitry A. Kazakov
2013-08-28 11:42 ` G.B.
2013-08-28 11:59 ` Dmitry A. Kazakov
2013-08-28 12:49 ` G.B.
2013-08-28 14:07 ` Dmitry A. Kazakov
2013-08-28 15:06 ` Eryndlia Mavourneen
2013-08-28 17:30 ` Dmitry A. Kazakov
2013-08-28 16:44 ` Yannick Duchêne (Hibou57)
2013-08-28 17:25 ` Dmitry A. Kazakov
2013-08-28 23:33 ` Dennis Lee Bieber
2013-08-29 7:15 ` Dmitry A. Kazakov
2013-08-29 14:47 ` Yannick Duchêne (Hibou57)
2013-08-29 19:15 ` Dmitry A. Kazakov
2013-08-29 15:28 ` Robert A Duff
2013-08-29 21:43 ` Jeffrey R. Carter
2013-08-30 23:52 ` Yannick Duchêne (Hibou57)
2013-08-31 0:05 ` Jeffrey R. Carter
2013-08-31 1:42 ` Shark8
2013-08-31 2:57 ` Shark8
2013-08-31 9:00 ` Dirk Craeynest
2013-08-31 1:48 ` Randy Brukardt
2013-09-02 7:13 ` Egil H H
2013-09-02 8:41 ` G.B.
2013-09-02 16:37 ` Egil H H
2013-08-29 15:46 ` Robert A Duff
2013-08-30 4:47 ` Jeffrey R. Carter
2013-08-30 16:54 ` Robert A Duff
2013-08-30 17:49 ` Jeffrey R. Carter
2013-08-30 22:41 ` Robert A Duff
2013-08-31 0:02 ` Jeffrey R. Carter
2013-08-31 14:47 ` Robert A Duff
2013-06-19 7:29 ` nevillednz
2013-08-27 13:39 ` Yannick Duchêne (Hibou57)
2013-09-02 18:45 ` Martin
2013-06-17 23:39 ` johannes falcone
2012-03-21 10:44 ` tonyg
2013-06-18 0:07 ` johannes falcone
2012-03-23 16:13 ` KK6GM
2013-06-13 15:33 ` david
2013-06-13 15:34 ` david
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox