From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on ip-172-31-65-14.ec2.internal X-Spam-Level: X-Spam-Status: No, score=-1.9 required=3.0 tests=BAYES_00 autolearn=ham autolearn_force=no version=3.4.6 Path: eternal-september.org!reader02.eternal-september.org!aioe.org!CndO09ueOTz9v5APEGJmiw.user.46.165.242.91.POSTED!not-for-mail From: "Dmitry A. Kazakov" Newsgroups: comp.lang.ada Subject: Re: Discriminants or Constructor Function for Limited Types Date: Wed, 4 May 2022 11:47:54 +0200 Organization: Aioe.org NNTP Server Message-ID: References: <0b4ddd38-1f19-44fe-acd9-43a316ec9d29n@googlegroups.com> Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Injection-Info: gioia.aioe.org; logging-data="28734"; posting-host="CndO09ueOTz9v5APEGJmiw.user.gioia.aioe.org"; mail-complaints-to="abuse@aioe.org"; User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.8.1 Content-Language: en-US X-Notice: Filtered by postfilter v. 0.9.2 Xref: reader02.eternal-september.org comp.lang.ada:63810 List-Id: On 2022-05-04 11:02, R R wrote: > There are two ways (to my knowledge) how to initialize objects of limited types. Either the limited type has some discriminants > > type DLT (Width, Length : Positive) is tagged limited private; > Obj : DLT (3, 5); > > or I can provide a constructor function that takes corresponding parameters > > type LT (<>) is tagged limited private; > function Make (Width, Length : Positive) return LT; > Obj : LT := Make (3, 5); > > Do you recommend one way over the other? Why? Is it possible to combine both methods (discriminants plus constructor)? Two more ways are allocators and limited aggregates. There is no good way to safely initialize a limited object because Ada lacks proper constructors and because the initialization model is inherently unsafe with regard or exceptions, task components, self-referential discriminants (AKA Rosen's trick). But there are numerous hacks and workarounds depending on the objective. -- Regards, Dmitry A. Kazakov http://www.dmitry-kazakov.de