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.2 required=5.0 tests=BAYES_00,INVALID_MSGID, REPLYTO_WITHOUT_TO_CC autolearn=no autolearn_force=no version=3.4.4 X-Google-Language: ENGLISH,ASCII-7-bit X-Google-Thread: 103376,ea40456edaea3d23 X-Google-Attributes: gid103376,public From: lga@sma.ch (Laurent Gasser) Subject: Re: Pascal to Ada translator/ aflex,ayacc GNAT ports Date: 1996/12/02 Message-ID: <57uki4INNkae@maz4.sma.ch>#1/1 X-Deja-AN: 201868350 distribution: world references: organization: Swiss Meteorological Institute reply-to: lga@sma.ch newsgroups: comp.lang.ada Date: 1996-12-02T00:00:00+00:00 List-Id: In article , dewar@merv.cs.nyu.edu (Robert Dewar) writes: > Wiljan says > > "I do not agree that this is the obvious translation. > It depends on how the code is original written. In many cases you can > of cause give an abvious translation to Ada but it depends from case to > case." > > > I am confused, you seem to be talking in generalities (which are in fact > reasonable), but you don't seem to talk to this specific case. Can you > show an example where you think it is inappropriate to translate the > Pascal "with" into an Ada renaming? > > Seems to me that the Pascal WITH is *exactly* analogous to the Ada renaming, > with a little less to write, but with less flexibility. > In the MacOs, you often have structures like a Rect which are Rect = record top, bottom, right, left: integer; end; You are typically using WITH when you are calculating with them. The intent is to make the source easier to read, and only that. (Well, compiler might write more efficent code as well.) my_rect : Rect; with my_rect do begin { may have a scope of many lines } top := top - top_margin; right := left + (3*(bottom - top)) div 4; bottom := bottom - bot_margin; end; In this case, the proposed solution would not help much. It would be preferable to work as in C: no local block, and all the fields are written in full. An extra local variable cannot do any better. my_rect.top := my_rect.top - top_margin; my_rect.right := my_rect.left + (3*(my_rect.bottom - my_rect.top)) div 4; my_rect.bottom := my_rect.bottom - bot_margin; This is the case every time the structured type is directly the type of the variable at work. No array of, pointer to, or field in a record of the structured type. The Ada renaming is quite effective when the structured type is deeply nested in the variable call. -- Laurent Gasser (lga@sma.ch) Computers do not solve problems, they execute solutions.