# Clang: a C language front-end for LLVM

## About

The goal of the Clang project is to create a new BSD Licensed C, C++, & ObjC front-end for the LLVM compiler.

In the context of this website, the term Clang actually refers to two things:

1) A "code name" for the LLVM compiler front-end.

2) A specific library in the LLVM front-end -- in particular the "driver" that makes all the other libraries work together.

The developers of Clang include contributers from Apple and numerous other volunteers.

## Why?

The development of a new front-end was started out of a need -- a need for a compiler that allows better diagnostics, better integration with IDEs, a license that is compatible with commercial products, and a compiler that is easier to develop and maintain. All of these were motivations for starting work on a new C/C++/ObjC front-end that could meet these needs.

An excellent introduction to Clang can be found in the following video lectures:

- Clang Introduction
- Features and Performance of Clang

## Features/Goals

Some of the goals for the project include the following:

- Real-world, production quality compiler.
- A single unified parser for C/ObjC/C++
- Language conformance with C, ObjC, C++ (including variants, like C90, C99, etc)
- GCC compatibility (supports GCC extensions, but allow them to be disabled)
- Library based architecture with finely crafted C++ APIs
- High performance
- Design for integration with IDEs as well as code generation with LLVM.
- Expressive diagnostics
- BSD License

Of course this is only a rough outline of the goals and features of Clang. To get a true sense of what the new LLVM front-end is all about, as well as why you might want to considering using it, see the Features section.

## Try Clang

If you are a compiler developer and want to try out Clang, then build instructions are available on the Get Involved page. Note that clang is still early in development. If you are looking for source analysis or source-to-source transformation tools, clang is probably a great solution for you. If you want to use it as a drop in C compiler, it is not yet ready.

## Get Involved

If you are interested in working on Clang, then check out the Get Involved section.