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,591cbead201d7f34 X-Google-Attributes: gid103376,public,usenet X-Google-Language: ENGLISH,ASCII-7-bit Path: g2news1.google.com!postnews.google.com!p25g2000hsf.googlegroups.com!not-for-mail From: gpriv@axonx.com Newsgroups: comp.lang.ada Subject: Re: Prohibiting dynamic allocation for the given type Date: Wed, 19 Mar 2008 16:40:46 -0700 (PDT) Organization: http://groups.google.com Message-ID: <1de6248d-fc91-4522-a7d9-e7fa55c223c8@p25g2000hsf.googlegroups.com> References: <83335709-e099-416b-9967-5ab6aa0aea11@i12g2000prf.googlegroups.com> <89ac4348-4c21-478e-b491-97bfbebfdb86@p73g2000hsd.googlegroups.com> <47e1910c$0$4754$9b4e6d93@newsspool3.arcor-online.net> NNTP-Posting-Host: 151.196.71.114 Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Trace: posting.google.com 1205970047 21830 127.0.0.1 (19 Mar 2008 23:40:47 GMT) X-Complaints-To: groups-abuse@google.com NNTP-Posting-Date: Wed, 19 Mar 2008 23:40:47 +0000 (UTC) Complaints-To: groups-abuse@google.com Injection-Info: p25g2000hsf.googlegroups.com; posting-host=151.196.71.114; posting-account=YaY8rAoAAAAAnFXOECY3BGVJsrvFJCgy User-Agent: G2/1.0 X-HTTP-Via: 1.1 SPARKS X-HTTP-UserAgent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.12) Gecko/20080201 Firefox/2.0.0.12,gzip(gfe),gzip(gfe) Xref: g2news1.google.com comp.lang.ada:20497 Date: 2008-03-19T16:40:46-07:00 List-Id: On Mar 19, 6:17 pm, Georg Bauhaus wrote: > Maciej Sobczak wrote: > > On 19 Mar, 04:06, gp...@axonx.com wrote: > > >> Ada is high level language > > > That does not matter. > > Ada is a high level language, but still provides two ways to create an > > object: > > > X : Type; > > Y : Type_Ptr := new Type; > > > If these two methods are available, then apparently there is a > > difference between them and this difference is not in *where* objects > > are created, but *how long* they are allowed to live. > > > The high-level part of Ada can hide the "where" part, but not "how > > long". > > (Somehow a posting of today is only visible through Google, > but not via the news server, apologies if this a repeated > remark.) > > Using Ada 2005, you can have some of the "how long" control. > Deriving in nested scopes will limit the objects to that > scope. This includes heap objects. For example, you cannot > use pointers to Parent'Class to refer to objects of inner > scope types. > > package body News10 is > > use Ada; > > procedure Scope is > type T is new Finalization.Controlled with null record; > type T_Ptr is access all T; > > overriding > procedure Finalize(Object: in out T) is > -- just show what is going on > begin > Text_IO.Put_Line("Finalized"); > end Finalize; > > X: T_Ptr; > begin > Text_IO.Put_Line("Enter"); > X := new T; > pragma Inspection_Point(X); > Text_IO.Put_Line("Exit"); > end Scope; > > end News10; > > with News10; > procedure Test_News10 is > begin > loop > News10.Scope; > delay 2.0; > end loop; > end; In that case one has to derive the type from parent within the scope of interest. Does it really improve clarity? And what will prevent others from using instances of parent class (unless it's abstract). For the sake of argument let's consider example where data transmission should be uninterrupted by competing threads: declare Lock : Lock_T (Io.Frame_Mutex); begin Io.Put_Line (':' & Trim (Device_Count'Image (Idx - 1), Both) & " frame bin " & Image_Size_T'Image (Frame (Frm).Size)); Io.Write (Frame (Frm).Image); Io.Put_Line (""); end; Lock is referenced only once and intent is pretty obvious. If one would want to lock mutex for longer time the solution would be: Cmd.Frame_Mutex.Enter; ... Cmd.Frame_Mutex.Leave; In C++ one can privatize new/delete overrides to prevent object from heap allocation. However, it won't prevent some ignorant user from statically allocating the object deadlocking for the lifetime of the entire application. It's all false sense of security IMHO. George.