comp.lang.ada
 help / color / mirror / Atom feed
From: "markww" <markww@gmail.com>
Subject: Re: Initializers
Date: 20 Dec 2006 12:59:49 -0800
Date: 2006-12-20T12:59:49-08:00	[thread overview]
Message-ID: <1166648388.945552.17000@48g2000cwx.googlegroups.com> (raw)
In-Reply-To: <1166627296.26616.31.camel@localhost>


Georg Bauhaus wrote:
> On Tue, 2006-12-19 at 18:02 -0800, markww wrote:
> > Hi everyone,
> >
> > I'm trying to compare C++ to Ada. I'm looking specifically at Ada's
> > lack of 'initializers'. I am guessing that this means there is no
> > 'constructor' to Ada packages maybe?
>
> Others have given examples of initialization of record components
> and of package initialization blocks. (Two different things.)
> Another 2c:
>
> There are also construction subprograms and nested Factory packages
> that are commonly used for initializing objects. Some of this is
> explained in the Ada wikibook, and in many Ada text books.
>
> In addition, consider:
>
> - types whose objects must not be initialised, not even default
>   initialized. A reason might be that their bits are mapped
>   to hardware. Initialization would mean sending signals to the
>   hardware. You don't want some signals sent only because the
>   language uses some default initialization. So in Ada, you can
>   turn initialization off, entirely.
>
> - limited types. For every object of a limited record you can
>   obtain its access within the record definition. This allows
>   one or more construction functions invoked automatically
>   when an object is created but not initialized "by hand":
>
>   package P is
>
>     type L is limited private;
>
>     package Factory is
>
>       function make(item: access L) return Natural;
>
>     end Factory;
>
>   private
>
>     type L is limited record
>       hook: Natural := Factory.make(L'access);
>       stuff: Integer;
>     end record;
>
>   end P;
>
>   Factory.make has access to all the components of its Item
>   parameter, including Stuff. It is invoked automatically
>   for an object of type L that isn't explicitly initialized.
>
> - discriminated types. These will force partial initialization
>   because the discriminant needs to have a value to make the
>   object be of some specific type, and have a known size etc.
>   There are some tricks here.
>
> - nested scope. This is useful if you compare initialization in
>   C++ and Ada because nesting is built into Ada and can be used
>   here. Support for nested scopes (dynamic + static) is limited
>   in C++ by comparison I think. There are cases where
>   you would pass parameters to a C++ constructor, where in Ada
>   you needn't pass them because they are in (local) scope.
>
>
>  -- Georg

Ok thanks for your replies. I also found this on 'elaboration':

    http://www.adapower.com/rm95/RM-7-6.html

where do you guys find examples of how to use these packages?

Thanks,
Mark




  reply	other threads:[~2006-12-20 20:59 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-12-20  2:02 Initializers markww
2006-12-20  4:52 ` Initializers Larry Kilgallen
2006-12-20  7:59   ` Initializers Jean-Pierre Rosen
2006-12-20  6:57 ` Initializers Martin Krischik
2006-12-20 10:35 ` Initializers Dmitry A. Kazakov
2006-12-20 15:08 ` Initializers Georg Bauhaus
2006-12-20 20:59   ` markww [this message]
2006-12-21  5:14     ` AW: Initializers Grein, Christoph (Fa. ESG)
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox