home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #27 / NN_1992_27.iso / spool / comp / lang / modula2 / 1417 < prev    next >
Encoding:
Text File  |  1992-11-19  |  4.5 KB  |  101 lines

  1. Newsgroups: comp.lang.modula2
  2. Path: sparky!uunet!spool.mu.edu!sol.ctr.columbia.edu!ira.uka.de!math.fu-berlin.de!news.belwue.de!theorie!titania.mathematik.uni-ulm.de!borchert
  3. From: borchert@titania.mathematik.uni-ulm.de (Andreas Borchert)
  4. Subject: Re: Oberon vs Modula-2
  5. Message-ID: <1992Nov19.140913.18702@informatik.uni-ulm.de>
  6. Sender: usenet@informatik.uni-ulm.de (Name for nntp-posting)
  7. Nntp-Posting-Host: titania.mathematik.uni-ulm.de
  8. Organization: University of Ulm, SAI
  9. References: <5897@balrog.ctron.com> <1992Nov11.102409.12183@jyu.fi> <1992Nov13.100154.6167@informatik.uni-ulm.de> <1992Nov13.130852.22775@jyu.fi> <1992Nov16.080647.26783@informatik.uni-ulm.de> <1992Nov17.155855.4413@let.rug.nl>
  10. Date: Thu, 19 Nov 92 14:09:13 GMT
  11. Lines: 88
  12.  
  13. In article <1992Nov17.155855.4413@let.rug.nl>, bert@let.rug.nl (Bert Bos) writes:
  14. > In article <1992Nov16.080647.26783@informatik.uni-ulm.de>, borchert@titania.mathematik.uni-ulm.de (Andreas Borchert) writes:
  15. > > Agreed, programmers shouldn't be enforced to use VAR-parameters
  16. > > for reasons of efficiency only. But, even with the semantics of
  17. > > Oberon or Modula-2, it's not to difficult for the compiler to
  18. > > detect that your 1000 x 1000 array isn't modified and, thus,
  19. > > doesn't need to be copied.
  20. > > 
  21. > > Usually, the calling procedure passes a reference to the array onto
  22. > > the stack in both cases and the called procedure then makes a copy
  23. > > of the array if you have call-by-value and your array parameter
  24. > > is subject to changes.
  25. > But what about a PROCEDURE p(a: Type; VAR b: Type) that is called as
  26. > p(x, x). Both parameters will refer to x, but if b is modified, a
  27. > should remain unchanged.
  28.  
  29. A nice case. Procedures like this one belong to the cases where we
  30. need to know about all calling locations, i.e. p must be non-exported.
  31.  
  32. I agree with Cheryl Lins that this optimization technique is more
  33. complex if it should apply to all possible cases. Nevertheless,
  34. common procedures like
  35.  
  36.    PROCEDURE StringCompare(s1, s2: ARRAY OF CHAR);
  37.  
  38. which don't call anything can be optimized without great trouble.
  39.  
  40. In article <1992Nov16.221811.8761@gallant.apple.com>, cheryl@gallant.apple.com (Cheryl Lins) writes:
  41.  
  42. > While the symbol file could be enhanced to carry the interprocedural
  43. > alias and side-effect information (and this could improve the analysis
  44. > in modules calling imported procedures), there will still be situations
  45. > where the compiler cannot determine the full effects. Additional
  46. > analysis could be done at link-time, but a good deal of additional
  47. > information would be necessary for a linker to do this. Probably not
  48. > impossible, just a lot of work.
  49.  
  50. And not necessarily preferably, because including more informations
  51. into a symbol file causes the symbol file to be changed more often
  52. (even if the interface itself doesn't change) and, thus, requires more
  53. recompilations.
  54.  
  55. Sounds like as we have to agree to Phil (mdlcpgs@lhn.gns.cri.nz):
  56.  
  57. > Hobby horse time again! I will re-assert my belief that the Wirth languages
  58. > need other optional attributes on variable declarations and formal
  59. > parameter definitions besides just TYPE (and VAR in the case of formal
  60. > parameters).
  61. > Very useful are:  Static; (I dont like module level being only way to
  62. > declare static variables when the scope of variable may be only one
  63. > procedure. Local modules in M2 were about the most complicated away to
  64. > achieve what the a static identifier could do imaginable)
  65.  
  66. But local modules allow your "static" variable to be shared by more
  67. than one procedure -- a common case.
  68.  
  69. >           location; specifying the absolute memory address
  70. > of variable (yes I know M2 implementation allow this).
  71. >           Readonly; More power to compiler for finding logic
  72. > errors and the solution to the by-value or by-reference versus
  73. > efficiency problem in format parameters;
  74.  
  75. Readonly parameters don't protect from surprises. E.g. if we have
  76. the above mentioned
  77.  
  78.    PROCEDURE p(a: Type; READONLY b: Type);
  79.    BEGIN
  80.       a[1] := ....;
  81.       (* has b[1] been changed now? *)
  82.    END;
  83.  
  84. where p is called as p(x, x). And all other cases are still not solved
  85. where formerly VAR-parameters have been threatened by other procedures
  86. in a non-obvious way.
  87.  
  88. I don't see a solution yet where in each case
  89.  
  90. (1)    everything is obvious (at least to the code generator) and
  91. (2)    your parameters are not subject to changes and
  92. (3)    copying is avoided.
  93.  
  94. -- 
  95. _______________________________________________________________________________
  96.  
  97. Andreas Borchert, University of Ulm, SAI, D-W-7900 Ulm, Germany
  98. Internet: borchert@mathematik.uni-ulm.de
  99.