| <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" |
| "http://www.w3.org/TR/html4/strict.dtd"> |
| <html> |
| <head> |
| <META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> |
| <title>Clang - Get Involved</title> |
| <link type="text/css" rel="stylesheet" href="menu.css"> |
| <link type="text/css" rel="stylesheet" href="content.css"> |
| </head> |
| <body> |
| |
| <!--#include virtual="menu.html.incl"--> |
| |
| <div id="content"> |
| |
| <h1>Getting Involved with the Clang Project</h1> |
| |
| <p>Once you have <a href="get_started.html">checked out and built</a> clang and |
| played around with it, you might be wondering what you can do to make it better |
| and contribute to its development. Alternatively, maybe you just want to follow |
| the development of the project to see it progress. |
| </p> |
| |
| <h2>Contribute</h2> |
| |
| See the <a href="hacking.html">hacking</a> document for information on how |
| to author patches. |
| |
| <h2>Follow what's going on</h2> |
| |
| <p>Clang is a subproject of the <a href="https://llvm.org">LLVM Project</a>, but |
| has its own mailing lists because the communities have people with different |
| interests. The two clang lists are:</p> |
| |
| <ul> |
| <li><a href="https://lists.llvm.org/mailman/listinfo/cfe-commits">cfe-commits |
| </a> - This list is for patch submission/discussion.</li> |
| |
| <li><a href="https://lists.llvm.org/mailman/listinfo/cfe-dev">cfe-dev</a> - |
| This list is for everything else Clang related (questions and answers, design |
| discussions, etc).</li> |
| |
| </ul> |
| |
| <p>If you are interested in clang only, these two lists should be all |
| you need. If you are interested in the LLVM optimizer and code generator, |
| please consider signing up for <a |
| href="https://lists.llvm.org/mailman/listinfo/llvm-dev">llvm-dev</a> and <a |
| href="https://lists.llvm.org/mailman/listinfo/llvm-commits">llvm-commits</a> |
| as well.</p> |
| |
| |
| <p>The most common way to talk with other developers on the project is through |
| the <a href="https://lists.llvm.org/mailman/listinfo/cfe-dev">cfe-dev mailing |
| list</a>. The clang mailing list is a very friendly place and we welcome |
| newcomers. In addition to the cfe-dev list, a significant amount of design |
| discussion takes place on the <a |
| href="https://lists.llvm.org/mailman/listinfo/cfe-commits">cfe-commits mailing |
| list</a>. All of these lists have archives, so you can browse through previous |
| discussions or follow the list development on the web if you prefer.</p> |
| |
| <p>You can also follow the <a href="http://planet.clang.org/">Planet Clang</a> |
| community news feed which offers a window into the world, work and lives of |
| Clang developers, contributors and the standards they implement.</p> |
| |
| <p>If you're looking for something to work on, check out our <a |
| href="OpenProjects.html">Open Projects</a> page or look through the <a |
| href="https://bugs.llvm.org/">Bugzilla bug database</a>.</p> |
| |
| <h2 id="criteria">Contributing Extensions to Clang</h2> |
| |
| <p>Clang is designed to support experimentation, |
| allowing programmers to easily extend the compiler to support great |
| new language features and tools. At some point, the authors of these |
| extensions may propose that the extensions become a part of Clang |
| itself, to benefit the whole Clang community. However, extensions |
| (particularly language extensions) have long-term maintenance costs |
| for Clang. The benefits of the extension need to be evaluated against |
| these costs. The Clang project uses the following criteria for this |
| evaluation:</p> |
| |
| <ol> |
| <li>Evidence of a significant user community: This is based on a number of |
| factors, including an existing user community, the perceived likelihood that |
| users would adopt such a feature if it were available, and any secondary |
| effects that come from, e.g., a library adopting the feature and providing |
| benefits to its users.</li> |
| |
| <li>A specific need to reside within the Clang tree: There are some extensions |
| that would be better expressed as a separate tool, and should remain as |
| separate tools even if they end up being hosted as part of the LLVM umbrella |
| project.</li> |
| |
| <li>A specification: The specification must be sufficient to understand the |
| design of the feature as well as interpret the meaning of specific examples. |
| The specification should be detailed enough that another compiler vendor |
| could implement the feature.</li> |
| |
| <li>Representation within the appropriate governing organization: For |
| extensions to a language governed by a standards committee (C, C++, OpenCL), |
| the extension itself must have an active proposal and proponent within that |
| committee and have a reasonable chance of acceptance. Clang should drive the |
| standard, not diverge from it. This criterion does not apply to all |
| extensions, since some extensions fall outside of the realm of the standards |
| bodies.</li> |
| |
| <li>A long-term support plan: increasingly large or complex extensions to |
| Clang need matching commitments to supporting them over time, including |
| improving their implementation and specification as Clang evolves. The |
| capacity of the contributor to make that commitment is as important as the |
| commitment itself.</li> |
| |
| <li>A high-quality implementation: The implementation must fit well into |
| Clang's architecture, follow LLVM's coding conventions, and meet Clang's |
| quality standards, including diagnostics and complete AST |
| representations. This is particularly important for language extensions, |
| because users will learn how those extensions work through the behavior of the |
| compiler.</li> |
| |
| <li>A test suite: Extensive testing is crucial to ensure that the language |
| extension is not broken by ongoing maintenance in Clang. The test suite |
| should be complete enough that another compiler vendor could conceivably |
| validate their implementation of the feature against it.</li> |
| </ol> |
| |
| </div> |
| </body> |
| </html> |