Languages.html 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  2. <html>
  3. <!-- Copyright (C) 1988-2017 Free Software Foundation, Inc.
  4. Permission is granted to copy, distribute and/or modify this document
  5. under the terms of the GNU Free Documentation License, Version 1.3 or
  6. any later version published by the Free Software Foundation; with the
  7. Invariant Sections being "Funding Free Software", the Front-Cover
  8. Texts being (a) (see below), and with the Back-Cover Texts being (b)
  9. (see below). A copy of the license is included in the section entitled
  10. "GNU Free Documentation License".
  11. (a) The FSF's Front-Cover Text is:
  12. A GNU Manual
  13. (b) The FSF's Back-Cover Text is:
  14. You have freedom to copy and modify this GNU Manual, like GNU
  15. software. Copies published by the Free Software Foundation raise
  16. funds for GNU development. -->
  17. <!-- Created by GNU Texinfo 5.2, http://www.gnu.org/software/texinfo/ -->
  18. <head>
  19. <title>GNU Compiler Collection (GCC) Internals: Languages</title>
  20. <meta name="description" content="GNU Compiler Collection (GCC) Internals: Languages">
  21. <meta name="keywords" content="GNU Compiler Collection (GCC) Internals: Languages">
  22. <meta name="resource-type" content="document">
  23. <meta name="distribution" content="global">
  24. <meta name="Generator" content="makeinfo">
  25. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  26. <link href="index.html#Top" rel="start" title="Top">
  27. <link href="Option-Index.html#Option-Index" rel="index" title="Option Index">
  28. <link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
  29. <link href="index.html#Top" rel="up" title="Top">
  30. <link href="Source-Tree.html#Source-Tree" rel="next" title="Source Tree">
  31. <link href="Miscellaneous-routines.html#Miscellaneous-routines" rel="prev" title="Miscellaneous routines">
  32. <style type="text/css">
  33. <!--
  34. a.summary-letter {text-decoration: none}
  35. blockquote.smallquotation {font-size: smaller}
  36. div.display {margin-left: 3.2em}
  37. div.example {margin-left: 3.2em}
  38. div.indentedblock {margin-left: 3.2em}
  39. div.lisp {margin-left: 3.2em}
  40. div.smalldisplay {margin-left: 3.2em}
  41. div.smallexample {margin-left: 3.2em}
  42. div.smallindentedblock {margin-left: 3.2em; font-size: smaller}
  43. div.smalllisp {margin-left: 3.2em}
  44. kbd {font-style:oblique}
  45. pre.display {font-family: inherit}
  46. pre.format {font-family: inherit}
  47. pre.menu-comment {font-family: serif}
  48. pre.menu-preformatted {font-family: serif}
  49. pre.smalldisplay {font-family: inherit; font-size: smaller}
  50. pre.smallexample {font-size: smaller}
  51. pre.smallformat {font-family: inherit; font-size: smaller}
  52. pre.smalllisp {font-size: smaller}
  53. span.nocodebreak {white-space:nowrap}
  54. span.nolinebreak {white-space:nowrap}
  55. span.roman {font-family:serif; font-weight:normal}
  56. span.sansserif {font-family:sans-serif; font-weight:normal}
  57. ul.no-bullet {list-style: none}
  58. -->
  59. </style>
  60. </head>
  61. <body lang="en" bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#800080" alink="#FF0000">
  62. <a name="Languages"></a>
  63. <div class="header">
  64. <p>
  65. Next: <a href="Source-Tree.html#Source-Tree" accesskey="n" rel="next">Source Tree</a>, Previous: <a href="Libgcc.html#Libgcc" accesskey="p" rel="prev">Libgcc</a>, Up: <a href="index.html#Top" accesskey="u" rel="up">Top</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Option-Index.html#Option-Index" title="Index" rel="index">Index</a>]</p>
  66. </div>
  67. <hr>
  68. <a name="Language-Front-Ends-in-GCC"></a>
  69. <h2 class="chapter">5 Language Front Ends in GCC</h2>
  70. <p>The interface to front ends for languages in GCC, and in particular
  71. the <code>tree</code> structure (see <a href="GENERIC.html#GENERIC">GENERIC</a>), was initially designed for
  72. C, and many aspects of it are still somewhat biased towards C and
  73. C-like languages. It is, however, reasonably well suited to other
  74. procedural languages, and front ends for many such languages have been
  75. written for GCC.
  76. </p>
  77. <p>Writing a compiler as a front end for GCC, rather than compiling
  78. directly to assembler or generating C code which is then compiled by
  79. GCC, has several advantages:
  80. </p>
  81. <ul>
  82. <li> GCC front ends benefit from the support for many different
  83. target machines already present in GCC.
  84. </li><li> GCC front ends benefit from all the optimizations in GCC. Some
  85. of these, such as alias analysis, may work better when GCC is
  86. compiling directly from source code then when it is compiling from
  87. generated C code.
  88. </li><li> Better debugging information is generated when compiling
  89. directly from source code than when going via intermediate generated C
  90. code.
  91. </li></ul>
  92. <p>Because of the advantages of writing a compiler as a GCC front end,
  93. GCC front ends have also been created for languages very different
  94. from those for which GCC was designed, such as the declarative
  95. logic/functional language Mercury. For these reasons, it may also be
  96. useful to implement compilers created for specialized purposes (for
  97. example, as part of a research project) as GCC front ends.
  98. </p>
  99. </body>
  100. </html>