From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham autolearn_force=no version=3.4.4 X-Google-Thread: 103376,e859f774bbb3dfb3 X-Google-Attributes: gid103376,domainid0,public,usenet X-Google-Language: ENGLISH,ASCII-7-bit Path: g2news1.google.com!news3.google.com!feeder.news-service.com!feeder1.cambrium.nl!feeder5.cambrium.nl!feed.tweaknews.nl!not-for-mail From: Ludovic Brenta Newsgroups: comp.lang.ada Subject: Re: another way to shoot yourself in the foot? References: <54157920-377a-441b-9b0b-f0c4f9ddffec@f36g2000hsa.googlegroups.com> <54435596-5e7f-4686-a2b7-1e22d7c4b186@p25g2000hsf.googlegroups.com> <483ugmvkl2ea.1hrqsq7ru4t1x$.dlg@40tude.net> <12dhu8e1w5ac9.1s9hzkf9d2rsy$.dlg@40tude.net> <21d80cc3-a3fb-49f5-a46e-6056bbef2ba7@y21g2000hsf.googlegroups.com> <1lbujyle8itjn$.vffs9far1ob9.dlg@40tude.net> Date: Tue, 24 Jun 2008 22:50:10 +0200 Message-ID: <87abhablrx.fsf@ludovic-brenta.org> User-Agent: Gnus/5.110006 (No Gnus v0.6) Emacs/21.4 (gnu/linux) Cancel-Lock: sha1:2of36ej1hJWf0gTKYVR9KtA2u7s= MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Organization: Tele2 X-Trace: DXC=N08m@Q`6R[YXBa>k_9591R6`Y6aWje^YZ@;?QGg\H36Q1B4<]HH1:nSVdIT95cMA2]2AgUNoTUYW[ Xref: g2news1.google.com comp.lang.ada:851 Date: 2008-06-24T22:50:10+02:00 List-Id: Robert A Duff writes: > But in Ada 95, if you say: > > P(F(...)); > > where F returns limited, you are not passing a limited object, > but an implicit reference to some object that already existed before the > call to F. [...] > In Ada 2005, functions always return newly-created objects, which I > think is appropriate. This makes me wonder whether there is an actual difference in the way the compiler handles such returns. For example, has GNAT changed a lot in this area? Do the Ada 95 and Ada 2005 compatibility modes use antirely different compilation strategies? > if F(...).Flag then ... > > The last one is pretty silly -- it creates a new limited object, > grabs a boolean flag out of it, and then throws the whole thing > away. Yes but "grabbing a boolean flag" might consist in passing the limited object as a parameter to a primitive function named Flag, which might then pass it down to any number of subprograms with all sorts of side effects. One could write an arbitrarily large program like this :) -- Ludovic Brenta.