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,FREEMAIL_FROM autolearn=ham autolearn_force=no version=3.4.4 X-Google-Thread: 103376,c35edbbda4c7f58f X-Google-Attributes: gid103376,public X-Google-Language: ENGLISH,ASCII-7-bit Path: g2news1.google.com!news2.google.com!fu-berlin.de!uni-berlin.de!not-for-mail From: "Alex R. Mosteo" Newsgroups: comp.lang.ada Subject: Re: Conditional compilation in Ada? Date: Thu, 18 Nov 2004 19:03:33 +0100 Message-ID: <419CE3F5.6010906@mailinator.com> References: Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Trace: news.uni-berlin.de zMoR/FsPiTorI2W8xgysxgHQvNQtwtY/f8YuxXIglmZu7jS3M= User-Agent: Mozilla Thunderbird 0.9 (X11/20041103) X-Accept-Language: en-us, en In-Reply-To: Xref: g2news1.google.com comp.lang.ada:6278 Date: 2004-11-18T19:03:33+01:00 List-Id: Jeffrey Carter wrote: > Steve wrote: > >> Using variant records means explicitly checking for the variant type and >> taking different action based on the variant. Creating a new >> variation of >> the record means modifying the original record (modifying proven code is >> never a good thing when it is easily avoided) and chasing each part of >> the >> code that takes different action based on the variants. > > > Since the compiler points out any place where you've forgotten, this is > hardly a problem; indeed, I would claim that it's an advantage over OOP, > where forgetting to redefine an operation is ignored by the compiler, > and you get the wrong action instead. > > In a well designed system, all the code dealing with the variant record > and its variants will be together, so there's no "chasing each part of > the code". > > Another advantage of using a variant record is that what happens is > explicit in the code, not hidden is some package that is not mentioned > in a context clause. > >> Using objects means deriving a new object and overloading specific >> operations for that object. The base object isn't touched. > > > And operations that are mistakenly not overridden become run-time errors. Not if they're declared abstract. Then you have the same situation as missing cases for a variant record. Plus you don't have an escape like using "when others". > >> Also: If the object is declared statically, the dispatching may happen >> statically. > > > This is true, but it seems that the nature of OP's problem would prevent > this. >