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,5e53057e86953953 X-Google-Attributes: gid103376,domainid0,public,usenet X-Google-Language: ENGLISH,ASCII-7-bit Path: g2news1.google.com!news1.google.com!news2.google.com!border1.nntp.dca.giganews.com!nntp.giganews.com!local02.nntp.dca.giganews.com!nntp.telenor.com!news.telenor.com.POSTED!not-for-mail NNTP-Posting-Date: Tue, 17 Jun 2008 04:14:59 -0500 From: Reinert Korsnes Subject: Re: Question on initialization of packages Newsgroups: comp.lang.ada Date: Tue, 17 Jun 2008 11:14:59 +0200 References: <1pok6brk3yyxf$.ct5gwnf4g97p$.dlg@40tude.net> User-Agent: KNode/0.10.4 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7Bit Message-ID: X-Usenet-Provider: http://www.giganews.com X-Trace: sv3-lPlzlbHXIbWchBDti5rdrhpGTQlJEwCaYs0matoXt7b0rjogz8xDUi5yd78TBo0KkjzWhq0DMqGmoBT!BfMU9sLqOLyiJzI6Cz02F1fSL/1Mbn96YhBWvPOJSOQaGrM7D6ki63CrzZ80F4oRN5r+q46vtWE= X-Complaints-To: news-abuse@telenor.net X-DMCA-Complaints-To: news-abuse@telenor.net X-Abuse-and-DMCA-Info: Please be sure to forward a copy of ALL headers X-Abuse-and-DMCA-Info: Otherwise we will be unable to process your complaint properly X-Postfilter: 1.3.39 Xref: g2news1.google.com comp.lang.ada:735 Date: 2008-06-17T11:14:59+02:00 List-Id: Dmitry A. Kazakov wrote: > On Tue, 17 Jun 2008 10:07:43 +0200, Reinert Korsnes wrote: > >> Assume the package definition given below, >> and the follow code in my program: >> >> type Message_t; >> type Message_ta is access Message_t; >> package Message_Stack_p is new Stacks(Message_ta); >> Send_Stack : Message_Stack_p.Stack; >> >> Question: How can I be sure that "Send_Stack" is empty >> at the start of the program execution ? > > Hmm, "sure" in which sense? To make it visible for the reader? To specify > in the contract of Stack that it is initially empty? Yes, yes, to make it visible for the reader. > > As for implementation you posted, the stack is empty, because instances of > access types are initialized with null (when not explicitly initialized Yes, but I do not like things depend on the particular implementation :-) > otherwise). Below you declare: > >> type Stack is access Cell; > > And > > Send_Stack : Message_Stack_p.Stack; -- This will be null = empty > > > Now side comments: > > 1. > >> procedure Pop(S: in out Stack; X: out Item) is >> begin >> X := S.Value; >> S := S.Next; >> end; > > This is a memory leak. If you allocated a stack element on push, you > should free it on pop. How I free it? I may not have a deep enough understanding here :-) > > 2. Package initialization is achieved as follows: > > package body P is > ... > begin > ... -- Initialize package stuff > end P; > > 3. Package initialization cannot help you here, because the package > declares an abstract data type of which objects can be created long after > the package itself was elaborated (initialized). But I would like to make it clear for all that the stack is empty at the start of my program ! (also after that I may change the implementation). > > 4. You have messages. Pointers to messages. These pointers are copied into > dynamically allocated linked list called stack. > > How are you going to maintain this? Do you want to prevent messages from > being copied? Then you should reconsider the design of messages allowing > their queuing without stacks. Alternatively, do you want to copy messages > upon queueing (to marshal them)? Then the queue should deal with > unconstrained objects: > > generic > type Message (<>) is private; > package Queue is > ... > I want to "stack away" messages to be processed later. Copied, deleted etc. reinert