Lines Matching +full:batch +full:- +full:reduce

1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
5 <META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
6 <title>Clang - Features and Goals</title>
14 <!--#include virtual="menu.html.incl"-->
18 <!--*************************************************************************-->
19 <h1>Clang - Features and Goals</h1>
20 <!--*************************************************************************-->
28 <p>End-User Features:</p>
48 <li><a href="#real">A real-world, production quality compiler</a></li>
56 <!--*************************************************************************-->
57 <h2><a name="enduser">End-User Features</a></h2>
58 <!--*************************************************************************-->
61 <!--=======================================================================-->
63 <!--=======================================================================-->
66 The library-based architecture of clang makes it straight-forward to time and
75 <p>In addition to being efficient when pitted head-to-head against GCC in batch
78 with it. This means that it is often possible to apply out-of-the-box thinking
82 <!--=======================================================================-->
84 <!--=======================================================================-->
87 friendly. As far as a command-line compiler goes, this basically boils down to
97 $ <b>clang -fsyntax-only t.c</b>
114 <!--=======================================================================-->
116 <!--=======================================================================-->
118 <p>GCC is currently the defacto-standard open source compiler today, and it
135 <!--*************************************************************************-->
137 <!--*************************************************************************-->
139 <!--=======================================================================-->
141 <!--=======================================================================-->
143 <p>A major design concept for clang is its use of a library-based
144 architecture. In this design, various parts of the front-end can be cleanly
146 and uses. In addition, the library-based approach encourages good interfaces
163 <li><b>libsupport</b> - Basic support library, from LLVM.</li>
164 <li><b>libsystem</b> - System abstraction library, from LLVM.</li>
165 <li><b>libbasic</b> - Diagnostics, SourceLocations, SourceBuffer abstraction,
167 <li><b>libast</b> - Provides classes to represent the C AST, the C type system,
170 <li><b>liblex</b> - Lexing and preprocessing, identifier hash table, pragma
172 <li><b>libparse</b> - Parsing. This library invokes coarse-grained 'Actions'
174 ASTs or other client-specific data structures.</li>
175 <li><b>libsema</b> - Semantic Analysis. This provides a set of parser actions
177 <li><b>libcodegen</b> - Lower the AST to LLVM IR for optimization &amp; code
179 <li><b>librewrite</b> - Editing of text buffers (important for code rewriting
181 <li><b>libanalysis</b> - Static analysis support.</li>
182 <li><b>clang</b> - A driver program, client of the libraries at various
190 source-to-source compiler tool, you would then add the AST building and
193 <p>For more information about the low-level implementation details of the
197 <!--=======================================================================-->
199 <!--=======================================================================-->
209 requirements. Consider code generation, for example: a simple front-end that
213 not hard requirement that the front-end actually build up a full AST for all
231 an extremely quick and light-weight on-the-fly code generator (similar to TCC)
235 clang provides support for building and retaining fully-fledged ASTs, and even
238 <p>Designing the libraries with clean and simple APIs allows these high-level
244 <!--=======================================================================-->
246 <!--=======================================================================-->
252 typically have visibility across your entire project and are long-lived
253 processes, whereas stand-alone compiler tools are typically invoked on each
259 dramatically reduce analysis/compilation time.</p>
261 <p>A further difference between IDEs and batch compiler is that they often
262 impose very different requirements on the front-end: they depend on high
266 information that a codegen-only frontend can throw away. Clang is
271 <!--=======================================================================-->
273 <!--=======================================================================-->
276 commercial projects, not only as a stand-alone compiler but also as a library
286 href="https://llvm.org/docs/DeveloperPolicy.html#copyright-license-and-patents">LLVM License
291 <!--*************************************************************************-->
293 <!--*************************************************************************-->
295 <!--=======================================================================-->
296 <h3><a name="real">A real-world, production quality compiler</a></h3>
297 <!--=======================================================================-->
313 <!--=======================================================================-->
315 <!--=======================================================================-->
330 <!--=======================================================================-->
333 <!--=======================================================================-->
335 <p>Clang is the "C Language Family Front-end", which means we intend to support
337 parsing technology for this class of languages is a hand-built recursive-descent
339 new developers to understand the code, it easily supports ad-hoc rules and other
340 strange hacks required by C/C++, and makes it straight-forward to implement
347 <!--=======================================================================-->
350 <!--=======================================================================-->
355 super-natural?) "language lawyer", who knows the ins and outs of the language