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=-0.3 required=5.0 tests=BAYES_00, REPLYTO_WITHOUT_TO_CC autolearn=no autolearn_force=no version=3.4.4 X-Google-Thread: 103376,90108ed846e3f1bf X-Google-Attributes: gid103376,domainid0,public,usenet X-Google-Language: ENGLISH,ASCII-7-bit Path: g2news1.google.com!news3.google.com!feeder.news-service.com!newsfeed.straub-nv.de!noris.net!newsfeed.arcor.de!newsspool3.arcor-online.net!news.arcor.de.POSTED!not-for-mail From: "Dmitry A. Kazakov" Subject: Re: Why constructing functions is a mess [was Language lawyer question: task activation Newsgroups: comp.lang.ada User-Agent: 40tude_Dialog/2.0.15.1 MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Reply-To: mailbox@dmitry-kazakov.de Organization: cbb software GmbH References: <1v0f2pkso7p50.vein84avao5t.dlg@40tude.net> <499ede41$0$32665$9b4e6d93@newsspool2.arcor-online.net> <1lhxmo6l2ypux.bei2ffp1m3e$.dlg@40tude.net> <499f2c59$0$31868$9b4e6d93@newsspool3.arcor-online.net> <1vcaimc8kjj30$.kf3rsd670ebp$.dlg@40tude.net> <1gxn72yzshp07$.6ytqydmmz37u.dlg@40tude.net> <49a92c29$0$32670$9b4e6d93@newsspool2.arcor-online.net> <1wzjy9pzbft1m.1lut7nszfkzmp$.dlg@40tude.net> <49a95a12$0$31347$9b4e6d93@newsspool4.arcor-online.net> <49a97231$0$30236$9b4e6d93@newsspool1.arcor-online.net> <1mjbcbequf1wz.1o3nwuz7oqteo.dlg@40tude.net> <49a984f6$0$30226$9b4e6d93@newsspool1.arcor-online.net> <49ac0595$0$31344$9b4e6d93@newsspool4.arcor-online.net> <1p6sf3ykej2ls.10jmdonrmif5h.dlg@40tude.net> <49ac2a8e$0$30232$9b4e6d93@newsspool1.arcor-online.net> Date: Mon, 2 Mar 2009 22:02:24 +0100 Message-ID: <7uqw8skbd6y0.ijm97ivq4kei.dlg@40tude.net> NNTP-Posting-Date: 02 Mar 2009 22:02:27 CET NNTP-Posting-Host: c33fb40a.newsspool4.arcor-online.net X-Trace: DXC==U\a5SSbLScOKO]LCQ@0g`4IUK On Mon, 02 Mar 2009 19:50:53 +0100, Georg Bauhaus wrote: > Dmitry A. Kazakov schrieb: >> On Mon, 02 Mar 2009 17:13:09 +0100, Georg Bauhaus wrote: >> >>> Dmitry A. Kazakov schrieb: >>> >>>> A derived type works fine: >>>> >>>> type My_Plant is new Power_Plant with null record; >>>> function Create return My_Plant is >>>> begin >>>> return (Power_Plant'(Create ("my plant")) with null record); >>>> end Create; >>>> Now, the point is that this model of construction does not work with >>>> abstract types because of fundamental reasons. It is not (<>) which is >>>> broken, but the construction model. >>> OK, got your point, sorry for being so dense. >> >> No, you still have not. > > Yes, (Abstract_Function_Call with ...) doesn't hold water, > I think I got it. Constructor functions are not constructors for > "abstract subobjects", they are primitive which is doubtful > (as is explained in a 1994 thread Constructor in ADA9X) and > so on... They are not constrictors for ALL subjects. For abstract ones is just absolutely evident. > Please let the ARG know, in case this has been overlooked. I don't think they did. Anyway, long ago I posted a proposal for constructors to Ada-Comment. (I also posed it to comp.lang.ada.) In my eyes it makes absolutely no sense to consider what could be done with constructing functions, limited aggregates, return statements etc. Nothing should be. Leave them as they are. The idea I am trying to convey, is that it cannot be fixed. Move this mess to the Annex J and do construction (destruction, initialization, factories) *right*. > (The compiler bug is still a bug insofar as no constructor > function is needed to crash it. This dreadful line in einfo.adb > seems to apply in the case of Ada 95 only.) [...] Your example does not crash GNAT Pro 6.2.1. > ... > package P1 is > type T1(<>) is abstract tagged limited private; > private > type T1(X: Character) is tagged limited null record; > end P1; > > package P2 is > type T2 is new P1.T1 with private; > private > type T2 is new P1.T1 with null record; > X: T2 := (P1.T1 with null record); -- Bang! > end P2; > ... However it looks like a bug to me, because T1 is unconstrained. Nevertheless, GNAT Pro 6.2.1 successfully compiles it. P.S. The version 6.2.1 is much better than earlier versions. All bugs I reported (and there were many) are now fixed. Though I didn't report all assumed bugs since some of them (traditionally in generics) are very tricky to track down. -- Regards, Dmitry A. Kazakov http://www.dmitry-kazakov.de