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,50e705cdf2767cc6 X-Google-NewGroupId: yes X-Google-Attributes: gida07f3367d7,domainid0,public,usenet X-Google-Language: ENGLISH,ASCII-7-bit Path: g2news2.google.com!news3.google.com!feeder2.cambriumusenet.nl!feed.tweaknews.nl!193.201.147.93.MISMATCH!xlned.com!feeder7.xlned.com!news2.euro.net!feeder.news-service.com!85.214.198.2.MISMATCH!eternal-september.org!feeder.eternal-september.org!.POSTED!not-for-mail From: Simon Wright Newsgroups: comp.lang.ada Subject: Re: Parser interface design Date: Thu, 07 Apr 2011 23:09:09 +0100 Organization: A noiseless patient Spider Message-ID: References: <4d9c8c19$0$6769$9b4e6d93@newsspool3.arcor-online.net> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Injection-Info: mx02.eternal-september.org; posting-host="dFCm8HWntFqmDIilBLqEJQ"; logging-data="16689"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX18NLwsPGaJ7+K0jd160FDZlXBRMmtTIkaQ=" User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/23.3 (darwin) Cancel-Lock: sha1:HwUsNpCa+itUvgEfl1iskp7At5k= sha1:GLQaKpflANUTTb+NTXWaaVVC0fU= Xref: g2news2.google.com comp.lang.ada:19684 Date: 2011-04-07T23:09:09+01:00 List-Id: Natasha Kerensikova writes: > Now at least I understand the idea of using generics instead: > > generic > with function Emphasis (Contents: String) return String is <>; > with function Normal_Text (Contents: String) return String is <>; > with function Paragraph (Contents: String) return String is <>; > function Parser (Renderer: Renderer_Callbacks; Input: String) > return String; I think the Renderer argument shouldn't be there? Don't see what's wrong with providing a No_Op function which returns its input unchanged? unless you do something specific for a null? > However I am a bit skeptical about whether or not generics is actually a > better approach than the record of accesses. Generics is certainly a > higher-level feature than record and access, but I don't think that's > enough to prefer one over the other. On the other hand, I understand the > criticism of generics posted here (with my apologies for not remember > who had which arguments), with all the problems caused by the function > not actually existing until it's instanced. Not sure I remember that, generics aren't _that_ bad! > I believe such generics to be a lesser evil than generic types, and > similarly I believe access to subprograms to be lesser evils than access > to data. However I wouldn't be surprised if parser instantiation means > duplicating the code for each parser. Even if it's the compiler that > actually performs the code duplication, I'm not very at ease with it. I'd let it get on with it. You're unlikely to have many instantiations in one program, I'd have thought? Personally I tend to feel uneasy with access-to-subprogram. > All in all, I can't find any argument in favor of replacing the record > of accesses with the generic approach. Nor can I. In your original post, you said > I also though of implementing each callback once, as standalone > procedures, and then use tagged procedures to call them, but that > seems very messy too. Presumably you'll implement each callback once, as a standalone function, and pop them in the record/call the generic as appropriate?