C++, STD, STL, C++98, C++03, C++11, Compilers, GCC, LLVM, Clang, LLVM-GCC

June 13, 2012

This a reminder to myself and anyone else passing by ;)

I have been slowly getting back into C++ and I feel I must fill some blanks (cause either by lack of practice or insufficient/lost knowledge), anyway, the most important is that I learn it. So here we are.

C++

It is a programming language aka C++ core language (keywords, etc ...). It is part of the ISO C++ specification.

C++ Standard Library (aka STD)

It refers to C++ Standard Library (all functions/classes are defined under the ::std namespace). It is a collection of functions and classes written with the core C++ programming language and part of the ISO C++ specification.

Standard Template Library (aka STL)

It stands for Standard Template Library. STL influenced a C++Standard Library lot.

C++98

It is the 1998 ANSI.ISO C++ standard and the langauge's first international standard. it consists of two parts: the C++ core language and the C++ Standard Library. The C++ Standard library includes most of the Standard Template Library (STL) and a slightly modified version of the C standard library. (source: Wikipedia)

C++03

C++03 is the 2003 iteration for both the C++ programming language and C++ Standard Library. This version of the C++ programming language standard replaced the standard referred to as C++98. It contains mainly bug fixes targeted at implementers only (i.e not target at programmers using the C++ language to build software) since no new/deprecated features were introduced. (source: Wikipedia)

C++11

C++11 (or C++0x) is the 2011 iteration for both the C++ programming language and C++ Standard Library. A lot of changes happened in here for developers. (source: Wikipedia).

Compilers in a nutshell

Purposes

A compiler convert source code (in hight level languages such as C++) into assembly code (for a targeted hardware). A compiler performs several jobs:

Architecture

A compiler consists of three main components:

The frontend does:

The middleend does:

The backend does:

(source: Wikipedia)

GCC

It stands for GNU Compiler Collection (GCC). GCC is both the frontend and backend. It has front end for C,C++, Objective-C,Objective-C++, Ada, Java.

LLVM

LLVM is brand for all projects under the LLVM umbrella project such as LLVM Core, Clang, LLDB, LLVM C++ Standard Library, etc. (source: Wikipedia)

LLVM is a set of backend for various architectures (x86, ARM, etc). LLVM can provide the middle layers of a complete compiler system, taking intermediate form (IF) code from a compiler (eg GCC/Clang) and emitting an optimized IF. This new IF can then be converted and linked into machine-dependent assembly code for a target platform. (source: Wikipedia)

Clang

Clang is C,C++, Objective-C,Objective-C++ front end compiler. It uses LLVM as its back end. Clang is popular for its front end and the Clang static initializer (integrated into Xcode).

Pros:

Caveats:

Note: Apple may/will  replace GCC with Clang in the future to workaround GPLv3 licensed code (GCC 4.2 is the last version that's licensed under GPLv2).

(source: Wikipedia & Stackoverflow)

LLVM-GCC

It is basically a compiler toolchain with GCC's front-end with LLVM's back-end.

Discussion, links, and tweets

I'm a developer at IO Stark.