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>:
     25 Improve and extend the runtime checks for undefined behavior which CodeGen
     26 inserts for the various <tt>-fsanitize=</tt> modes. A lot of issues can already
     27 be caught, but there is more to do here.</li>
     28 
     29 <li><b>Improve target support</b>: The current target interfaces are heavily
     30 stubbed out and need to be implemented fully.  See the FIXME's in TargetInfo.
     31 Additionally, the actual target implementations (instances of TargetInfoImpl)
     32 also need to be completed.</li>
     33 
     34 <li><b>Implement an tool to generate code documentation</b>: Clang's
     35 library-based design allows it to be used by a variety of tools that reason
     36 about source code. One great application of Clang would be to build an
     37 auto-documentation system like doxygen that generates code documentation from
     38 source code. The advantage of using Clang for such a tool is that the tool would
     39 use the same preprocessor/parser/ASTs as the compiler itself, giving it a very
     40 rich understanding of the code. Clang is already able to read and understand
     41 doxygen markup, but cannot yet generate documentation from it.</li>
     42 
     43 <li><b>Use clang libraries to implement better versions of existing tools</b>:
     44 Clang is built as a set of libraries, which means that it is possible to
     45 implement capabilities similar to other source language tools, improving them
     46 in various ways.  Three examples are <a
     47 href="http://distcc.samba.org/">distcc</a>, the <a
     48 href="http://delta.tigris.org/">delta testcase reduction tool</a>, and the
     49 "indent" source reformatting tool.
     50 distcc can be improved to scale better and be more efficient.  Delta could be
     51 faster and more efficient at reducing C-family programs if built on the clang
     52 preprocessor. The clang-based indent replacement,
     53 <a href="http://clang.llvm.org/docs/ClangFormat.html">clang-format</a>,
     54 could be taught to handle simple structural rules like those in <a
     55 href="http://llvm.org/docs/CodingStandards.html#hl_earlyexit">the LLVM coding
     56 standards</a>.</li>
     57 
     58 <li><b>Use clang libraries to extend Ragel with a JIT</b>: <a 
     59 href="http://research.cs.queensu.ca/~thurston/ragel/">Ragel</a> is a state
     60 machine compiler that lets you embed C code into state machines and generate
     61 C code.  It would be relatively easy to turn this into a JIT compiler using
     62 LLVM.</li>
     63 
     64 <li><b>Self-testing using clang</b>: There are several neat ways to
     65 improve the quality of clang by self-testing. Some examples:
     66 <ul>
     67   <li>Improve the reliability of AST printing and serialization by
     68   ensuring that the AST produced by clang on an input doesn't change
     69   when it is reparsed or unserialized.
     70 
     71   <li>Improve parser reliability and error generation by automatically
     72   or randomly changing the input checking that clang doesn't crash and
     73   that it doesn't generate excessive errors for small input
     74   changes. Manipulating the input at both the text and token levels is
     75   likely to produce interesting test cases.
     76 </ul>
     77 </li>
     78 
     79 <li><b>Continue work on C++1y support</b>:
     80   C++98 and C++11 are feature-complete, but there are still several C++1y features to
     81   implement.  Please see the <a href="cxx_status.html">C++ status report
     82   page</a> to find out what is missing.</li>
     83 
     84 <li><b>StringRef'ize APIs</b>: A thankless but incredibly useful project is
     85 StringRef'izing (converting to use <tt>llvm::StringRef</tt> instead of <tt>const
     86 char *</tt> or <tt>std::string</tt>) various clang interfaces. This generally
     87 simplifies the code and makes it more efficient.</li>
     88 
     89 <li><b>Universal Driver</b>: Clang is inherently a cross compiler. We would like
     90 to define a new model for cross compilation which provides a great user
     91 experience -- it should be easy to cross compile applications, install support
     92 for new architectures, access different compilers and tools, and be consistent
     93 across different platforms. See the <a href="UniversalDriver.html">Universal
     94 Driver</a> web page for more information.</li>
     95 
     96 <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:
     97   <ul>
     98     <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>
     99     <li><i>Documented</i>, with appropriate Schema against which the output of Clang's XML formatter can be verified.</li>
    100     <li><i>Stable</i> across Clang versions.</li>
    101   </ul></li>
    102 
    103 <li><b>Configuration Manager</b>: Clang/LLVM works on a large number of
    104 architectures and operating systems and can cross-compile to a similarly large
    105 number of configurations, but the pitfalls of chosing the command-line
    106 options, making sure the right sub-architecture is chosen and that the correct
    107 optional elements of your particular system can be a pain.
    108 
    109 <p>A tool that would investigate hosts and targets, and store the configuration
    110 in files that can later be used by Clang itself to avoid command-line options,
    111 especially the ones regarding which target options to use, would greatle alleviate
    112 this problem. A simple tool, with little or no dependency on LLVM itself, that
    113 will investigate a target architecture by probing hardware, software, libraries
    114 and compiling and executing code to identify all properties that would be relevant
    115 to command-line options (VFP, SSE, NEON, ARM vs. Thumb etc), triple settings etc.</p>
    116 
    117 <p>The first stage is to build a CFLAGS for Clang that would produce code on the
    118 current Host to the identified Target.</p>
    119 
    120 <p>The second stage would be to produce a configuration file (that can be used
    121 independently of the Host) so that Clang can read it and not need a gazillion
    122 of command-line options. Such file should be simple JSON / INI or anything that
    123 a text editor could change.</p>
    124 </ul>
    125 
    126 <p>If you hit a bug with clang, it is very useful for us if you reduce the code
    127 that demonstrates the problem down to something small.  There are many ways to
    128 do this; ask on cfe-dev for advice.</p>
    129 
    130 </div>
    131 </body>
    132 </html>
    133