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.3 required=5.0 tests=BAYES_00,INVALID_MSGID autolearn=no autolearn_force=no version=3.4.4 X-Google-Language: ENGLISH,ASCII-7-bit X-Google-Thread: 1108a1,9a0ff0bffdf63657 X-Google-Attributes: gid1108a1,public X-Google-Thread: fac41,9a0ff0bffdf63657 X-Google-Attributes: gidfac41,public X-Google-Thread: 103376,4b06f8f15f01a568 X-Google-Attributes: gid103376,public X-Google-Thread: f43e6,9a0ff0bffdf63657 X-Google-Attributes: gidf43e6,public From: eachus@spectre.mitre.org (Robert I. Eachus) Subject: Re: Software landmines (loops) Date: 1998/08/31 Message-ID: #1/1 X-Deja-AN: 386587990 References: <902934874.2099.0.nnrp-10.c246a717@news.demon.co.uk> <6r1glm$bvh$1@nnrp1.dejanews.com> <6r9f8h$jtm$1@nnrp1.dejanews.com> <6renh8$ga7$1@nnrp1.dejanews.com> <6rf59b$2ud$1@nnrp1.dejanews.com> <6rfra4$rul$1@nnrp1.dejanews.com> <35DBDD24.D003404D@calfp.co.uk> <6sbuod$fra$1@hirame.wwa.com> <35f51e53.48044143@ <904556531.666222@miso.it.uq.edu.au> <35EAB5B1.1DA1986B@ehpt.com> <6sf1dn$n52$1@hirame.wwa.com> Organization: The Mitre Corp., Bedford, MA. Newsgroups: comp.lang.eiffel,comp.object,comp.software-eng,comp.lang.ada Date: 1998-08-31T00:00:00+00:00 List-Id: In article <6sf1dn$n52$1@hirame.wwa.com> "Robert Martin" writes: > It's not so much a matter of being harder to read and understand. Rather it > is that there is no good place to make certain kinds of changes to the code. > For example, let's say that we had to make a change that forced us to open > and close a file that the body of the loop needed to read... This is why T-shirts were printed up at one of the Ada 9X Requirements Workshops that said: "We don't know what the problem is... ...but Finalization is the solution." Finalization did end up in Ada 95, and it is the right solution to this particular problem. If you want the file to be closed when all references go away, it is easy enough to put the code in one place, and write: (elsewhere): type File_Handle is new Controlled with private... Now you can say: procedure ... is FH: File_Handle; begin ... end ...; And be sure that the file will be closed if necessary, but only when the file is open and no other reference to it exists. Of course, no one does this, because most compiler vendors "do the right thing" for the standard I/O packages. (This wasn't always the case.) -- Robert I. Eachus with Standard_Disclaimer; use Standard_Disclaimer; function Message (Text: in Clever_Ideas) return Better_Ideas is...