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: 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 X-Google-Thread: 1108a1,9a0ff0bffdf63657 X-Google-Attributes: gid1108a1,public From: Jean-Marc Jezequel Subject: Re: Software landmines (loops) Date: 1998/09/04 Message-ID: <35EFD468.BDD7CB0A@irisa.fr>#1/1 X-Deja-AN: 387812663 Distribution: world Content-Transfer-Encoding: 7bit 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> <35EAEC47.164424A7@s054.aone.net.au> Content-Type: text/plain; charset=us-ascii Organization: Irisa, Rennes (FR) Mime-Version: 1.0 Newsgroups: comp.lang.eiffel,comp.object,comp.software-eng,comp.lang.ada Date: 1998-09-04T00:00:00+00:00 List-Id: IMHO, Dijkstra's point with se/se loops is first on *correctness*, that is linked with provability. This is the most important thing from a software engineering point of view. Maintenability comes second. Readability comes third (but is actualy linked to maintenability). Easyness of writing comes *last*. (well, in the real world issues such as efficiency or more often costs and delay sinterfere at any level in this hierarchy;-). I agree with Bob Martin's point of view on the role of engineers: making trade-offs). According to this point of view, the point is not to craft a piece of code and throw it to the tester in a kind of simulated annealing until it works. IMHO the professional engineer should design a piece of code as trivial as a loop *in such a way that it can be proven correct*. At least one systematic way of doing this have been documented by the structured programming folks (Dijkstra, Hoare...). Let me recall it in the context of the current thread on list equality implemented with a loop: equal (l,r: LIST): BOOLEAN is require l /= Void; r /=Void This is a six steps process: 1. Design the loop invariant. It should provide a concise and preferably formal description of the properties of the loop. But even if it's not formal, it is usefull since it outline the intent. Here, it is simply that the two list r and l are equal so far (which could be made more formal saying that foreach i such as 0r.off loop Result := l.item /= r.item l.forth; r.forth end 7. Check your proof. Test (it's as easy to make an error in the proof as it is in the code. Eiffel helps here by checking invariants and variants at runtime. But the method is valid and usefull for *any* language). Ship. To sum up my point, when there is a documented way of doing something (here building loops) the engineer should follow it (albeit not blindly: she must still make appropriate trade-offs). Doing it elseway for no good reason is not engineering: it is handcrafting (which is not necessarily pejorative in my mouth). -- Jean-Marc Jezequel Tel : +33 299 847 192 IRISA/CNRS Fax : +33 299 847 171 Campus de Beaulieu e-mail : jezequel@irisa.fr F-35042 RENNES (FRANCE) http://www.irisa.fr/prive/jezequel