From: "John G. Volan" <johnvolan@sprintmail.com>
Subject: Re: Any research putting c above ada?
Date: 1997/05/09
Date: 1997-05-09T00:00:00+00:00 [thread overview]
Message-ID: <3372D44E.5F44@sprintmail.com> (raw)
In-Reply-To: 208C9C61CA05C32B.65D82DC950AAA33A.D68E7B27EB42E98A@library-proxy.airnews.net
Kevin Cline wrote:
>
> eachus@spectre.mitre.org (Robert I. Eachus) wrote:
>
> > First, many of the calls to malloc and free in C and C++ just go
> >away, since a lot of the allocations that have to be done on the heap
> >in C end up on the stack in Ada. The most obvious example is that a
> >function can return an unconstrained array without the programmer
> >putting it in the heap. The compiler may or may not use the
> >heap--most prefer to play games with the stack or to have two
> >stacks--but that is an implementation detail, and there is no
> >(programmer) risk of memory leaks or invalid pointers.
>
> The last time I tried this, the compiler copied the entire array when the
> function returned. That much overhead was completely unexpected, and in my
> case, also unacceptable. I don't like languages that hide large amounts of
> overhead in simple operations. It's okay if they let me hide it through
> operator overloading. But I don't enjoy finding out when I port my program
> that a function return is massively wasteful. In C++, you would solve this
> problem by passing a reference to a container.
And promptly run into bizarre undefined behavior, because the container
whose reference you were returning happened to be one you declared
locally on the stack:
MyContainer& MyClass::myFunction () const {
MyContainer myContainer;
... // build value in myContainer
return myContainer; // dangling reference returned after
destructor!!!
}
or
MyContainer* MyClass::myFunction () const {
MyContainer myContainer;
... // build value in myContainer
return &myContainer; // dangling pointer returned after
destructor!!!
}
AFAIK, C++ compilers don't warn you about this. On the other hand,
Ada95's extensive rules about static accessibility levels guarantee that
this sort of thing won't happen, because it's illegal:
type My_Container_Pointer_Type is access all My_Container_Type;
function My_Function (This : in My_Class_Type)
return My_Container_Pointer_Type
is
My_Container : aliased My_Container_Type;
begin
... -- build value in My_Container
return My_Container'Access; -- compiler error! My_Container too
deep!
end My_Function;
Of course, if you know what you're doing in C++ (no small feat), you'll
be sure to return by value:
MyContainer MyClass::myFunction () const {
MyContainer myContainer;
.. // build value in myContainer
return myContainer; // copy constructor called on return
}
But this, while safe, yields the same efficiency concerns you raised
about Ada's copying-on-return:
function My_Function (This : in My_Class_Type)
return My_Container_Type
is
My_Container : My_Container_Type;
begin
... -- build value in My_Container
return My_Container; -- copy done on return
end My_Function; -- (and Adjust called if Controlled)
So now, if you _really_ know what you're doing, you could fall back on
using the heap:
MyContainer* MyClass::myFunction () const {
MyContainer *myContainer = new MyContainer;
... // build value in *myContainer
return myContainer;
}
The same can of course be done in Ada95:
function My_Function (This : in My_Class_Type)
return My_Container_Pointer_Type
is
My_Container : My_Container_Pointer_Type := new My_Container_Type;
begin
... -- build value in My_Container.all
return My_Container;
end My_Function;
But then we're back where we started, doing our own heap management by
hand:
{
MyClass m1, m2, m3;
MyContainer *c1 = m1.myFunction();
MyContainer *c2 = m2.myFunction();
MyContainer *c3 = m3.myFunction();
... 100 lines later
delete c1;
delete c2;
}
// oops! forgot c3! memory leak!
Of course, you can fall into the same trap in Ada95:
declare
procedure Deallocate is new Ada.Unchecked_Deallocation
(My_Container_Type, My_Container_Pointer_Type);
...
M1, M2, M3 : My_Class_Type;
C1 : My_Container_Pointer_Type := My_Function(M1);
C2 : My_Container_Pointer_Type := My_Function(M2);
C3 : My_Container_Pointer_Type := My_Function(M3);
begin
... 100 lines later
Deallocate (C1);
Deallocate (C2);
end;
-- oops! forgot C3! memory leak!
So don't turn your nose up so fast about the return-by-copy mechanism in
Ada95 (or in C++ for that matter). Sure, you lose some efficiency, but
you get a lot of safety from that!
[snip]
> > Buffer := To_Unbounded_String(My_IO.Get_Line(Foo));
[snip]
> > In this example, the length of Buffer changes each time through
> >the loop, but again the programmer doesn't have to manage any pointers,
> >allocation, or deallocation.
>
> No, but he will probably pay for the string to be copied twice, once upon
> return from My_IO.Get_Line, and once in the conversion.
Probably, but I think it depends on the particular compiler and what
fancy optimizations it has. I believe a smart compiler can legally
eliminate one of these copies ... but I should let the compiler gurus
have the last word on this.
------------------------------------------------------------------------
Internet.Usenet.Put_Signature
(Name => "John G. Volan", Home_Email => "johnvolan@sprintmail.com",
Slogan => "Ada95: The World's *FIRST* International-Standard OOPL",
Disclaimer => "These opinions were never defined, so using them " &
"would be erroneous...or is that just nondeterministic now? :-) ");
------------------------------------------------------------------------
next prev parent reply other threads:[~1997-05-09 0:00 UTC|newest]
Thread overview: 295+ messages / expand[flat|nested] mbox.gz Atom feed top
1997-04-09 0:00 Any research putting c above ada? Konstantin B. Goldin
1997-04-10 0:00 ` Richard Krehbiel
1997-04-10 0:00 ` Andrew Dunstan
1997-04-10 0:00 ` Tom Wheeley
1997-04-11 0:00 ` Richard Kenner
1997-04-16 0:00 ` Daniel P Hudson
1997-04-17 0:00 ` Stephen Leake
1997-04-10 0:00 ` Philip Brashear
1997-04-10 0:00 ` CubanPete
1997-04-11 0:00 ` John Thomas Apa
1997-04-11 0:00 ` Gary W Smith
1997-04-11 0:00 ` Steve Jones - JON
1997-04-11 0:00 ` Kaz Kylheku
1997-04-12 0:00 ` Tom Wheeley
[not found] ` <01bc46be$fb54cae0$3f6700cf@default>
1997-04-13 0:00 ` Kaz Kylheku
1997-04-14 0:00 ` Craig Franck
[not found] ` <33526cbf.41c6@cca.rockwell.com>
[not found] ` <5iusvd$118e@newssvr01-int.news.prodigy.com>
1997-04-14 0:00 ` James S. Rogers
[not found] ` <33530e22.5940@worldnet.att.net>
1997-04-16 0:00 ` Matthew Givens
1997-04-18 0:00 ` Kenneth Almquist
1997-04-20 0:00 ` Matthew Givens
1997-04-22 0:00 ` Alan Brain
[not found] ` <335d880c.324@dynamite.com.au>
1997-05-04 0:00 ` Matthew Givens
1997-05-05 0:00 ` Alan Brain
[not found] ` <336ea9ca.3c92@dynamite.com.au>
1997-05-07 0:00 ` Matthew Givens
1997-05-06 0:00 ` Tom Moran
1997-05-07 0:00 ` Jon S Anthony
1997-05-07 0:00 ` Jon S Anthony
1997-05-07 0:00 ` Kevin Cline
[not found] ` <5aedd9b0882ea1bf.69856d7f77cd2ae3.229bf1374681c88b@library-proxy.airnews.net>
1997-05-10 0:00 ` Matthew Givens
1997-05-10 0:00 ` Robert S. White
1997-05-11 0:00 ` Kevin Cline
1997-05-16 0:00 ` brad.balfour
1997-05-14 0:00 ` T Wheeley
1997-04-19 0:00 ` Tom Wheeley
[not found] ` <33541be1.14961570@news.airmail.net>
1997-04-16 0:00 ` Matthew Givens
1997-04-16 0:00 ` Dale Stanbrough
[not found] ` <3353a187.1062@bix.com>
1997-04-16 0:00 ` Matthew Givens
1997-04-17 0:00 ` Tom Moran
[not found] ` <33545F8D.2AF4@worldnet.att.net>
[not found] ` <335569F1.55A0@pratique.fr>
1997-04-20 0:00 ` Nick Roberts
[not found] ` <5j0e5i$qgi@bcrkh13.bnr.ca>
1997-04-16 0:00 ` Matthew Givens
[not found] ` <5j4ijn$3ta1@news.knox.edu>
1997-04-17 0:00 ` Kaz Kylheku
1997-04-18 0:00 ` Tim Behrendsen
[not found] ` <33552C53.41C6@cca.rockwell.com>
1997-04-20 0:00 ` Steve Doiel
1997-04-20 0:00 ` Jay Martin
1997-04-21 0:00 ` Robert I. Eachus
1997-04-14 0:00 ` Roy Grimm
1997-04-11 0:00 ` Terry Colligan
1997-04-11 0:00 ` Larry J. Elmore
1997-04-12 0:00 ` Terry Colligan
[not found] ` <3359e813.340466234@news.pacificnet.net>
1997-04-11 0:00 ` James S. Rogers
1997-04-12 0:00 ` Steve Summit
1997-04-12 0:00 ` Danette & Murray Root
1997-04-12 0:00 ` Dave Wood
1997-04-13 0:00 ` Larry Kilgallen
[not found] ` <3373409f.494266577@news.pacificnet.net>
1997-04-13 0:00 ` Dave Wood
[not found] ` <E8pxJ0.I3s@thomsoft.com>
[not found] ` <3355E0F2.56E5@aonix.com>
1997-04-18 0:00 ` David Hanley
1997-04-20 0:00 ` Nick Roberts
1997-04-14 0:00 ` Kaz Kylheku
1997-04-14 0:00 ` Robert S. White
1997-04-14 0:00 ` Kaz Kylheku
1997-04-15 0:00 ` Robert S. White
[not found] ` <5ivtcu$puv@huron.eel.ufl.edu>
1997-04-16 0:00 ` Kaz Kylheku
1997-04-16 0:00 ` Byron
1997-04-16 0:00 ` John Winters
[not found] ` <5j31dt$o3j@huron.eel.ufl.edu>
1997-04-17 0:00 ` Kaz Kylheku
1997-04-18 0:00 ` David Thornley
[not found] ` <338a1835.439086993@news.pacificnet.net>
1997-04-25 0:00 ` Alan Bowler
[not found] ` <01bc4da9$75237100$f4f582c1@xhv46.dial.pipex.com>
1997-04-21 0:00 ` Daniel P Hudson
1997-04-21 0:00 ` Robert I. Eachus
1997-04-14 0:00 ` Stephen Leake
1997-04-12 0:00 ` David Weller
1997-04-13 0:00 ` Kaz Kylheku
1997-04-27 0:00 ` Richard Riehle
1997-04-29 0:00 ` Kaz Kylheku
1997-04-30 0:00 ` Jon S Anthony
1997-05-01 0:00 ` Kaz Kylheku
1997-05-02 0:00 ` Jon S Anthony
1997-05-03 0:00 ` Craig Franck
1997-05-03 0:00 ` Matthew Givens
1997-05-03 0:00 ` Robert S. White
1997-04-30 0:00 ` Robert I. Eachus
1997-04-30 0:00 ` Kaz Kylheku
1997-05-01 0:00 ` Robert I. Eachus
1997-05-03 0:00 ` Student responsability (Was: Any research putting c above ada?) Laurent Gasser
1997-05-03 0:00 ` John Bode
1997-05-05 0:00 ` Steven Huang
1997-05-05 0:00 ` Any research putting c above ada? John Apa
1997-05-06 0:00 ` Kevin Cline
1997-05-06 0:00 ` Roy Grimm
1997-05-07 0:00 ` John Apa
1997-05-08 0:00 ` Kevin Cline
1997-05-10 0:00 ` John Apa
1997-05-11 0:00 ` Kevin Cline
1997-05-14 0:00 ` Nick Roberts
1997-05-08 0:00 ` Roy Grimm
1997-05-07 0:00 ` Kevin Cline
1997-05-07 0:00 ` Roy Grimm
1997-05-07 0:00 ` Kaz Kylheku
1997-05-08 0:00 ` Kevin Cline
1997-05-08 0:00 ` Roy Grimm
1997-05-08 0:00 ` Kaz Kylheku
1997-05-09 0:00 ` Kevin Cline
1997-05-10 0:00 ` Dan Shea
1997-05-11 0:00 ` Kevin Cline
1997-05-08 0:00 ` Alan Brain
1997-05-07 0:00 ` Adam Beneschan
1997-05-09 0:00 ` Richard A. O'Keefe
1997-05-09 0:00 ` Larry Weiss
1997-05-11 0:00 ` Kevin Cline
1997-05-11 0:00 ` Jay Martin
1997-05-12 0:00 ` Kevin Cline
1997-05-12 0:00 ` Robert I. Eachus
1997-05-14 0:00 ` Kevin Cline
1997-05-12 0:00 ` Craig Franck
1997-05-12 0:00 ` Kevin Cline
1997-05-13 0:00 ` Craig Franck
1997-05-13 0:00 ` Jonathan Guthrie
1997-05-14 0:00 ` Mathew Hendry
[not found] ` <F4243E31257E3230.1400B453F19F7D1B.A88AC4B6A31D <5l8gf8$2jp@mtinsc05.worldnet.att.net>
1997-05-13 0:00 ` Kaz Kylheku
1997-05-13 0:00 ` Lawrence Kirby
1997-05-14 0:00 ` T Wheeley
1997-05-15 0:00 ` Ray Blaak
1997-05-16 0:00 ` Alan Brain
[not found] ` <5lb2mi$3i2@mtinsc03.worldnet.att.net>
1997-05-14 0:00 ` Jonathan Guthrie
1997-05-14 0:00 ` Szu-Wen Huang
1997-05-15 0:00 ` Jonathan Guthrie
[not found] ` <EA8sny.HKJ@thinkage.on.ca>
1997-05-16 0:00 ` W. Wesley Groleau (Wes)
1997-05-14 0:00 ` M. Prasad
[not found] ` <rayEA5A7D.932@netcom.com>
1997-05-14 0:00 ` W. Wesley Groleau (Wes)
1997-05-14 0:00 ` Steve Jones - JON
1997-05-17 0:00 ` Robert I. Eachus
1997-04-30 0:00 ` Jay Martin
1997-05-01 0:00 ` Kevin Cline
1997-05-01 0:00 ` Robert I. Eachus
1997-05-05 0:00 ` Jay Martin
1997-05-06 0:00 ` Kevin Cline
1997-05-07 0:00 ` Robert I. Eachus
1997-04-30 0:00 ` Roy Grimm
1997-04-30 0:00 ` Kaz Kylheku
1997-04-30 0:00 ` Jay Martin
1997-05-02 0:00 ` Samuel A. Mize
1997-05-05 0:00 ` Roy Grimm
1997-05-06 0:00 ` Robert I. Eachus
1997-05-07 0:00 ` Jay Martin
1997-05-07 0:00 ` Kaz Kylheku
1997-05-08 0:00 ` Jay Martin
1997-05-08 0:00 ` Kevin Cline
1997-05-09 0:00 ` Alan Brain
1997-05-08 0:00 ` Robert I. Eachus
1997-05-09 0:00 ` Kevin Cline
1997-05-11 0:00 ` deafen
1997-05-12 0:00 ` Roy Grimm
1997-05-12 0:00 ` Kaz Kylheku
1997-05-01 0:00 ` Roy Grimm
1997-05-01 0:00 ` Kaz Kylheku
1997-05-02 0:00 ` Roy Grimm
1997-05-02 0:00 ` Jon S Anthony
1997-05-05 0:00 ` Steve Furlong
1997-05-06 0:00 ` Kevin Cline
1997-05-06 0:00 ` Jon S Anthony
1997-05-06 0:00 ` Robert A Duff
1997-05-08 0:00 ` Lawrence Kirby
1997-05-14 0:00 ` T Wheeley
1997-05-14 0:00 ` Kaz Kylheku
1997-05-01 0:00 ` Jay Martin
1997-05-10 0:00 ` Fritz W Feuerbacher
1997-05-11 0:00 ` Wilbur Streett
1997-05-12 0:00 ` Kevin Cline
1997-05-20 0:00 ` T Wheeley
[not found] ` <33508283.56dd@aonix.com>
[not found] ` <33526280.62b3@gsfc.nasa.gov>
[not found] ` <5ivths$pv2@huron.eel.ufl.edu>
1997-04-16 0:00 ` Matthew Givens
[not found] ` <m2ragbrmij.fsf@acm.org>
1997-04-20 0:00 ` Nick Roberts
1997-04-11 0:00 ` James Youngman
1997-04-11 0:00 ` Steve Summit
1997-04-12 0:00 ` Dave Wood
1997-04-14 0:00 ` Chris Lomont
1997-04-16 0:00 ` Dave Wood
1997-04-14 0:00 ` Alan Brain
1997-04-17 0:00 ` Jon S Anthony
1997-04-10 0:00 ` Daniel P Hudson
1997-04-10 0:00 ` Matthew Heaney
1997-04-10 0:00 ` Thomas Aho
1997-04-10 0:00 ` Bob Stout
1997-04-14 0:00 ` Steve Jones - JON
1997-04-14 0:00 ` Kaz Kylheku
1997-04-15 0:00 ` Matthew Givens
[not found] ` <335ae79e.55ed@dynamite.com.au>
1997-04-20 0:00 ` Matthew Givens
1997-04-28 0:00 ` Andrew Dunstan
1997-04-29 0:00 ` Matthew Givens
1997-05-06 0:00 ` Andrew Dunstan
1997-05-07 0:00 ` Kevin Cline
1997-05-07 0:00 ` Jon S Anthony
1997-05-07 0:00 ` Jeff Carter
1997-05-08 0:00 ` Robert I. Eachus
1997-05-09 0:00 ` Kevin Cline
1997-05-09 0:00 ` John G. Volan [this message]
1997-05-11 0:00 ` Kevin Cline
1997-05-12 0:00 ` John G. Volan
1997-05-12 0:00 ` John G. Volan
1997-05-13 0:00 ` Alan Brain
1997-05-14 0:00 ` Kevin Cline
1997-05-16 0:00 ` Alan Brain
1997-05-17 0:00 ` Kevin Cline
1997-05-17 0:00 ` John G. Volan
1997-05-18 0:00 ` Kevin Cline
1997-05-18 0:00 ` Jon S Anthony
1997-05-18 0:00 ` Brian Rogoff
1997-05-19 0:00 ` Kevin Cline
1997-05-19 0:00 ` Jon S Anthony
1997-05-19 0:00 ` John G. Volan
1997-05-20 0:00 ` Kevin Cline
1997-05-20 0:00 ` Jeff Carter
1997-05-21 0:00 ` Alan Brain
1997-05-21 0:00 ` Brian Rogoff
1997-05-21 0:00 ` STL in Ada95 [was: Any research putting c above ada?] John G. Volan
1997-05-22 0:00 ` Brian Rogoff
1997-05-23 0:00 ` Iterator Syntax [was: Re: STL in Ada95] Jeff Carter
1997-05-23 0:00 ` Michel Gauthier
1997-05-23 0:00 ` John G. Volan
1997-05-23 0:00 ` Brian Rogoff
1997-05-22 0:00 ` STL in Ada95 [was: Any research putting c above ada?] Brian Rogoff
1997-05-23 0:00 ` Jon S Anthony
1997-05-24 0:00 ` Brian Rogoff
1997-05-17 0:00 ` Any research putting c above ada? Dale Stanbrough
1997-05-12 0:00 ` Robert I. Eachus
1997-04-30 0:00 ` Daniel P Hudson
1997-04-30 0:00 ` Adam Beneschan
1997-05-02 0:00 ` Daniel P Hudson
1997-04-20 0:00 ` Alan Brain
[not found] ` <5j078b$b25$1@NNTP.MsState.Edu>
1997-04-16 0:00 ` Peter Amey
[not found] ` <5j31lj$qnk@huron.eel.ufl.edu>
1997-04-24 0:00 ` Suzette Norby
1997-04-25 0:00 ` Kaz Kylheku
1997-04-26 0:00 ` Larry Wissig
1997-04-26 0:00 ` Nick Roberts
1997-04-26 0:00 ` Lawrence Kirby
1997-04-27 0:00 ` b-see
1997-04-26 0:00 ` Kaz Kylheku
1997-04-28 0:00 ` Jon S Anthony
1997-04-26 0:00 ` Mike Haertel
1997-04-26 0:00 ` Kaz Kylheku
1997-04-27 0:00 ` Nick Roberts
1997-04-28 0:00 ` Istvan.Simon
1997-04-27 0:00 ` Jerry van Dijk
1997-04-25 0:00 ` Craig Franck
1997-04-28 0:00 ` Jon S Anthony
1997-04-29 0:00 ` Andrew Koenig
1997-04-29 0:00 ` Tom Moran
1997-04-30 0:00 ` Robert I. Eachus
1997-05-01 0:00 ` Alan Brain
1997-04-30 0:00 ` Jon S Anthony
1997-05-01 0:00 ` Kaz Kylheku
1997-04-30 0:00 ` Kaz Kylheku
1997-04-30 0:00 ` Craig Franck
1997-04-30 0:00 ` Robert I. Eachus
1997-04-30 0:00 ` Pat Rogers
1997-05-02 0:00 ` Jon S Anthony
1997-05-01 0:00 ` Jon S Anthony
1997-04-17 0:00 ` Daniel P Hudson
[not found] ` <335458A4.4C1D@worldnet.att.net>
[not found] ` <5j416b$hau@mtinsc04.worldnet.att.net>
1997-04-18 0:00 ` Mark & Zurima McKinney
1997-04-19 0:00 ` Craig Franck
1997-04-21 0:00 ` Robert I. Eachus
[not found] ` <5j30oa$ia9@bcrkh13.bnr.ca>
[not found] ` <3355739E.7B24@pratique.fr>
1997-04-18 0:00 ` Kaz Kylheku
1997-04-23 0:00 ` David Emery
1997-04-17 0:00 ` Chris Morgan
1997-04-17 0:00 ` Jon S Anthony
1997-04-17 0:00 ` Jon S Anthony
1997-04-18 0:00 ` David Emery
1997-04-21 0:00 ` Jim Hyslop
-- strict thread matches above, loose matches on Subject: below --
1997-04-10 0:00 tmoran
1997-04-11 0:00 ` Richard Krehbiel
1997-04-17 0:00 Marin David Condic, 561.796.8997, M/S 731-93
1997-05-03 0:00 tmoran
1997-05-03 0:00 ` Jon S Anthony
1997-05-15 0:00 Jon S Anthony
1997-05-15 0:00 ` Kaz Kylheku
1997-05-15 0:00 ` Jon S Anthony
[not found] ` <01bc6189$b074f500$LocalHost@xhv46.dial.pipex.com>
1997-05-16 0:00 ` Kaz Kylheku
1997-05-16 0:00 ` Jon S Anthony
1997-05-18 0:00 ` Nick Roberts
1997-05-19 0:00 ` Michael Norrish
1997-05-20 0:00 ` Jon S Anthony
1997-05-20 0:00 ` Michael Norrish
1997-05-20 0:00 ` Kaz Kylheku
1997-05-20 0:00 ` Jon S Anthony
1997-05-21 0:00 ` Kaz Kylheku
1997-05-21 0:00 ` Craig Franck
1997-05-20 0:00 ` Jon S Anthony
1997-05-20 0:00 ` Kaz Kylheku
1997-05-20 0:00 ` Jon S Anthony
1997-05-20 0:00 ` Les Hazlewood
1997-05-20 0:00 ` Jason A Cunningham
1997-05-21 0:00 ` Stephan Wilms
1997-05-21 0:00 ` Jason A Cunningham
1997-05-16 0:00 ` T Wheeley
1997-05-16 0:00 ` Jon S Anthony
1997-05-16 0:00 Jon S Anthony
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox