Weight.html 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html401/loose.dtd">
  2. <html>
  3. <!-- Created on December 10, 2012 by texi2html 1.82
  4. texi2html was written by:
  5. Lionel Cons <[email protected]> (original author)
  6. Karl Berry <[email protected]>
  7. Olaf Bachmann <[email protected]>
  8. and many others.
  9. Maintained by: Many creative people.
  10. Send bugs and suggestions to <[email protected]>
  11. -->
  12. <head>
  13. <title>avram - a virtual machine code interpreter: 2.7.7.4 Weight</title>
  14. <meta name="description" content="avram - a virtual machine code interpreter: 2.7.7.4 Weight">
  15. <meta name="keywords" content="avram - a virtual machine code interpreter: 2.7.7.4 Weight">
  16. <meta name="resource-type" content="document">
  17. <meta name="distribution" content="global">
  18. <meta name="Generator" content="texi2html 1.82">
  19. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  20. <style type="text/css">
  21. <!--
  22. a.summary-letter {text-decoration: none}
  23. blockquote.smallquotation {font-size: smaller}
  24. pre.display {font-family: serif}
  25. pre.format {font-family: serif}
  26. pre.menu-comment {font-family: serif}
  27. pre.menu-preformatted {font-family: serif}
  28. pre.smalldisplay {font-family: serif; font-size: smaller}
  29. pre.smallexample {font-size: smaller}
  30. pre.smallformat {font-family: serif; font-size: smaller}
  31. pre.smalllisp {font-size: smaller}
  32. span.roman {font-family:serif; font-weight:normal;}
  33. span.sansserif {font-family:sans-serif; font-weight:normal;}
  34. ul.toc {list-style: none}
  35. -->
  36. </style>
  37. </head>
  38. <body lang="en" bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#800080" alink="#FF0000">
  39. <a name="Weight"></a>
  40. <table cellpadding="1" cellspacing="1" border="0">
  41. <tr><td valign="middle" align="left">[<a href="Profile.html#Profile" title="Previous section in reading order"> &lt; </a>]</td>
  42. <td valign="middle" align="left">[<a href="Deconstruction.html#Deconstruction" title="Next section in reading order"> &gt; </a>]</td>
  43. <td valign="middle" align="left"> &nbsp; </td>
  44. <td valign="middle" align="left">[<a href="Virtual-Machine-Specification.html#Virtual-Machine-Specification" title="Beginning of this chapter or previous chapter"> &lt;&lt; </a>]</td>
  45. <td valign="middle" align="left">[<a href="Metrics-and-Maintenance.html#Metrics-and-Maintenance" title="Up section"> Up </a>]</td>
  46. <td valign="middle" align="left">[<a href="Library-Reference.html#Library-Reference" title="Next chapter"> &gt;&gt; </a>]</td>
  47. <td valign="middle" align="left"> &nbsp; </td>
  48. <td valign="middle" align="left"> &nbsp; </td>
  49. <td valign="middle" align="left"> &nbsp; </td>
  50. <td valign="middle" align="left"> &nbsp; </td>
  51. <td valign="middle" align="left">[<a href="avram.html#Top" title="Cover (top) of document">Top</a>]</td>
  52. <td valign="middle" align="left">[<a href="avram_toc.html#SEC_Contents" title="Table of contents">Contents</a>]</td>
  53. <td valign="middle" align="left">[<a href="Function-Index.html#Function-Index" title="Index">Index</a>]</td>
  54. <td valign="middle" align="left">[<a href="avram_abt.html#SEC_About" title="About (help)"> ? </a>]</td>
  55. </tr></table>
  56. <hr size="1">
  57. <a name="Weight-1"></a>
  58. <h4 class="subsubsection">2.7.7.4 Weight</h4>
  59. <p>The following virtual code implements a function that returns the weight
  60. of its argument in the standard representation for natural numbers.
  61. <a name="index-weight"></a>
  62. </p>
  63. <table><tr><td>&nbsp;</td><td><pre class="example">weight = ((nil,nil),((nil,nil),(nil,(nil,nil))))
  64. </pre></td></tr></table>
  65. <p>The weight of a tree is zero if the tree is <code>nil</code>, and otherwise
  66. the sum of the weights of the two subtrees plus one.
  67. </p>
  68. <p>An algorithm to compute the weight of a tree would be trivial to
  69. implement without being built in to the virtual machine. The built in
  70. capability could also be used for purposes unrelated to code
  71. maintenance. Nevertheless, it is built in for the following reasons.
  72. </p>
  73. <ul>
  74. <li> Computing weights happened to be a bottleneck for a particular
  75. aspect of code generation that was of interest to the author,
  76. <a name="index-compression"></a>
  77. namely the compression of generated code.
  78. </li><li> A built in implementation in C runs at least an order of magnitude
  79. faster than the equivalent implementation in virtual code.
  80. </li><li> It runs even faster when repeated on the same data, by retrieving
  81. previously calculated weights rather than recalculating them.
  82. </li></ul>
  83. <p>The only disadvantage of using this feature instead of implementing a
  84. function in virtual code to compute weights is that it relies on native
  85. <a name="index-native-integer-arithmetic"></a>
  86. <a name="index-overflow-1"></a>
  87. integer arithmetic and could overflow, causing a fatal error. It has
  88. never occurred in practice, but is possible due to sharing, whereby the
  89. nominal weight of a tree could be exponentially larger than the actual
  90. amount of memory occupied by it.
  91. </p>
  92. <hr size="1">
  93. <table cellpadding="1" cellspacing="1" border="0">
  94. <tr><td valign="middle" align="left">[<a href="Profile.html#Profile" title="Previous section in reading order"> &lt; </a>]</td>
  95. <td valign="middle" align="left">[<a href="Deconstruction.html#Deconstruction" title="Next section in reading order"> &gt; </a>]</td>
  96. <td valign="middle" align="left"> &nbsp; </td>
  97. <td valign="middle" align="left">[<a href="Virtual-Machine-Specification.html#Virtual-Machine-Specification" title="Beginning of this chapter or previous chapter"> &lt;&lt; </a>]</td>
  98. <td valign="middle" align="left">[<a href="Metrics-and-Maintenance.html#Metrics-and-Maintenance" title="Up section"> Up </a>]</td>
  99. <td valign="middle" align="left">[<a href="Library-Reference.html#Library-Reference" title="Next chapter"> &gt;&gt; </a>]</td>
  100. <td valign="middle" align="left"> &nbsp; </td>
  101. <td valign="middle" align="left"> &nbsp; </td>
  102. <td valign="middle" align="left"> &nbsp; </td>
  103. <td valign="middle" align="left"> &nbsp; </td>
  104. <td valign="middle" align="left">[<a href="avram.html#Top" title="Cover (top) of document">Top</a>]</td>
  105. <td valign="middle" align="left">[<a href="avram_toc.html#SEC_Contents" title="Table of contents">Contents</a>]</td>
  106. <td valign="middle" align="left">[<a href="Function-Index.html#Function-Index" title="Index">Index</a>]</td>
  107. <td valign="middle" align="left">[<a href="avram_abt.html#SEC_About" title="About (help)"> ? </a>]</td>
  108. </tr></table>
  109. <p>
  110. <font size="-1">
  111. This document was generated on <i>December 10, 2012</i> using <a href="http://www.nongnu.org/texi2html/"><i>texi2html 1.82</i></a>.
  112. </font>
  113. <br>
  114. </p>
  115. </body>
  116. </html>