home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #26 / NN_1992_26.iso / spool / comp / lang / c / 16473 < prev    next >
Encoding:
Text File  |  1992-11-14  |  3.2 KB  |  78 lines

  1. Newsgroups: comp.lang.c
  2. Path: sparky!uunet!gumby!destroyer!gatech!hubcap!mjs
  3. From: mjs@hubcap.clemson.edu (M. J. Saltzman)
  4. Subject: Re: Help - What Is Wrong?
  5. Message-ID: <1992Nov13.182044.21992@hubcap.clemson.edu>
  6. Followup-To: comp.programming
  7. Organization: Clemson University, Clemson SC
  8. References: <720002131.AA03045@csource.oz.au> <138740001@hpcupt1.cup.hp.com>
  9. Date: Fri, 13 Nov 1992 18:20:44 GMT
  10. Lines: 66
  11.  
  12. In article <138740001@hpcupt1.cup.hp.com> jamiller@hpcupt1.cup.hp.com (Jim Miller) writes:
  13. >>comp.lang.c / mjs@hubcap.clemson.edu (M. J. Saltzman) 
  14. >>
  15. >>Presumably, "i != 5" is "less safe" because a failure of the initial
  16. >>condition to satisfy i < 5 will not result in an infinite loop
  17. >>(especially if the initializer "i = 0" is replaced by, say, "i = j + 1",
  18. >>or if the initial i is passed as a parameter).  On the other hand,
  19. >>this may not be the best kind of "safety" to have.
  20. >>
  21. >>In _The_Science_of_Programming_[1], David Gries argues that the guards
  22. >>on loops should be as weak as possible, so that if the initial
  23. >>condition is violated, the program will fail catastrophically (i.e.
  24. >>with an infinite loop).  
  25. >
  26. >IMHO: yes and no.
  27. >
  28. >While unit testing, "i != 5" might be the better idea for the reasons stated,
  29. >for *production* I'd choose "i < 5".  If the program can continue to limp
  30. >along instead of crash/hang, the user may still be able to use it,
  31. >they may be able to save their data, they may even be able to survive.
  32. >
  33. >[discussion of advantages of each form in various contexts deleted]
  34.  
  35. Of course, like any advice on *style*, this should be (and is, in the
  36. book) prefaced with the clause, "All other things being equal, ..."
  37. Which option is preferable depends a lot on the consequences of the
  38. error that caused i to be > 5 in the first place.
  39.  
  40. There are situations where the error would not be severe and the
  41. program could continue without causing major problems (I think these
  42. would be real-time control systems), but there are many other
  43. situations where the undetected error is the more dangerous outcome.
  44. In record-keeping applications, such an error could cascade through
  45. the system, causing a major problem.  In real-time systems, it might
  46. be better for the system to fail, and/or return control to a human
  47. operator, rather than to continue on an erroneous course.  Do you
  48. follow comp.risks?
  49.  
  50. Also, as I pointed out in the discussion on comp.programming, I did
  51. take the recommendation out of context.  The weak loop guard is also
  52. a consequence of the program derivation method.  It has the advantage
  53. in that context that its negation is strong, and proof of the loop 
  54. postcondition is simplified.
  55.  
  56. I think designing *robust* programs (that fail gently or recover when
  57. errors are detected) is not exactly the same as designing *correct*
  58. programs.
  59.  
  60. >Ok, David Gries and I disagree. 
  61. >So, an  expert  and I disagree.
  62. >So, what else is new?  :-)
  63.  
  64. Well, all generalizations are false 8^), even those made by experts.
  65.  
  66. >
  67. >   jim miller
  68. >   jamiller@cup.hp.com
  69. >   (a.k.a James A. Miller; Jim the JAM; stupid; @!?$$!; ... )
  70. >   Anything I say will be used against me ...
  71. >   But my company doesn't know or approve or condone anything of mine here.
  72.  
  73.  
  74. -- 
  75.         Matthew Saltzman
  76.         Clemson University Math Sciences
  77.         mjs@clemson.edu
  78.