From: Markus E Leypold <development-2006-8ecbb5cc8aREMOVETHIS@ANDTHATm-e-leypold.de>
Subject: Re: why learn C?
Date: Tue, 03 Apr 2007 02:13:38 +0200
Date: 2007-04-03T02:13:38+02:00 [thread overview]
Message-ID: <6ur6r2iabx.fsf@hod.lan.m-e-leypold.de> (raw)
In-Reply-To: 1175494583.376672.93730@n59g2000hsh.googlegroups.com
"kevin cline" <kevin.cline@gmail.com> writes:
> On Apr 2, 12:03 am, Brian May <b...@snoopy.apana.org.au> wrote:
>> >>>>> "kevin" == kevin cline <kevin> writes:
>>
>> kevin> "The big difference is that C++ templates allow type
>> kevin> checking during compile-time [...]
>>
>> How is this any different from Ada generics?
>
> Because Ada generics have to be explicitly instantiated.
That doesn't make them non type checking. Quite the opposite. And as
far as type checking in templates goes: Last time I looked, many usage
errors intemplates where not caught by a kind of type systems (which
would say "you can't use this tape as a parameter in a template), but
rather by the linker wwhich told me that there is no usch
function/method for this type: This is not type checking.
> Ada requires
> an explicit instantiation for every combination of types that appears
> in the program. C++ template functions are implicitly instantiated,
> and can be defined once to cover all combinations of physical units,
> like this:
I think we had the problem already once: What about floating point
parameters to templates? :-)
>
> template <int M, int L, int T> class Unit
> // Mechanical unit with mass dimension M, length dimension L,
> // and time dimension T.
> {
> private:
> double value;
> public:
> explicit Unit(double v): value(v) {}
> Unit operator+(Unit rhs) { return Unit(v + rhs.v); }
> Unit operator-(Unit rhs) { return Unit(v - rhs.v); }
> Unit<M+M2,L+L2,T+T2> operator*(Unit<M2,L2,T2>& rhs)
> { return Unit<M+M2,L+L2,T+T2>(v * rhs.v); }
> ...
> };
>
> typedef Unit<0,0,0> Scalar;
> typedef Unit<1,0,0> Mass;
> typedef Unit<0,1,0> Length;
> typedef Unit<0,0,1> Time;
> typedef Unit<1,1,-2> Force;
> typedef Unit<1,-1,-2> Pressure;
> typedef Unit<1,-3,0> Density;
>
> Mass gram(1);
> Length meter(1);
> Time second(1);
>
> Pressure water_pressure(Length head)
> {
> Force g_earth = Scalar(9.8)*meter/second/second;
> Density water_density = Scalar(1000000)*gram/meter/meter/meter;
> return head * g_earth * water_density;
> }
>
> Ada would require a separate instantiations for each of these
> operations:
>
> Scalar * Length (returning Length)
> Length / Time (returning Velocity)
> Velocity / Time (returning Acceleration)
> Scalar * Mass (returning Mass)
> Mass / Length (returning Unit<1,-1,0>)
> Unit<1,-1,0>/Length (returning Unit<1,-2,0>)
> Unit<1,-2,0>/Length (returning Density)
> Length * Acceleration (returning Unit<0,-2,2>)
> Unit<0,2,2>*Density (returning Pressure)
Who cares? I'm a physicist (by education), but I have come to the
conclusion that judging the merits of a programming system on how much
I have to type to support checking physical units is cranky: It's a
fringe application and I can write a "physical units" definition file
and a translator to translate this into a Physical_Units package
(which does not only contain kg*m/s^2 (as your template does) but
actually the type Force) in some hours.
BTW: I haven't checked your C++ example, but I'd expect trouble if one
calculates
f / m * t1 * t2
as opposed to
t1 * t2 * f / m
since you need (dependend on the implicit grouping/association of the
multiplication operator) also operations
time * time -> time^2
time * force -> momemntum [kg*m/s]
and so on. Maybe the templating would automatically provide all this
(more power to C++ then), but it certainly looks like a complete mess
Regards -- Markus
next prev parent reply other threads:[~2007-04-03 0:13 UTC|newest]
Thread overview: 167+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <1172144043.746296.44680@m58g2000cwm.googlegroups.com>
[not found] ` <slrnetr31o.875.Marc.Boyer@localhost.localdomain>
[not found] ` <1172161751.573558.24140@h3g2000cwc.googlegroups.com>
[not found] ` <slrnetri6j.875.Marc.Boyer@localhost.localdomain>
[not found] ` <546qkhF1tr7dtU1@mid.individual.net>
2007-02-23 8:09 ` why learn C? Marc Boyer
2007-03-20 17:37 ` adaworks
2007-03-21 8:07 ` Maciej Sobczak
2007-03-21 13:39 ` Martin Krischik
2007-03-22 7:54 ` Maciej Sobczak
2007-03-21 14:10 ` Dmitry A. Kazakov
2007-03-21 17:57 ` adaworks
2007-03-21 18:48 ` adaworks
2007-03-21 18:39 ` Georg Bauhaus
2007-03-21 20:09 ` Dmitry A. Kazakov
2007-03-21 20:25 ` Use of declare blocks Randy Brukardt
2007-03-21 20:36 ` Gautier
2007-03-21 20:37 ` Gautier
2007-03-21 20:43 ` Niklas Holsti
2007-03-21 21:29 ` Randy Brukardt
2007-03-22 1:17 ` Adam Beneschan
2007-03-22 8:34 ` Dmitry A. Kazakov
2007-03-22 1:06 ` Adam Beneschan
2007-03-22 17:59 ` adaworks
2007-03-23 2:35 ` Randy Brukardt
2007-03-23 5:23 ` adaworks
2007-03-23 5:15 ` Randy Brukardt
2007-03-23 10:20 ` Georg Bauhaus
2007-03-23 18:25 ` commenting, was " tmoran
2007-03-24 0:32 ` adaworks
2007-03-24 2:12 ` tmoran
2007-03-24 3:19 ` Randy Brukardt
2007-03-24 7:36 ` tmoran
2007-03-24 15:35 ` Simon Wright
2007-03-21 13:29 ` why learn C? Alexander E. Kopilovich
2007-03-30 0:51 ` kevin cline
2007-03-30 4:09 ` Steve
2007-03-30 4:58 ` kevin cline
2007-03-30 7:44 ` Lutz Donnerhacke
2007-03-30 9:09 ` Dmitry A. Kazakov
2007-04-02 4:29 ` kevin cline
2007-04-02 6:45 ` adaworks
2007-04-02 7:52 ` Dmitry A. Kazakov
2007-04-02 8:19 ` kevin cline
2007-04-02 12:04 ` Dmitry A. Kazakov
2007-04-02 23:37 ` Randy Brukardt
2007-04-03 12:42 ` Erasing inappropriate operations (was: why learn C?) Ludovic Brenta
2007-04-03 23:44 ` Randy Brukardt
2007-04-04 8:34 ` Erasing inappropriate operations Ludovic Brenta
2007-04-04 22:00 ` Randy Brukardt
2007-04-03 0:16 ` why learn C? Markus E Leypold
2007-04-04 16:14 ` jayessay
2007-04-05 7:14 ` Hyman Rosen
2007-04-05 15:35 ` jayessay
2007-04-06 2:02 ` Hyman Rosen
2007-04-06 5:57 ` Ray Blaak
2007-04-06 11:01 ` Markus E Leypold
2007-04-07 23:00 ` Ray Blaak
2007-04-08 19:41 ` jayessay
2007-04-09 14:08 ` Markus E Leypold
2007-04-10 15:48 ` jayessay
2007-04-08 19:44 ` jayessay
2007-04-06 18:05 ` jayessay
2007-04-06 22:00 ` Hyman Rosen
2007-04-06 23:46 ` jayessay
2007-04-06 23:59 ` jayessay
2007-04-06 22:16 ` Hyman Rosen
2007-04-06 23:52 ` jayessay
2007-04-07 0:39 ` Ray Blaak
2007-04-06 17:52 ` jayessay
2007-03-30 8:29 ` Markus E Leypold
2007-03-30 8:35 ` Markus E Leypold
2007-03-30 17:39 ` adaworks
2007-03-31 14:59 ` Steve
2007-03-31 15:59 ` Markus E Leypold
2007-04-01 14:32 ` Ed Falis
2007-04-02 7:03 ` adaworks
2007-03-31 15:14 ` Pascal Obry
2007-04-02 5:27 ` kevin cline
2007-04-02 6:04 ` Harald Korneliussen
2007-04-02 6:33 ` Shortage on C / C++ experts Martin Krischik
2007-04-02 7:07 ` why learn C? adaworks
2007-04-02 7:18 ` kevin cline
2007-04-02 13:00 ` adaworks
2007-04-12 15:28 ` Hyman Rosen
2007-04-12 18:32 ` Robert A Duff
2007-04-13 15:59 ` Hyman Rosen
2007-04-14 22:20 ` Robert A Duff
2007-04-14 22:46 ` Randy Brukardt
2007-04-22 18:53 ` adaworks
2007-04-22 19:50 ` Gautier
2007-04-03 0:26 ` Markus E Leypold
2007-04-03 0:34 ` Markus E Leypold
2007-04-03 2:22 ` jimmaureenrogers
2007-04-12 15:47 ` Hyman Rosen
2007-04-12 16:18 ` Markus E Leypold
2007-04-13 23:18 ` kevin cline
2007-04-14 9:38 ` Georg Bauhaus
2007-04-14 10:57 ` Markus E Leypold
2007-04-15 15:10 ` Simon Wright
2007-04-15 16:05 ` Markus E Leypold
2007-04-15 0:59 ` Hyman Rosen
2007-04-15 15:28 ` Markus E Leypold
2007-04-12 16:39 ` Dmitry A. Kazakov
2007-04-12 20:54 ` Georg Bauhaus
2007-04-12 20:33 ` Dmitry A. Kazakov
2007-04-12 21:40 ` Georg Bauhaus
2007-04-12 20:50 ` Dmitry A. Kazakov
2007-04-13 0:32 ` Markus E Leypold
2007-04-14 22:27 ` Robert A Duff
2007-04-14 1:20 ` jimmaureenrogers
2007-04-02 5:03 ` Brian May
2007-04-02 6:16 ` kevin cline
2007-04-03 0:00 ` Brian May
2007-04-12 15:56 ` Hyman Rosen
2007-04-12 16:19 ` Markus E Leypold
2007-04-13 23:42 ` Georg Bauhaus
2007-04-03 0:13 ` Markus E Leypold [this message]
2007-04-02 11:47 ` Shortage on C / C++ experts Larry Kilgallen
2007-04-02 12:01 ` Ludovic Brenta
2007-04-02 12:15 ` Dmitry A. Kazakov
2007-04-02 18:47 ` Alexander E. Kopilovich
2007-04-02 20:43 ` tmoran
2007-03-30 4:52 ` why learn C? jimmaureenrogers
2007-03-30 6:30 ` Case Crab
2007-03-30 6:37 ` Gautier
2007-03-30 9:17 ` Georg Bauhaus
2007-03-31 13:18 ` Peter C. Chapin
2007-04-01 1:23 ` Georg Bauhaus
2007-04-01 11:59 ` Peter C. Chapin
2007-04-02 6:37 ` kevin cline
2007-04-02 9:39 ` Harald Korneliussen
2007-03-30 17:47 ` adaworks
2007-03-30 19:25 ` Markus E Leypold
2007-03-30 20:29 ` Randy Brukardt
2007-03-31 9:52 ` Dmitry A. Kazakov
2007-04-01 1:35 ` adaworks
2007-03-31 2:41 ` jimmaureenrogers
2007-03-31 12:25 ` not NASA Ada coding standard Stephen Leake
2007-03-31 15:44 ` Markus E Leypold
2007-04-01 16:22 ` Simon Clubley
2007-04-02 10:08 ` Stephen Leake
2007-04-02 7:43 ` why learn C? kevin cline
2007-04-02 8:45 ` Martin Krischik
2007-04-02 10:54 ` Georg Bauhaus
2007-04-12 16:05 ` Hyman Rosen
2007-04-12 16:48 ` Dmitry A. Kazakov
2007-04-12 18:27 ` Robert A Duff
2007-04-13 16:21 ` Hyman Rosen
2007-04-12 21:11 ` Georg Bauhaus
2007-04-13 15:45 ` Hyman Rosen
2007-04-02 8:13 ` kevin cline
2007-04-02 23:54 ` Randy Brukardt
2007-04-03 2:58 ` jimmaureenrogers
2007-04-12 16:24 ` Hyman Rosen
2007-04-12 18:05 ` Markus E Leypold
2007-04-15 0:55 ` Hyman Rosen
2007-04-15 7:55 ` Dmitry A. Kazakov
2007-04-15 15:25 ` Markus E Leypold
2007-03-31 11:40 ` Larry Kilgallen
[not found] ` <1175236212.771445.135460@y66g2Organization: LJK Software <c82IfUV$xbi8@eisner.encompasserve.org>
2007-03-31 18:56 ` adaworks
2007-03-31 20:10 ` Markus E Leypold
2007-04-01 18:13 ` tmoran
2007-03-31 19:33 ` Cesar Rabak
2007-03-31 20:11 ` Markus E Leypold
2007-03-30 8:16 ` Markus E Leypold
2007-03-30 9:10 ` Georg Bauhaus
2007-03-30 19:16 ` Pascal Obry
2007-04-01 11:41 ` Martin Krischik
2007-04-01 17:03 ` Pascal Obry
2007-04-01 18:13 ` tmoran
2007-04-16 2:09 ` Brian May
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox