Home | History | Annotate | Download | only in www
      1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
      2           "http://www.w3.org/TR/html4/strict.dtd">
      3 <html>
      4 <head>
      5   <META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
      6   <title>Clang - Get Involved</title>
      7   <link type="text/css" rel="stylesheet" href="menu.css" />
      8   <link type="text/css" rel="stylesheet" href="content.css" />
      9 </head>
     10 <body>
     11 
     12 <!--#include virtual="menu.html.incl"-->
     13 
     14 <div id="content">
     15 
     16 <h1>Open Clang Projects</h1>
     17 
     18 <p>Here are a few tasks that are available for newcomers to work on, depending
     19 on what your interests are.  This list is provided to generate ideas, it is not
     20 intended to be comprehensive.  Please ask on cfe-dev for more specifics or to
     21 verify that one of these isn't already completed. :)</p>
     22 
     23 <ul>
     24 <li><b>Undefined behavior checking</b>: CodeGen could
     25 insert runtime checks for all sorts of different undefined behaviors, from 
     26 reading uninitialized variables, buffer overflows, and many other things.  This
     27 checking would be expensive, but the optimizers could eliminate many of the 
     28 checks in some cases, and it would be very interesting to test code in this mode
     29 for certain crowds of people.  Because the inserted code is coming from clang,
     30 the "abort" message could be very detailed about exactly what went wrong.</li>
     31 
     32 <li><b>Improve target support</b>: The current target interfaces are heavily
     33 stubbed out and need to be implemented fully.  See the FIXME's in TargetInfo.
     34 Additionally, the actual target implementations (instances of TargetInfoImpl)
     35 also need to be completed.</li>
     36 
     37 <li><b>Implement an tool to generate code documentation</b>: Clang's
     38 library-based design allows it to be used by a variety of tools that reason
     39 about source code. One great application of Clang would be to build an
     40 auto-documentation system like doxygen that generates code documentation from
     41 source code. The advantage of using Clang for such a tool is that the tool would
     42 use the same preprocessor/parser/ASTs as the compiler itself, giving it a very
     43 rich understanding of the code.</li> 
     44 
     45 <li><b>Use clang libraries to implement better versions of existing tools</b>:
     46 Clang is built as a set of libraries, which means that it is possible to
     47 implement capabilities similar to other source language tools, improving them
     48 in various ways.  Three examples are <a
     49 href="http://distcc.samba.org/">distcc</a>, the <a
     50 href="http://delta.tigris.org/">delta testcase reduction tool</a>, and the
     51 "indent" source reformatting tool.
     52 distcc can be improved to scale better and be more efficient.  Delta could be
     53 faster and more efficient at reducing C-family programs if built on the clang
     54 preprocessor, indent could do proper formatting for complex C++ features, and it
     55 would be straight-forward to extend a clang-based implementation to handle
     56 simple structural rules like those in <a
     57 href="http://llvm.org/docs/CodingStandards.html#hl_earlyexit">the LLVM coding
     58 standards</a>.</li>
     59 
     60 <li><b>Use clang libraries to extend Ragel with a JIT</b>: <a 
     61 href="http://research.cs.queensu.ca/~thurston/ragel/">Ragel</a> is a state
     62 machine compiler that lets you embed C code into state machines and generate
     63 C code.  It would be relatively easy to turn this into a JIT compiler using
     64 LLVM.</li>
     65 
     66 <li><b>Self-testing using clang</b>: There are several neat ways to
     67 improve the quality of clang by self-testing. Some examples:
     68 <ul>
     69   <li>Improve the reliability of AST printing and serialization by
     70   ensuring that the AST produced by clang on an input doesn't change
     71   when it is reparsed or unserialized.
     72 
     73   <li>Improve parser reliability and error generation by automatically
     74   or randomly changing the input checking that clang doesn't crash and
     75   that it doesn't generate excessive errors for small input
     76   changes. Manipulating the input at both the text and token levels is
     77   likely to produce interesting test cases.
     78 </ul>
     79 </li>
     80 
     81 <li><b>Continue work on C++'0x support</b>:
     82   C++'98 is feature complete, but there is still a lot of C++'0x featuers to
     83   implement.  Please see the <a href="cxx_status.html">C++ status report
     84   page</a> to find out what is missing.</li>
     85 </ul>
     86 
     87 <p>If you hit a bug with clang, it is very useful for us if you reduce the code
     88 that demonstrates the problem down to something small.  There are many ways to
     89 do this; ask on cfe-dev for advice.</p>
     90 
     91 <ul>
     92 <li><b>StringRef'ize APIs</b>: A thankless but incredibly useful project is
     93 StringRef'izing (converting to use <tt>llvm::StringRef</tt> instead of <tt>const
     94 char *</tt> or <tt>std::string</tt>) various clang interfaces. This generally
     95 simplifies the code and makes it more efficient.</li>
     96 
     97 <li><b>Universal Driver</b>: Clang is inherently a cross compiler. We would like
     98 to define a new model for cross compilation which provides a great user
     99 experience -- it should be easy to cross compile applications, install support
    100 for new architectures, access different compilers and tools, and be consistent
    101 across different platforms. See the <a href="UniversalDriver.html">Universal
    102 Driver</a> web page for more information.</li>
    103 
    104 <li><b>XML Representation of ASTs</b>: Clang maintains a rich Abstract Syntax Tree that describes the program. Clang could emit an XML document that describes the program, which others tools could consume rather than being tied directly to the Clang binary.The XML representation needs to meet several requirements:
    105   <ul>
    106     <li><i>General</i>, so that it's able to represent C/C++/Objective-C abstractly, and isn't tied to the specific internal ASTs that Clang uses.</li>
    107     <li><i>Documented</i>, with appropriate Schema against which the output of Clang's XML formatter can be verified.</li>
    108     <li><i>Stable</i> across Clang versions.</li>
    109   </ul></li>
    110 </ul>
    111 
    112 </div>
    113 </body>
    114 </html>
    115