comp.lang.ada
 help / color / mirror / Atom feed
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? :-) ");
------------------------------------------------------------------------




  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