程序代写代做代考 assembler Fortran computer architecture mips file system javascript cuda ant android c# c/c++ SQL gui algorithm c++ assembly flex FTP ER Java chain database ada cache prolog arm matlab interpreter python concurrency Excel scheme x86 IOS Hive RISC-V GPU compiler C/C++ compilers

C/C++ compilers

C/C++ compilers

Contents

1 Acorn C/C++ 1
1.1 History . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2 Uses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.3 See also . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.4 References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.5 External links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

2 Amsterdam Compiler Kit 3
2.1 Target processors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2.2 See also . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2.3 References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2.4 External links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

3 Aztec C 5
3.1 History . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
3.2 Current status . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
3.3 Current use . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
3.4 References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

4 BDS C 7
4.1 See also . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
4.2 References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
4.3 External links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

5 Borland Turbo C 8
5.1 Early history . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
5.2 Version history . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
5.3 Freeware release . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
5.4 See also . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
5.5 References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
5.6 External links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

i

ii CONTENTS

6 cc65 10
6.1 Supported API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

6.1.1 static . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
6.1.2 dynamic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

6.2 External links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

7 ccache 11
7.1 See also . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
7.2 References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
7.3 External links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

8 CFLAGS 12
8.1 See also . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
8.2 External links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

9 Clang 13
9.1 Background . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
9.2 Design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
9.3 Performance and GCC compatibility . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
9.4 Status history . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
9.5 See also . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
9.6 References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
9.7 External links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

10 CodeWarrior 16
10.1 Old versions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
10.2 History . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
10.3 Origin of the name . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
10.4 References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
10.5 External links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

11 Comeau C/C++ 18
11.1 Design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
11.2 Standards compliance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
11.3 Distribution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
11.4 Current status . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
11.5 References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
11.6 External links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

12 Deep Blue C 20
12.1 Limitations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

CONTENTS iii

12.2 Sample program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
12.3 Performance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
12.4 References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

13 Digital Mars 21
13.1 References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
13.2 External links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

14 DJGCC 22
14.1 See also . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
14.2 References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
14.3 External links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

15 DJGPP 23
15.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
15.2 Compatibility . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
15.3 See also . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
15.4 References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
15.5 External links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

16 FpgaC 25
16.1 History . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
16.2 External links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

17 GNU Compiler Collection 26
17.1 History . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
17.2 Design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

17.2.1 Front ends . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
17.2.2 GENERIC and GIMPLE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
17.2.3 Optimization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
17.2.4 Back end . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
17.2.5 Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

17.3 Languages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
17.4 Architectures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
17.5 Development . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
17.6 C library . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
17.7 License . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
17.8 Uses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
17.9 See also . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
17.10References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

iv CONTENTS

17.11Further reading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
17.12External links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

17.12.1 Official . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
17.12.2 Other . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

18 HP aC++ 34
18.1 Products . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
18.2 External links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

19 IBM XL C/C++ Compilers 35
19.1 Products . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
19.2 References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
19.3 External links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

20 Intel C++ Compiler 37
20.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
20.2 Optimizations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
20.3 Architectures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
20.4 Description of packaging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
20.5 History Since 2003 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
20.6 Flags and manuals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
20.7 Debugging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
20.8 Criticism . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
20.9 See also . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
20.10References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
20.11External links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

21 LabWindows/CVI 40
21.1 Release history . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
21.2 See also . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
21.3 References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40

22 Lattice C 41
22.1 Reception . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
22.2 References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
22.3 External links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41

23 LCC (compiler) 42
23.1 LCC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
23.2 Projects incorporating LCC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

23.2.1 Quake 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

CONTENTS v

23.2.2 lcc-win . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
23.2.3 Pelles C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
23.2.4 Mathworks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

23.3 License . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
23.4 References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
23.5 Bibliography . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43

24 Macintosh Programmer’s Workshop 44
24.1 Design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
24.2 MPW Shell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44

24.2.1 Look and feel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
24.3 Other tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
24.4 Writing MPW tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
24.5 History . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
24.6 Legacy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
24.7 See also . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
24.8 References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
24.9 External links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46

25 Megamax C 47
25.1 References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47

26 MinGW 48
26.1 History . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
26.2 Programming language support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
26.3 Components . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
26.4 Comparison with Cygwin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
26.5 MinGW-w64 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
26.6 See also . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
26.7 References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
26.8 External links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50

27 Norcroft C compiler 51
27.1 Supported architectures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51

27.1.1 Acorn C/C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
27.1.2 INMOS Transputer C Compiler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
27.1.3 Cambridge Consultants XAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51

27.2 References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
27.3 External links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51

vi CONTENTS

28 Open64 53
28.1 The infrastructure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
28.2 Intermediate representation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
28.3 Versions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53

28.3.1 Open64 releases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
28.3.2 AMD x86 Open64 releases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53

28.4 Current development projects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
28.5 See also . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
28.6 References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
28.7 External links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54

29 Oracle Developer Studio 55
29.1 Languages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
29.2 Supported architectures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
29.3 Components . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
29.4 Compiler optimizations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
29.5 OpenMP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
29.6 Code coverage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
29.7 GCCFSS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
29.8 Research platform . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
29.9 History . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
29.10References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
29.11External links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56

30 PathScale 57
30.1 Contents of the PathScale EKOPath Compiler Suite . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
30.2 See also . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
30.3 References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
30.4 Further reading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
30.5 External links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58

31 Pelles C 59
31.1 References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
31.2 External links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59

32 Portable C Compiler 60
32.1 Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
32.2 Current version . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
32.3 See also . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
32.4 References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61

CONTENTS vii

32.5 External links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61

33 The Portland Group 62
33.1 Company history . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
33.2 Product and market history . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62

33.2.1 Compilers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
33.2.2 Programming Tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
33.2.3 PGI Milestones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63

33.3 See also . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
33.4 References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
33.5 External links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63

34 QuickC 64
34.1 Version history . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
34.2 See also . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
34.3 References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64

35 ROSE (compiler framework) 66
35.1 The infrastructure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
35.2 Award . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
35.3 References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
35.4 External links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66

36 Small Device C Compiler 67
36.1 Supported target architectures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
36.2 See also . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
36.3 References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
36.4 External links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67

37 Small-C 69
37.1 See also . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
37.2 References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
37.3 External links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69

38 Softune 70
38.1 See also . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
38.2 External links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
38.3 References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70

39 TenDRA Compiler 71
39.1 Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71

viii CONTENTS

39.2 See also . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
39.3 References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
39.4 External links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71

40 THINK C 73
40.1 References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
40.2 External links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73

41 Tiny C Compiler 74
41.1 Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
41.2 Compiled program performance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
41.3 Uses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
41.4 History . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
41.5 Current status . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
41.6 See also . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
41.7 References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
41.8 External links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76

42 vbcc 77
42.1 Optimizations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
42.2 External links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77

43 Visual C++ 79
43.1 History . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79

43.1.1 16-bit versions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
43.1.2 Strictly 32-bit versions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
43.1.3 32-bit and 64-bit versions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80

43.2 Compatibility . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
43.2.1 ABI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
43.2.2 C runtime libraries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
43.2.3 C99 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81

43.3 Common MSVC version . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
43.4 Controversy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
43.5 See also . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
43.6 References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
43.7 External links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83

44 IBM VisualAge 84
44.1 Early history . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84

44.1.1 Name brand . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84

CONTENTS ix

44.1.2 Evolution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
44.2 See also . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
44.3 References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
44.4 External links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86

45 Watcom C/C++ 87
45.1 History . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87

45.1.1 Release history . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
45.2 License . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
45.3 Design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
45.4 Uses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
45.5 Variants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
45.6 Compatibility . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
45.7 See also . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
45.8 References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
45.9 External links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88

46 Z88DK 89
46.1 Supported target platforms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
46.2 See also . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
46.3 External links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90

47 Borland C++ 91
47.1 Libraries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
47.2 Add-ons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
47.3 Version history . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
47.4 Evolution of Borland C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
47.5 See also . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
47.6 External links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92

48 C++/CX 93
48.1 Extension syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93

48.1.1 Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
48.2 Metadata . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
48.3 Runtime library . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
48.4 Preprocessor-based detection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
48.5 See also . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
48.6 External links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94

49 C++Builder 95

x CONTENTS

49.1 Technology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
49.2 History . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95

49.2.1 Borland C++Builder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
49.2.2 CodeGear Borland C++Builder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
49.2.3 Embarcadero C++Builder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96

49.3 OS X support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
49.4 Version history . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
49.5 Editions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
49.6 See also . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
49.7 References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
49.8 External links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98

50 Cfront 99
50.1 References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
50.2 External links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99

51 Shed Skin 100
51.1 Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
51.2 Type inference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
51.3 Modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
51.4 See also . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
51.5 References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
51.6 External links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101

52 Turbo C++ 102
52.1 History . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
52.2 Legacy software . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
52.3 See also . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
52.4 References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
52.5 External links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
52.6 Text and image sources, contributors, and licenses . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104

52.6.1 Text . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
52.6.2 Images . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
52.6.3 Content license . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110

Chapter 1

Acorn C/C++

Acorn C/C++ is a set of C/C++ programming tools for
use under the RISC OS operating system. The tools use
the Norcroft compiler suite and were authored by Codemist
and Acorn Computers.[2] The tools provide some facilities
offered by a fully integrated development environment.
Acorn included a copy of the Norcroft compiler targeted at
the ARM architecture for RISC OS in the following devel-
opment software.

• Acornsoft ANSI C

• Acornsoft ANSI C (Release 2)

• Acorn ANSI C (Release 3) – 1989[3]

• Acorn Desktop C (Release 4)

• Acorn C/C++ (Release 5) – 1995[4]

1.1 History

Acorn’s work on ANSI C compilers was begun around
1987,[2] with a commercial release in 1988 for its
Archimedes computer.[5] Desktop C and Desktop Assem-
bler were released in 1991.[2] Codemist worked primarily
on the ANSI C standard, while Acorn concentrated on the
RISC OS specifics and optimisation for the ARM. Both par-
ties exchanged sources regularly.[2][6]

The tools were originally developed by university academics
Alan Mycroft and Arthur C Norman of Codemist.[7] Their
development was taken up by Acorn and subsequently taken
over by Castle Technology, who later added the lacking
C99[8] support. Castle funded further development by
means of a subscription scheme.[9] In early 2009, develop-
ment and sales of the tools were transferred to RISC OS
Open.[10]

1.2 Uses

The Norcroft compiler can be used to produce RISC OS
modules, as well as compiling parts of the operating system
itself. Before beginning development of the Inform pro-
gramming language, Graham Nelson originally used Nor-
croft C to develop his text adventure Curses.[11][12]

The suite of tools is currently the only means of building a
working copy of RISC OS, although it is ultimately intended
that this will also be possible using a cross compiler, e.g.
using the free software GCC system.[13]

1.3 See also

• Arm Image Format

1.4 References
[1] Revill, Steve (2015-10-22). “Official DDE gets autumn

makeover”. RISC OS Open. Retrieved October 22, 2015.
This latest update (DDE26) folds in a number of fixes and
enhancements.

[2] “Interview with Ian Johnson”. CAUGers. ACCU. Retrieved
2011-06-30. Acorn began work on ANSI C compilers
around 1987. C release 3 was made in 1989, and was fol-
lowed by Desktop C and Desktop Assembler in 1991. The
development of the compiler was a joint venture between
Norcroft (at the time Arthur Norman and Alan Mycroft–two
academics from Cambridge University Computing Labs)
and the PLG at Acorn. Sources were regularly exchanged
between both parties but, generally, Norcroft were respon-
sible for adherence to the emerging ANSI standard, whilst
Acorn concentrated on the RISC OS specifics of the C li-
brary and on common subexpression elimination, register al-
location and peephole optimisation for the ARM.

[3] Acorn – ANSI C (Release 3)

[4] Acorn – Sales News 127 – 6th Feb 1995

1

https://en.wikipedia.org/wiki/C_(programming_language)
https://en.wikipedia.org/wiki/C++
https://en.wikipedia.org/wiki/Programming_tool
https://en.wikipedia.org/wiki/RISC_OS
https://en.wikipedia.org/wiki/Norcroft_compiler_suite
https://en.wikipedia.org/wiki/Codemist
https://en.wikipedia.org/wiki/Acorn_Computers
https://en.wikipedia.org/wiki/Integrated_development_environment
https://en.wikipedia.org/wiki/ARM_architecture
https://en.wikipedia.org/wiki/ANSI_C
https://en.wikipedia.org/wiki/Acorn_Archimedes
https://en.wikipedia.org/wiki/Alan_Mycroft
https://en.wikipedia.org/wiki/Castle_Technology
https://en.wikipedia.org/wiki/C99
https://en.wikipedia.org/wiki/RISC_OS_Open
https://en.wikipedia.org/wiki/RISC_OS_Open
https://en.wikipedia.org/wiki/Loadable_kernel_module
https://en.wikipedia.org/wiki/Operating_system
https://en.wikipedia.org/wiki/Inform_programming_language
https://en.wikipedia.org/wiki/Inform_programming_language
https://en.wikipedia.org/wiki/Graham_Nelson
https://en.wikipedia.org/wiki/Curses_(video_game)
https://en.wikipedia.org/wiki/Cross_compiler
https://en.wikipedia.org/wiki/Free_software
https://en.wikipedia.org/wiki/GCC_(software)
https://en.wikipedia.org/wiki/Arm_Image_Format
https://www.riscosopen.org/news/articles/2015/10/22/official-dde-gets-autumn-makeover
https://www.riscosopen.org/news/articles/2015/10/22/official-dde-gets-autumn-makeover
https://en.wikipedia.org/wiki/RISC_OS_Open
http://www.accu.informika.ru/acornsig/public/caugers/volume2/issue1/ianjohnson.html
https://en.wikipedia.org/wiki/ACCU_(organisation)
http://chrisacorns.computinghistory.org.uk/docs/Acorn/Brochures/Acorn_APP160_ANSICR3.pdf
http://chrisacorns.computinghistory.org.uk/docs/Acorn/SN/Acorn_SalesNews127.pdf

2 CHAPTER 1. ACORN C/C++

[5] Norman, A.C. (2005). “Thirty Years of Lisp Support for
REDUCE”. In Dolzmann, Andreas. Algorithmic algebra
and logic : proceedings of the A3L 2005, April 3–6, Passau,
Germany conference in honor of the 60th birthday of Volker
Weispfenning. Seidl, Andreas; Sturm, Thomas; Weispfen-
ning, Volker. Passau, Germany. ISBN 978-3-8334-2669-
8. OCLC 63200315. In 1989 […] concurrently working
with Alan Mycroft developing the Norcroft [MN88 – 1988]
C compiler, and so we were especially well in tune with the
emerging ANSI C standard.

[6] “Codemist Compilers / Norcroft”. Bath, UK: Codemist Ltd.
2010. Retrieved 2011-10-21. We have created C compilers
for a range of computers, from mainframes to embedded
special purpose chips. […] the following partial list will give
an idea of the range of our output. Acorn Computers ARM
C Compiler. This is the original ANSI C compiler known as
Norcroft C.

[7] Mycroft, Alan; Norman, Arthur C. (1992). “Part I: clas-
sical imperative languages”. Optimising compilation. Cam-
bridge, UK: University of Cambridge, Computer Labora-
tory. CiteSeerX 10.1.1.43.9953 . OCLC 29982690. […]
the ‘Norcroft’ compiler suite jointly constructed by the au-
thors […] Commercial interests are referred to Codemist
Ltd. […]

[8] “Norcroft versus GCC”. riscos.info. Archived from the
original on 2002-04-04. Retrieved 2011-06-16. Norcroft:
Faster than GCC to compile programs, probably by about
two times. GCC: Supports a much newer C++ implementa-
tion than Norcroft, as well as C99.

[9] Williams, Chris (2004-04-29). “CTL launch C/C++ com-
piler sub scheme”. Drobe. Retrieved 2011-06-16. Castle
has announced the launch of a subscription scheme for its
C/C++ development suite. The scheme aims to fund future
development of the compiler suite through annual subscrip-
tions […]

[10] “News in brief”. Drobe. 2009-05-04. Retrieved 2011-06-
16. RISC OS Open has taken over sales of the Acorn C/C++
development suite, known as the Norcroft compiler, which
is used to build RISC OS.

[11] Montfort, Nick (2005). “7 The Independents”. Twisty little
passages : an approach to interactive fiction. Cambridge,
Massachusetts, United States: MIT Press. ISBN 0-262-
63318-3. Before Nelson began work on Inform […] Us-
ing an Acorn Archimedes and programming in ANSI C,
he quickly abandoned his small game to begin developing
Curses, using that to put the in-progress compiler through its
paces.

[12] “Interview: Graham Nelson”. XYZZY News. Eileen Mullin.
Archived from the original on 2008-10-30. Retrieved 2008-
10-30. I use two languages, the excellent Norcroft ANSI C
compiler and Inform.

[13] Avison, Ben (2010-05-20). “Cross compilation support”.
RISC OS Open. Retrieved October 21, 2011. […] the

completion of Pace’s cross-compilation project – an initial
milestone on the path to full cross-compilation support. […]
Most of them build on Linux, targetting RISC OS, using the
GCC toolchain […]

1.5 External links
• “C/C++ Development Suite at iyonix.com”. Archived

from the original on 2008-05-14. Retrieved 2008-05-
14.

• ROOL Desktop Development Environment – RISC
OS Open

https://books.google.com/books?id=TGceTyXcgsYC&pg=PA185&dq=compiler+mycroft+norman#v=onepage&q=norcroft&f=false
https://books.google.com/books?id=TGceTyXcgsYC&pg=PA185&dq=compiler+mycroft+norman#v=onepage&q=norcroft&f=false
https://books.google.com/books?id=TGceTyXcgsYC&pg=PA185&dq=compiler+mycroft+norman#v=onepage&q=norcroft&f=false
https://books.google.com/books?id=TGceTyXcgsYC&pg=PA185&dq=compiler+mycroft+norman#v=onepage&q=norcroft&f=false
https://en.wikipedia.org/wiki/International_Standard_Book_Number
https://en.wikipedia.org/wiki/Special:BookSources/978-3-8334-2669-8
https://en.wikipedia.org/wiki/Special:BookSources/978-3-8334-2669-8
https://en.wikipedia.org/wiki/OCLC
https://www.worldcat.org/oclc/63200315
http://www.codemist.co.uk/ncc/index.html
https://en.wikipedia.org/wiki/CiteSeerX
https://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.43.9953
https://en.wikipedia.org/wiki/OCLC
https://www.worldcat.org/oclc/29982690
https://web.archive.org/web/20020404222725/http://www.riscos.info/compilers/compare.html
https://en.wikipedia.org/wiki/Riscos.info
http://www.riscos.info/compilers/compare.html
http://www.riscos.info/compilers/compare.html
http://www.drobe.co.uk/riscos/artifact1037.html
http://www.drobe.co.uk/riscos/artifact1037.html
https://en.wikipedia.org/wiki/Drobe
http://www.drobe.co.uk/article.php?id=2504
https://en.wikipedia.org/wiki/Drobe
https://en.wikipedia.org/wiki/Nick_Montfort
https://en.wikipedia.org/wiki/MIT_Press
https://en.wikipedia.org/wiki/International_Standard_Book_Number
https://en.wikipedia.org/wiki/Special:BookSources/0-262-63318-3
https://en.wikipedia.org/wiki/Special:BookSources/0-262-63318-3
http://www.webcitation.org/query?url=http%253A%252F%252Fwww.xyzzynews.com%252Fxyzzy.1c.html&date=2008-10-30
http://www.xyzzynews.com/xyzzy.1c.html
http://www.riscosopen.org/forum/forums/3/topics/394#posts-3539
https://en.wikipedia.org/wiki/RISC_OS_Open
https://web.archive.org/web/20080514205123/http://www.iyonix.com/tools/
http://www.iyonix.com/tools/
http://riscosopen.org/content/sales/dde
https://en.wikipedia.org/wiki/RISC_OS_Open
https://en.wikipedia.org/wiki/RISC_OS_Open

Chapter 2

Amsterdam Compiler Kit

The Amsterdam Compiler Kit (ACK) is a retargetable
compiler suite and toolchain written by Andrew Tanenbaum
and Ceriel Jacobs, and is MINIX’s native toolchain. The
ACK was originally closed-source software (that allowed
binaries to be distributed for MINIX as a special case), but
in April 2003 it was released under an open source BSD
license. It has frontends for programming languages C,
Pascal, Modula-2, Occam, and BASIC.
The ACK’s notability stems from the fact that in the early
1980s it was one of the first portable compilation systems
designed to support multiple source languages and target
platforms.[1][2]

The ACK achieves maximum portability by using an
intermediate language using bytecode, called EM. Each lan-
guage front-end produces EM object files, which are then
processed through several generic optimisers before being
translated by a back-end into native machine code.
ACK comes with a generic linker and librarian capable of
manipulating files in the ACK’s own a.out-based format; it
will work on files containing EM code as well as native ma-
chine code. However, EM code cannot be linked to native
machine code without translating the EM binary first.

2.1 Target processors

• 6502

• 6800 (assembler only)

• 6805 (assembler only)

• 6809 (assembler only)

• ARM

• 8080*

• Z80

• Z8000

• i86*

• i386
• 68000
• 68020
• 68040
• NS32016
• S2650 (assembler only)
• SPARC
• VAX4
• PDP11
• Broadcom VideoCore IV (BCM2708)*

* Version 6.0

2.2 See also
• C–
• LLVM
• GNU Compiler Collection
• Portable C Compiler
• Small Device C Compiler

2.3 References
[1] Tanenbaum, Andrew S; van Staveren, H.; Keizer, E.G.;

Stevenson, J.W. (1983). “A Practical Tool Kit For Mak-
ing Portable Compilers”. Communications of the ACM. 26
(9): 654–660. doi:10.1145/358172.358182.

[2] A.V Aho, R. Sethi & J.D. Ullman (1986). Compilers – Prin-
ciples, Techniques and Tools (“The Dragon Book”). Addison-
Wesley. p. 511. ISBN 0-201-10088-6.

3

https://en.wikipedia.org/wiki/Retargeting
https://en.wikipedia.org/wiki/Retargeting
https://en.wikipedia.org/wiki/Andrew_Tanenbaum
https://en.wikipedia.org/wiki/Ceriel_Jacobs
https://en.wikipedia.org/wiki/MINIX
https://en.wikipedia.org/wiki/Toolchain
https://en.wikipedia.org/wiki/Executable
https://en.wikipedia.org/wiki/Open_source
https://en.wikipedia.org/wiki/BSD_licenses
https://en.wikipedia.org/wiki/Programming_language
https://en.wikipedia.org/wiki/C_(programming_language)
https://en.wikipedia.org/wiki/Pascal_(programming_language)
https://en.wikipedia.org/wiki/Modula-2
https://en.wikipedia.org/wiki/Occam_(programming_language)
https://en.wikipedia.org/wiki/BASIC
https://en.wikipedia.org/wiki/Intermediate_language
https://en.wikipedia.org/wiki/Bytecode
https://en.wikipedia.org/wiki/EM_intermediate_language
https://en.wikipedia.org/wiki/Object_file
https://en.wikipedia.org/wiki/Machine_code
https://en.wikipedia.org/wiki/A.out
https://en.wikipedia.org/wiki/6502
https://en.wikipedia.org/wiki/Motorola_6800
https://en.wikipedia.org/wiki/Motorola_6800
https://en.wikipedia.org/wiki/6809
https://en.wikipedia.org/wiki/ARM_architecture
https://en.wikipedia.org/wiki/Intel_8080
https://en.wikipedia.org/wiki/Z80
https://en.wikipedia.org/wiki/Z8000
https://en.wikipedia.org/wiki/Intel_8086
https://en.wikipedia.org/wiki/I386
https://en.wikipedia.org/wiki/68000
https://en.wikipedia.org/wiki/68020
https://en.wikipedia.org/wiki/Motorola_68040
https://en.wikipedia.org/wiki/NS32016
https://en.wikipedia.org/wiki/Signetics_2650
https://en.wikipedia.org/wiki/SPARC
https://en.wikipedia.org/wiki/VAX_4000
https://en.wikipedia.org/wiki/PDP11
https://en.wikipedia.org/wiki/C–
https://en.wikipedia.org/wiki/LLVM
https://en.wikipedia.org/wiki/GNU_Compiler_Collection
https://en.wikipedia.org/wiki/Portable_C_Compiler
https://en.wikipedia.org/wiki/Small_Device_C_Compiler
http://cacm.acm.org/magazines/1983/9/10627-a-practical-tool-kit-for-making-portable-compilers/abstract
http://cacm.acm.org/magazines/1983/9/10627-a-practical-tool-kit-for-making-portable-compilers/abstract
https://en.wikipedia.org/wiki/Digital_object_identifier
https://dx.doi.org/10.1145%252F358172.358182
https://en.wikipedia.org/wiki/Compilers:_Principles,_Techniques,_and_Tools
https://en.wikipedia.org/wiki/International_Standard_Book_Number
https://en.wikipedia.org/wiki/Special:BookSources/0-201-10088-6

4 CHAPTER 2. AMSTERDAM COMPILER KIT

2.4 External links
• Official website

http://tack.sourceforge.net/

Chapter 3

Aztec C

Aztec C is a C compiler for MS-DOS, Apple II DOS 3.3
and ProDOS, Commodore 64, early Macintosh, CP/M-80,
Amiga, and Atari ST.

3.1 History

Manx Software Systems of Shrewsbury, New Jersey, pro-
duced C compilers beginning in the 1980s targeted at pro-
fessional developers for a variety of platforms up to and in-
cluding PCs and Macs.
Manx Software Systems was started by Harry Suckow, with
partners Thomas Fenwick, and James Goodnow II, the two
principal developers. They were all working together at
another company at the time. Suckow had started several
companies of his own anticipating the impending growth of
the PC market, with each company specializing in different
kinds of software. A demand came for compilers first and
he disengaged himself from the other companies to pursue
Manx and Aztec C.
Suckow took care of the business side, Fenwick specialized
in front-end compiler development, and Goodnow special-
ized in back-end compiler development. Another devel-
oper, Chris Macey, worked with them for a while on 80XX
development and in other areas.
The name “Manx” was selected from a list of cats for no
particular reason except that the name Suckow wanted to
use was taken.
One of the main reasons for Aztec C’s early success was
the floating point support for the Z80 compiler which was
extended to the Apple II shortly after. Suckow insisted on
adding floating point.
During the move to ANSI C in 1989, Robert Sherry who
was with Manx at the time and interested in the minutiae of
standards represented them on the ANSI committee but left
shortly after. He also fixed numerous bugs in the Aztec C
after Chris Macey and Thomas Fenwick left the company.
By this time Microsoft had targeted competitors for their C

compiler and Aztec C was being pushed-out of the general
IBM-PC compiler market, followed by competition with
Apple’s MPW C on the Macintosh side and Lattice C on
the Amiga after SAS bought them.
In 1989 Thomas Fenwick left to work for Microsoft, and
James Goodnow worked on Aztec C occasionally but was
pursuing other projects outside the company and eventu-
ally left the company altogether. Suckow employed about
20 people at that time. Chris Macey returned as a consul-
tant but eventually left to become chief scientist for another
company. Mike Spille joined Manx as a developer along
with the late Jeff Davis (embedded systems).
Throughout the 1990s they continued to make their Aztec
C. As their market share dropped, they tried to make the
move to specializing in embedded systems development,[1]
but it was too late. They disappeared a few years back fol-
lowing the loss of market presence of some of their target
platforms (various 6502 machines, Atari and Amiga 68xxx,
etc.).[2]

In the end, Jeff Davis and Mike Spille helped Harry Suckow
keep the company going before Suckow finally closed it.
Suckow is still the Copyright holder for Aztec C.
Many professional developers used the Manx Software
Systems’ Aztec C compiler until it became operationally
extinct.[3][4]

3.2 Current status

Aztec C remains copyrighted and has not been placed into
the public domain. Harry Suckow, who started Manx Soft-
ware Systems with partners Thomas Fenwick and James
Goodnow II, is the copyright holder.
Manx Software Systems native Aztec C compilers for Ap-
ple II development have been available for free download
from the Internet for a number of years as disk images for
Apple II emulators without copyright infringement action
being sought by Manx Software Systems.

5

https://en.wikipedia.org/wiki/C_(programming_language)
https://en.wikipedia.org/wiki/Compiler
https://en.wikipedia.org/wiki/MS-DOS
https://en.wikipedia.org/wiki/Apple_II
https://en.wikipedia.org/wiki/Apple_DOS
https://en.wikipedia.org/wiki/ProDOS
https://en.wikipedia.org/wiki/Commodore_64
https://en.wikipedia.org/wiki/CP/M
https://en.wikipedia.org/wiki/Amiga
https://en.wikipedia.org/wiki/Atari_ST
https://en.wikipedia.org/wiki/Shrewsbury,_New_Jersey
https://en.wikipedia.org/wiki/New_Jersey
https://en.wikipedia.org/wiki/Compiler
https://en.wikipedia.org/wiki/IBM_PC
https://en.wikipedia.org/wiki/Macintosh
https://en.wikipedia.org/wiki/Zilog_Z80
https://en.wikipedia.org/wiki/Apple_II
https://en.wikipedia.org/wiki/Floating_point
https://en.wikipedia.org/wiki/ANSI_C
https://en.wikipedia.org/wiki/Microsoft
https://en.wikipedia.org/wiki/IBM_PC_compatible
https://en.wikipedia.org/wiki/Macintosh_Programmer%2527s_Workshop
https://en.wikipedia.org/wiki/Lattice_C
https://en.wikipedia.org/wiki/Amiga
https://en.wikipedia.org/wiki/C_(programming_language)
https://en.wikipedia.org/wiki/C_(programming_language)
https://en.wikipedia.org/wiki/Embedded_system
https://en.wikipedia.org/wiki/MOS_Technology_6502
https://en.wikipedia.org/wiki/Atari
https://en.wikipedia.org/wiki/Amiga
https://en.wikipedia.org/wiki/68000
https://en.wikipedia.org/wiki/Copyright
https://en.wikipedia.org/wiki/Public_domain

6 CHAPTER 3. AZTEC C

At least two free Internet distributions exist for native Aztec
C Compilers for the Apple II; one for Apple II DOS 3.3 and
the other for Apple II ProDOS 8.[5] A third free Internet dis-
tribution exists for Aztec C for the Commodore Amiga.[5]
A fourth free Internet distribution exists for their MS-DOS
8086 native compiler,[5] and a fifth exists for a limited ver-
sion of their MS-DOS cross-compiler for Apple II ProDOS
8.

3.3 Current use

Emulators for these older now-obsolete platforms have be-
come popular with enthusiasts and hobbyists, and most em-
ulators are free or almost free. No commercial market ex-
ists for programs or development environments that run on
these older now-obsolete platforms.
Despite the fact that these compilers are no longer of any
commercial value, the native Aztec C Compilers for these
platforms are still as usable as they ever were on their re-
spective native platforms, and the MS-DOS Aztec C cross-
development compilers for these platforms work under
Windows XP. This means that a C programmer-enthusiast
can create programs in an emulator or in the Windows en-
vironment then run them on an emulator or transfer them
to a real (but obsolete) target computer using a serial cable
or some other means.

3.4 References
[1] “PC chipsets build a firm foundation for embedded applica-

tions”. sltf.com. Retrieved 24 June 2016.

[2] “Archived copy”. Archived from the original on December
15, 2007. Retrieved November 22, 2007.

[3] “Hardware and software vendor contact information, L-P”.
microsoft.com. Retrieved 24 June 2016.

[4] Kent, Allen; Williams, James G. (25 November 1992).
“Encyclopedia of Microcomputers: Volume 11 – Manage-
ment Studies to Multiprocessing and Multitasking”. CRC
Press. Retrieved 24 June 2016 – via Google Books.

[5] “The Official Aztec C Online Museum”. clipshop.ca. Re-
trieved 24 June 2016.

https://en.wikipedia.org/wiki/MS-DOS
https://en.wikipedia.org/wiki/Cross-compiler
https://en.wikipedia.org/wiki/Emulator
https://en.wikipedia.org/wiki/MS-DOS
https://en.wikipedia.org/wiki/Cross_compiler
https://en.wikipedia.org/wiki/Cross_compiler
https://en.wikipedia.org/wiki/Windows_XP
http://www.sltf.com/articles/pein/pein9103.htm
http://www.sltf.com/articles/pein/pein9103.htm
https://web.archive.org/web/20071215083657/http://www.itee.uq.edu.au/~csmweb/decompilation/hist-c-pc.html
http://www.itee.uq.edu.au/~csmweb/decompilation/hist-c-pc.html
http://support.microsoft.com/kb/60781
https://books.google.com/books?id=hDBPy-C7jl4C&pg=RA1-PA99&lpg=RA1-PA99&dq=%2522manx%2520software%2520systems%2522%2520shrewsbury&source=web&ots=oq6cR0v7fm&sig=miY94IawT6O0DHp7uo74RetGIy0
https://books.google.com/books?id=hDBPy-C7jl4C&pg=RA1-PA99&lpg=RA1-PA99&dq=%2522manx%2520software%2520systems%2522%2520shrewsbury&source=web&ots=oq6cR0v7fm&sig=miY94IawT6O0DHp7uo74RetGIy0
http://www.clipshop.ca/Aztec/index.htm#apple

Chapter 4

BDS C

BDS C (or the BD Software C Compiler) is a compiler for a
sizeable subset of the C programming language, that ran on
and generated code for the Intel 8080 and Zilog Z80 proces-
sors. It was the first C compiler for CP/M.[1] It was written
by Leor Zolman[2] and first released in 1979 when he was
20 years old. “BDS” stood for “Brain Damage Software”.
BDS C was very popular and influential among CP/M users
and developers in the 8-bit microcomputer era. It ran much
faster and was more convenient to use than other Z80-
hosted compilers of the time. It was possible to run BDS C
on single-floppy machines with as little as 30K of RAM –
something of a minor miracle by comparison to most other
commercial compilers which required many passes and the
writing of intermediate files to disk. Around 75,000 copies
were sold, including a stripped down Japanese incarnation.
A number of important commercial CP/M products were
written in the BDS C subset of the C language, including
PeachText from PeachTree Software, MINCE and Scrib-
ble from Mark of the Unicorn, and most of the soft-
ware in the Perfect Software suite including Perfect Writer,
PerfectCalc, PerfectSpeller and PerfectFiler (which suite
was bundled with the Kaypro).
BDS C supported pointers and was very memory efficient,
with fast compilation speeds. Weak points were that the
floating point math routines were incompatible with the
Unix C compiler’s, and its relocatable object files were not
compatible with the Microsoft assembler, making it more
difficult to integrate C code with assembly language.[3]

BDS C was bundled with a significant subset of the Unix
system written in about 1980, called MARC (Machine As-
sisted Resource Coordinator). This effort in some ways re-
sembled GNU, though MARC was to be able to run CP/M
software through emulation. Unfortunately MARC’s au-
thor, Ed Ziemba, perished in a snorkeling accident before
he could complete the project.[4]

In 2002, with its commercial viability long past, Leor Zol-
man released BDS C’s source code into the public domain,
thus making it free and open-source software. Written in
8080 assembly language, the code is now mostly of histor-

ical rather than practical interest, but it is interesting to pe-
ruse for anyone wishing to see how sizeable programs for
small computers were written in those days.

4.1 See also
• Small-C

4.2 References
[1] “The Official Book for the Commodore 128”. BDS-C was

the first version of C on the market for CP/M. It has evolved
over the years into a very bug-free product preferred by many
users. The language is not as complete as the one described
by Kernighan and Ritchie’s The C Programming Language
(Prentice-Hall, 1978), but it does contain a large subset of
the important features.

[2] about

[3] “The Official Book for the Commodore 128”.

[4] InfoWorld (17 Aug 1981)

4.3 External links
• BD Software download page

• MUF Mastery – historical note about Leor Zolman and
BDS C

• Interview with Leor Zolman

• BDS C Users Group

7

https://en.wikipedia.org/wiki/C_(programming_language)
https://en.wikipedia.org/wiki/Intel_8080
https://en.wikipedia.org/wiki/Zilog_Z80
https://en.wikipedia.org/wiki/C_compiler
https://en.wikipedia.org/wiki/CP/M
https://en.wikipedia.org/wiki/CP/M
https://en.wikipedia.org/wiki/8-bit_microcomputer
https://en.wikipedia.org/wiki/Floppy
https://en.wikipedia.org/wiki/Random_access_memory
https://en.wikipedia.org/wiki/PeachText
https://en.wikipedia.org/wiki/PeachTree_Software
https://en.wikipedia.org/wiki/MINCE
https://en.wikipedia.org/wiki/Mark_of_the_Unicorn
https://en.wikipedia.org/wiki/Perfect_Software
https://en.wikipedia.org/wiki/Perfect_Writer
https://en.wikipedia.org/wiki/PerfectCalc
https://en.wikipedia.org/wiki/PerfectSpeller
https://en.wikipedia.org/wiki/PerfectFiler
https://en.wikipedia.org/wiki/Kaypro
https://en.wikipedia.org/wiki/Pointer_(computer_programming)
https://en.wikipedia.org/wiki/Floating_point
https://en.wikipedia.org/wiki/Assembly_language
https://en.wikipedia.org/wiki/GNU
https://en.wikipedia.org/wiki/In-circuit_emulator
https://en.wikipedia.org/wiki/Snorkeling
https://en.wikipedia.org/wiki/Public_domain
https://en.wikipedia.org/wiki/Free_and_open-source_software
https://en.wikipedia.org/wiki/Assembly_language
https://en.wikipedia.org/wiki/Small-C
https://archive.org/stream/The_Official_Book_for_the_Commodore_128/The_Official_Book_for_the_Commodore_128_djvu.txt
http://www.bdsoft.com/about.html
https://archive.org/stream/The_Official_Book_for_the_Commodore_128/The_Official_Book_for_the_Commodore_128_djvu.txt
https://books.google.com/books?id=pD0EAAAAMBAJ&pg=PT14&lpg=PT14&dq=marc+ed+ziemba&source=bl&ots=2iWcn6Hwk1&sig=ExVtU-OFrnLbZklae0D9g7UH2ME&hl=en&ei=0L_3TPOLLo-t8AbVpKC2Bw&sa=X&oi=book_result&ct=result&resnum=3&ved=0CC0Q6AEwAg#v=onepage&q=marc%2520ed%2520ziemba&f=false
http://www.bdsoft.com/resources/bdsc.html
http://laurel.actlab.utexas.edu/~cynbe/muq/muf3_26.html
http://www.radiks.net/~jimbo/art/int4.htm
https://en.wikipedia.org/wiki/C/C++_Users_Journal

Chapter 5

Borland Turbo C

For technical reasons, “Turbo C#” redirects here. For the
article on the Turbo C# IDE, see Turbo C Sharp.

Turbo C is a discontinued Integrated Development En-
vironment and compiler for the C programming language
from Borland. First introduced in 1987, it was noted for its
integrated development environment, small size, fast com-
pile speed, comprehensive manuals and low price.
In May 1990, Borland replaced Turbo C with Turbo C++.
In 2006, Borland reintroduced the Turbo moniker.

5.1 Early history

In the early 1980s, Borland enjoyed considerable success
with their Turbo Pascal product and it became a popular
choice when developing applications for the PC. Borland
followed up that success by releasing Turbo Basic, Turbo
Prolog and Turbo C. Turbo C had the same properties as
Turbo Pascal: an integrated development environment, a
fast compiler (though not near the speed of Turbo Pascal[1]),
a good editor, and a competitive price.
Turbo C was not as successful as the Pascal-sister prod-
uct. First, C was a language for professional programming
and systems development rather than a school language.
Turbo C competed with other professional programming
tools (Microsoft C, Lattice C, Watcom C, etc.). Turbo C
did, however, have advantages in speed of compiled code,
large project support and price. It is developed in C.

5.2 Version history

Version 1.0 (May 13, 1987) offered the first integrated de-
velopment environment for C on IBM PCs. Like many Bor-
land products of the time, the software was bought from
another company (in this case Wizard C by Bob Jervis[2]),
and branded with the “Turbo” name. It ran in 384 kB of
memory. It allowed inline assembly with full access to C

symbolic names and structures, supported all memory mod-
els, and offered optimizations for speed, size, constant fold-
ing, and jump elimination.[3]

Version 1.5 (January 1988) was an incremental improve-
ment over version 1.0. It included more sample programs,
improved manuals and bug fixes. It was shipped on five 360
KB diskettes of uncompressed files, and came with sample
C programs, including a stripped down spreadsheet called
mcalc. This version introduced the header file
(which provided fast, PC-specific console I/O routines).
Version 2.0 (late 1988) featured the first “blue screen” ver-
sion, which would be typical of all future Borland releases
for MS-DOS. The American release did not have Turbo As-
sembler or a separate debugger. (These were sold separately
as Turbo Assembler.) Turbo C, Asm, and Debugger were
sold together as a suite. This seems to describe another re-
lease: Featured Turbo Debugger, Turbo Assembler, and an
extensive graphics library. This version of Turbo C was
also released (in Germany only) for the Atari ST; the pro-
gram was not maintained by Borland, but sold and renamed
PureC.
With the release of Turbo C++ 1.0 (in 1990), the two prod-
ucts were folded into one and the name “Turbo C” was dis-
continued. The C++ compiler was developed under con-
tract by a company in San Diego, and was one of the first
“true” compilers for C++ (until then, it was common to use
pre-compilers that generated C code, ref. Cfront).

5.3 Freeware release

In 2006, Borland’s successor, Embarcadero Technologies,
re-released Turbo C and the MS-DOS versions of the Turbo
C++ compilers as freeware.[4][5][6]

5.4 See also

• Turbo Assembler

8

https://en.wikipedia.org/wiki/Wikipedia:Naming_conventions_(technical_restrictions)#Forbidden_characters
https://en.wikipedia.org/wiki/Turbo_C_Sharp
https://en.wikipedia.org/wiki/Integrated_Development_Environment
https://en.wikipedia.org/wiki/Integrated_Development_Environment
https://en.wikipedia.org/wiki/Compiler
https://en.wikipedia.org/wiki/C_(programming_language)
https://en.wikipedia.org/wiki/Borland
https://en.wikipedia.org/wiki/Turbo_C++
https://en.wikipedia.org/wiki/Turbo_Pascal
https://en.wikipedia.org/wiki/Turbo_Basic
https://en.wikipedia.org/wiki/Turbo_Prolog
https://en.wikipedia.org/wiki/Turbo_Prolog
https://en.wikipedia.org/wiki/Integrated_development_environment
https://en.wikipedia.org/wiki/Microsoft_C
https://en.wikipedia.org/wiki/Lattice_C
https://en.wikipedia.org/wiki/Watcom_C/C++_compiler
https://en.wikipedia.org/wiki/IBM_PC
https://en.wikipedia.org/wiki/Diskette
https://en.wikipedia.org/wiki/Mcalc
https://en.wikipedia.org/wiki/MS-DOS
https://en.wikipedia.org/wiki/Turbo_Assembler
https://en.wikipedia.org/wiki/Turbo_Debugger
https://en.wikipedia.org/wiki/Germany
https://en.wikipedia.org/wiki/Atari_ST
https://en.wikipedia.org/wiki/Turbo_C++
https://en.wikipedia.org/wiki/Cfront
https://en.wikipedia.org/wiki/Embarcadero_Technologies
https://en.wikipedia.org/wiki/Freeware
https://en.wikipedia.org/wiki/Turbo_Assembler

5.6. EXTERNAL LINKS 9

• Turbo Debugger

5.5 References
[1] Hague, James. “A Personal History of Compilation Speed,

Part 2”. Programming in the 21st Century. Retrieved 2016-
06-05.

[2] Borland Backgrounder, 2/8/99

[3] “Computing Dictionary”. Foldoc.org. Retrieved 2016-06-
05.

[4] Tim DelChiaro (2011-09-01). “Free Borland C++ 5.5 Com-
piler”. Edn.embarcadero.com. Retrieved 2016-06-05.

[5] Intersimone, David (1989-05-11). “Antique Software:
Turbo C version 2.01”. Edn.embarcadero.com. Retrieved
2016-06-05.

[6] Intersimone, David (1991-02-28). “Antique Software:
Turbo C++ version 1.01”. Edn.embarcadero.com. Re-
trieved 2016-06-05.

5.6 External links
• borland.com – Borland Developer Network Museum

• turboexplorer.com – Turbo Explorer Homepage —
New downloadable versions of Turbo brand tools

• codegear.com – Turbo C++ version 1.01

• borland.com – Turbo C 2.01 Free download from EDN

• computermuseum-muenchen.de – Computer Museum
in Munich with a large collection of software, includ-
ing Turbo C 1.0 ff

https://en.wikipedia.org/wiki/Turbo_Debugger
http://prog21.dadgum.com/47.html
http://prog21.dadgum.com/47.html
https://groups.google.com/d/msg/borland.public.delphi.non-technical/QMdz7BbHDVg/T8bGnRFje3cJ
http://foldoc.org/index.cgi?Turbo+C
http://edn.embarcadero.com/article/41337
http://edn.embarcadero.com/article/41337
http://edn.embarcadero.com/article/20841
http://edn.embarcadero.com/article/20841
http://edn.embarcadero.com/article/21751
http://edn.embarcadero.com/article/21751
https://web.archive.org/web/20080516014021/http://community.borland.com/museum/
http://www.turboexplorer.com/
http://dn.codegear.com/article/21751
http://cc.embarcadero.com/item/25636
http://www.computermuseum-muenchen.de/
http://www.computermuseum-muenchen.de/
http://www.computermuseum-muenchen.de/

Chapter 6

cc65

cc65 is a complete cross development package for 65(C)02
systems, including a powerful macro assembler, a C
compiler, linker, librarian and several other tools.
It is based on a C compiler that was originally adapted for
the Atari 8-bit computers by John R. Dunning. The original
C compiler is a Small C descendant but has several exten-
sions, and some of the limits of the original Small C com-
piler are gone.
The toolkit has largely been expanded by Ullrich von Basse-
witz and other contributors. The actual cc65 compiler, a
complete set of binary tools (assembler, linker, etc.) and
runtime library are under a license identical to zlib’s.[1] The
ca65 cross-assembler is one of the most powerful 6502
cross-assemblers available under an open-source license.
The compiler itself is almost completely ANSI C compati-
ble, though not completely. The C library is quite extensive,
and allows extensive usage of the target platform’s hard-
ware. stdio is supported on many platforms, as is Borland-
style conio.h screen handling. GEOS is also supported
on the Commodore 64 and even the Apple II. The library
supports many of the Commodore platforms (C64, C128,
C16/116/Plus/4, P500 and 600/700 family), Apple II fam-
ily, Atari 8-bit family, Oric Atmos, Nintendo Entertainment
System, Watara Supervision game console and Ohio Scien-
tific Challenger 1P.[2]

The officially supported host systems include Linux,
Microsoft Windows, DOS and OS/2, but the source code
itself is quite portable and has been reported to work almost
unmodified on many platforms beside these.

6.1 Supported API

6.1.1 static

• conio (text-based console I/O non-scrolling)

• dio (block-oriented disk I/O bypassing the file system)

6.1.2 dynamic

• em (expanded memory, used for all kinds of memory
beyond the 6502’s 64K barrier, similar EMS)

• joystick (relative input devices)

• mouse (absolute input devices)

• serial (communication)

• tgi (2D graphics primitives inspired by BGI)

Note: For static libraries, “Yes” means the feature is avail-
able. For dynamic libraries, the columns list the number of
available drivers.

[1] https://github.com/cc65/cc65/commit/
aeb849257277a6b98542de8579697b81c6dd70e6

[2] http://cc65.github.io/doc/osi.html

[3] By Fatih Aygün. CIRCLE doesn’t work at all, some graphics
modes may crash on some machines.

6.2 External links
• Official website (no longer maintained)

• Modern github fork of cc65

• Contiki desktop, written with cc65

• TGI drivers for atari8

• Atari TGI 2009-11-02 release announcement on cc65
mailing list

• Android host

10

https://en.wikipedia.org/wiki/MOS_Technology_6502
https://en.wikipedia.org/wiki/Assembly_language#Assembler
https://en.wikipedia.org/wiki/C_(programming_language)
https://en.wikipedia.org/wiki/Compiler
https://en.wikipedia.org/wiki/Linker_(computing)
https://en.wikipedia.org/wiki/Tool#Mental_tools
https://en.wikipedia.org/wiki/Atari_8-bit_family
https://en.wikipedia.org/wiki/Small_C
https://en.wikipedia.org/wiki/Zlib
https://en.wikipedia.org/wiki/ANSI_C
https://en.wikipedia.org/wiki/Stdio.h
https://en.wikipedia.org/wiki/Borland
https://en.wikipedia.org/wiki/Conio.h
https://en.wikipedia.org/wiki/GEOS_(8-bit_operating_system)
https://en.wikipedia.org/wiki/Commodore_64
https://en.wikipedia.org/wiki/Apple_II
https://en.wikipedia.org/wiki/Commodore_64
https://en.wikipedia.org/wiki/Commodore_128
https://en.wikipedia.org/wiki/Commodore_16
https://en.wikipedia.org/wiki/Commodore_Plus/4
https://en.wikipedia.org/wiki/Commodore_CBM-II
https://en.wikipedia.org/wiki/Apple_II_series
https://en.wikipedia.org/wiki/Apple_II_series
https://en.wikipedia.org/wiki/Atari_8-bit_family
https://en.wikipedia.org/wiki/Oric#Oric_Atmos
https://en.wikipedia.org/wiki/Nintendo_Entertainment_System
https://en.wikipedia.org/wiki/Nintendo_Entertainment_System
https://en.wikipedia.org/wiki/Watara_Supervision
https://en.wikipedia.org/wiki/Ohio_Scientific
https://en.wikipedia.org/wiki/Ohio_Scientific
https://en.wikipedia.org/wiki/Linux
https://en.wikipedia.org/wiki/Microsoft_Windows
https://en.wikipedia.org/wiki/DOS
https://en.wikipedia.org/wiki/OS/2
https://en.wikipedia.org/wiki/Expanded_memory
https://en.wikipedia.org/wiki/Borland_Graphics_Interface
https://github.com/cc65/cc65/commit/aeb849257277a6b98542de8579697b81c6dd70e6
https://github.com/cc65/cc65/commit/aeb849257277a6b98542de8579697b81c6dd70e6
http://cc65.github.io/doc/osi.html
http://www.cc65.org/
http://cc65.github.io/cc65/
http://contiki.cbm8bit.com/
http://atari.isgreat.org/
http://www.cc65.org/mailarchive/2009-11/7459.html
http://www.cc65.org/mailarchive/2009-11/7459.html
https://github.com/efornara/jbit/wiki/Android

Chapter 7

ccache

ccache is a software development tool that caches the output
of C/C++ compilation so that the next time, the same com-
pilation can be avoided and the results can be taken from
the cache. This can greatly speed up recompiling time. The
detection is done by hashing different kinds of information
that should be unique for the compilation and then using the
hash sum to identify the cached output. Ccache is licensed
under the GNU General Public License.

7.1 See also
• distcc

7.2 References

7.3 External links
• Official website

11

https://en.wikipedia.org/wiki/Software_development
https://en.wikipedia.org/wiki/C_(programming_language)
https://en.wikipedia.org/wiki/C++
https://en.wikipedia.org/wiki/Compiler
https://en.wikipedia.org/wiki/Fingerprint_(computing)
https://en.wikipedia.org/wiki/GNU_General_Public_License
https://en.wikipedia.org/wiki/Distcc
https://ccache.samba.org/

Chapter 8

CFLAGS

CFLAGS and CXXFLAGS are either the name of
environment variables or of Makefile variables that can be
set to specify additional switches to be passed to a compiler
in the process of building computer software.
These variables are usually set inside a Makefile and are
then appended to the command line when the compiler is
invoked. If they are not specified in the Makefile, then
they will be read from the environment, if present. Tools
like autoconf’s ./configure script will usually pick them up
from the environment and write them into the generated
Makefiles. Some package install scripts, like SDL, allow
CFLAGS settings to override their normal settings (instead
of append to them), so setting CFLAGS can cause harm in
this case.
CFLAGS enables the addition of switches for the C com-
piler, while CXXFLAGS is meant to be used when invok-
ing a C++ compiler. Similarly, a variable CPPFLAGS ex-
ists with switches to be passed to the C or C++ preproces-
sor.
These variables are most commonly used to specify
optimization or debugging switches to a compiler, as for ex-
ample -g, -O2 or (GCC-specific) -march=athlon.

8.1 See also
• Compiler optimization

8.2 External links
• GNU optimisation page

• Gentoo Wiki CFLAG guide

• Gentoo Wiki guide to safe CFLAGS

• Linux Review page on optimized gcc compiling

12

https://en.wikipedia.org/wiki/Environment_variable
https://en.wikipedia.org/wiki/Makefile
https://en.wikipedia.org/wiki/Switch_(command_line)
https://en.wikipedia.org/wiki/Compiler
https://en.wikipedia.org/wiki/Computer_software
https://en.wikipedia.org/wiki/Autoconf
https://en.wikipedia.org/wiki/C_programming_language
https://en.wikipedia.org/wiki/C++
https://en.wikipedia.org/wiki/C_preprocessor
https://en.wikipedia.org/wiki/C_preprocessor
https://en.wikipedia.org/wiki/Optimization_(computer_science)
https://en.wikipedia.org/wiki/Debugging
https://en.wikipedia.org/wiki/GNU_Compiler_Collection
https://en.wikipedia.org/wiki/Compiler_optimization
https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html
http://wiki.gentoo.org/wiki/CFLAGS
http://wiki.gentoo.org/wiki/Safe_CFLAGS
http://linuxreviews.org/howtos/compiling/

Chapter 9

Clang

This article is about the Clang compiler. For the phe-
nomenon of rhyming word association, see Clanging.

Clang /ˈklæŋ/[4] is a compiler front end for the pro-
gramming languages C, C++, Objective-C, Objective-C++,
OpenMP,[5] OpenCL, and CUDA. It uses LLVM as its
back end and has been part of the LLVM release cycle since
LLVM 2.6.
It is designed to be able to replace the full GNU Com-
piler Collection (GCC). Its contributors include Apple,
Microsoft, Google, ARM, Sony, Intel and Advanced Micro
Devices (AMD). It is open-source software,[6] with source
code released under the University of Illinois/NCSA Li-
cense, a permissive free software licence.
The Clang project includes the Clang front end and the
Clang static analyzer and several code analysis tools.[7]

9.1 Background

Starting in 2005, Apple made extensive use of LLVM in
a number of commercial systems,[8] including the iPhone
software development kit (SDK) and integrated develop-
ment environment (IDE) Xcode 3.1.
One of the first uses of LLVM was an OpenGL code com-
piler for OS X that converts OpenGL calls into more fun-
damental calls for graphics processing units (GPU) that do
not support certain features. This allowed Apple to sup-
port the entire OpenGL application programming inter-
face (API) on computers using Intel Graphics Media Ac-
celerator (GMA) chipsets, increasing performance on those
machines.[9] For GPUs that support it, the code is compiled
to exploit fully the underlying hardware, but on GMA ma-
chines, LLVM compiles the same OpenGL code into sub-
routines to ensure continued proper function.
LLVM was intended originally to use GCC’s front end, but
GCC turned out to cause some problems for developers of
LLVM and at Apple. The GCC source code is a large and

somewhat cumbersome system for developers to work with;
as one long-time GCC developer put it, “Trying to make the
hippo dance is not really a lot of fun”.[10]

Apple software makes heavy use of Objective-C, but the
Objective-C front-end in GCC is a low priority for GCC
developers. Also, GCC does not fit smoothly into Apple’s
IDE.[11] Finally, GCC is licensed under GNU General Pub-
lic License (GPL) version 3, which requires developers who
distribute extensions for, or modified versions of, GCC to
make their source code available, whereas LLVM has a
BSD-like license[12] which does not force users to release
their source code changes when publishing compiled bina-
ries of those changes.
Apple chose to develop a new compiler front end from
scratch, supporting C, Objective-C and C++.[11] This
“clang” project was open-sourced in July 2007.[13]

9.2 Design

Clang is intended to work atop LLVM.[12] The combina-
tion of Clang and LLVM provides most of the toolchain,
to allow replacing the full GCC stack. Because it is built
with a library-based design, like the rest of LLVM, Clang
is easy to embed into other applications. This is one reason
why most OpenCL implementations are built with Clang
and LLVM.
One of Clang’s main goals is to provide a library-based ar-
chitecture,[14] to allow the compiler to be more tightly tied
to tools that interact with source code, such as an integrated
development environment (IDE) graphical user interface
(GUI). In contrast, GCC is designed to work in a classic
compile-link-debug cycle, and integrating it with other tools
is not always easy. For instance, GCC uses a step called fold
that is key to the overall compile process, which has the side
effect of translating the code tree into a form that looks un-
like the original source code. If an error is found during or
after the fold step, it can be difficult to translate that back
into one location in the original source. Also, vendors us-

13

https://en.wikipedia.org/wiki/Compiler
https://en.wikipedia.org/wiki/Clanging
https://en.wikipedia.org/wiki/Help:IPA_for_English
https://en.wikipedia.org/wiki/Compiler
https://en.wikipedia.org/wiki/Front-end_and_back-end
https://en.wikipedia.org/wiki/C_(programming_language)
https://en.wikipedia.org/wiki/C++
https://en.wikipedia.org/wiki/Objective-C
https://en.wikipedia.org/wiki/Objective-C++
https://en.wikipedia.org/wiki/OpenMP
https://en.wikipedia.org/wiki/OpenCL
https://en.wikipedia.org/wiki/CUDA
https://en.wikipedia.org/wiki/LLVM
https://en.wikipedia.org/wiki/Front_and_back_ends
https://en.wikipedia.org/wiki/GNU_Compiler_Collection
https://en.wikipedia.org/wiki/GNU_Compiler_Collection
https://en.wikipedia.org/wiki/Apple_Inc.
https://en.wikipedia.org/wiki/Microsoft
https://en.wikipedia.org/wiki/Google_Inc.
https://en.wikipedia.org/wiki/ARM_Holdings
https://en.wikipedia.org/wiki/Sony
https://en.wikipedia.org/wiki/Intel
https://en.wikipedia.org/wiki/Advanced_Micro_Devices
https://en.wikipedia.org/wiki/Advanced_Micro_Devices
https://en.wikipedia.org/wiki/Open-source_software
https://en.wikipedia.org/wiki/University_of_Illinois/NCSA_Open_Source_License
https://en.wikipedia.org/wiki/University_of_Illinois/NCSA_Open_Source_License
https://en.wikipedia.org/wiki/Permissive_free_software_licence
https://en.wikipedia.org/wiki/Front_and_back_ends
https://en.wikipedia.org/wiki/Static_program_analysis
https://en.wikipedia.org/wiki/IOS_SDK
https://en.wikipedia.org/wiki/IOS_SDK
https://en.wikipedia.org/wiki/Integrated_development_environment
https://en.wikipedia.org/wiki/Integrated_development_environment
https://en.wikipedia.org/wiki/Xcode
https://en.wikipedia.org/wiki/OpenGL
https://en.wikipedia.org/wiki/OS_X
https://en.wikipedia.org/wiki/Graphics_processing_unit
https://en.wikipedia.org/wiki/Application_programming_interface
https://en.wikipedia.org/wiki/Application_programming_interface
https://en.wikipedia.org/wiki/Intel_GMA
https://en.wikipedia.org/wiki/Intel_GMA
https://en.wikipedia.org/wiki/Objective-C
https://en.wikipedia.org/wiki/GNU_General_Public_License#Version_3
https://en.wikipedia.org/wiki/GNU_General_Public_License#Version_3
https://en.wikipedia.org/wiki/Source_code
https://en.wikipedia.org/wiki/BSD_licenses
https://en.wikipedia.org/wiki/C_(programming_language)
https://en.wikipedia.org/wiki/Objective-C
https://en.wikipedia.org/wiki/C++
https://en.wikipedia.org/wiki/OpenCL
https://en.wikipedia.org/wiki/Library-based_architecture
https://en.wikipedia.org/wiki/Library-based_architecture
https://en.wikipedia.org/wiki/Integrated_development_environment
https://en.wikipedia.org/wiki/Integrated_development_environment
https://en.wikipedia.org/wiki/Graphical_user_interface
https://en.wikipedia.org/wiki/Compile-link-debug_cycle

14 CHAPTER 9. CLANG

ing the GCC stack within IDEs use separate tools to index
the code, to provide features like syntax highlighting and
autocomplete.
Clang is designed to retain more information during the
compiling process than GCC, and to preserve the overall
form of the original code. The goal of this is to make it eas-
ier to map errors back into the original source. The error
reports offered by Clang are also aimed to be more detailed
and specific, as well as machine-readable, so IDEs can in-
dex the output of the compiler during compiling. Modular
design of the compiler can offer source code indexing, syn-
tax checking, and other features normally associated with
rapid application development systems. The parse tree is
also more suitable for supporting automated code refactor-
ing, as it directly represents the original source code.
Clang is a compiler for only C-like languages, including C,
C++, Objective-C, Objective-C++, OpenCL, and CUDA.
For other languages, including Java, Fortran, and Ada,
LLVM remains dependent on GCC or another compiler
frontend. In many cases, Clang can be used or swapped out
for GCC as needed, with no other effects on the toolchain
as a whole. It supports most of the commonly used GCC
options.

9.3 Performance and GCC compati-
bility

Clang is designed to be highly compatible with GCC.[15]
Clang’s command-line interface is similar to and shares
many flags and options with GCC. Clang implements many
GNU language extensions and enables them by default.
Clang implements many GCC compiler intrinsics purely
for compatibility. For example, even though Clang imple-
ments atomic intrinsics which correspond exactly with C11
atomics, it also implements GCC’s __sync_* intrinsics for
compatibility with GCC and libstdc++. Clang also main-
tains ABI compatibility with GCC-generated object code.
In practice Clang can often be used as a drop-in replace-
ment for GCC.
Clang’s developers aim to reduce memory footprint and
increase compilation speed compared to competing com-
pilers, such as GCC. In October 2007, they report that
Clang compiled the Carbon libraries well over twice as fast
as GCC, while using about one-sixth GCC’s memory and
disk space.[16] However, as of 2011 this was not a typical
result.[17][18] As of mid-2014, Clang won more than a third
of the benchmarks, with GCC winning most.[19]

While there are still a few tests where performance of a
Clang-compiled program lags behind performance of the
GCC-compiled program, by large factors (up to 5.5x),[19]

it has been reported that Clang “continues to be under very
active development,” and a hope was expressed for further
improvement.[17]

9.4 Status history

This table presents only significant steps and releases in
Clang history.

9.5 See also

• LLDB

• Portable C Compiler

• source code indexing

9.6 References
[1] http://www.llvm.org/releases/2.1/docs/ReleaseNotes.html

[2] http://llvm.org/releases/

[3] LLVM License, retrieved 2014-07-24

[4] Christopher, Eric (3 July 2008). “simply wonder pronunci-
ation of Clang”. LLVMdev (Mailing list). Retrieved 2015-
09-22.

[5] “OpenMP Support”. LLVM Project Blog. Retrieved 28
March 2016.

[6] Clang “Getting started” instructions, Clang.llvm.org, retrieved
2012-09-18

[7] “Clang Static Analyzer”. LLVM. Retrieved 3 September
2009.

[8] Treat, Adam (19 February 2005). “mkspecs and patches
for LLVM compile of Qt4”. Qt4-preview-feedback (Mail-
ing list).

[9] Lattner, Chris (25 May 2007). LLVM for OpenGL and other
stuff (Slides). LLVM Developers’ Meeting.

[10] Zadeck, Kenneth (19 November 2005). “Re: LLVM/GCC
Integration Proposal”. GCC development (Mailing list).

[11] Naroff, Steve (25 May 2007). New LLVM C Front-end
(Slides). LLVM Developers’ Meeting.

[12] Clang team, clang: a C language family frontend for LLVM

[13] Lattner, Chris (11 July 2007). “New LLVM C front-end:
“clang””. cfe-dev (Mailing list). Archived from the original
on 2015-03-25.

https://en.wikipedia.org/wiki/Syntax_highlighting
https://en.wikipedia.org/wiki/Autocomplete
https://en.wikipedia.org/wiki/Source_code
https://en.wikipedia.org/wiki/Index_(search_engine)
https://en.wikipedia.org/wiki/Rapid_application_development
https://en.wikipedia.org/wiki/Parse_tree
https://en.wikipedia.org/wiki/Code_refactoring
https://en.wikipedia.org/wiki/Code_refactoring
https://en.wikipedia.org/wiki/Java_(programming_language)
https://en.wikipedia.org/wiki/Fortran
https://en.wikipedia.org/wiki/Ada_(programming_language)
https://en.wikipedia.org/wiki/Application_binary_interface
https://en.wikipedia.org/wiki/Carbon_(API)
https://en.wikipedia.org/wiki/LLDB_(debugger)
https://en.wikipedia.org/wiki/Portable_C_Compiler
https://en.wikipedia.org/wiki/Source_code_indexing
http://www.llvm.org/releases/2.1/docs/ReleaseNotes.html
http://llvm.org/releases/
http://llvm.org/releases/3.4.2/LICENSE.TXT
http://lists.llvm.org/pipermail/llvm-dev/2008-July/015629.html
http://lists.llvm.org/pipermail/llvm-dev/2008-July/015629.html
http://blog.llvm.org/2015/05/openmp-support_22.html
http://clang.llvm.org/get_involved.html
http://clang-analyzer.llvm.org/
http://lists.trolltech.com/qt4-preview-feedback/2005-02/msg00691.html
http://lists.trolltech.com/qt4-preview-feedback/2005-02/msg00691.html
http://llvm.org/devmtg/2007-05/10-Lattner-OpenGL.pdf
http://llvm.org/devmtg/2007-05/10-Lattner-OpenGL.pdf
http://llvm.org/devmtg/2007-05/
https://gcc.gnu.org/ml/gcc/2005-11/msg00918.html
https://gcc.gnu.org/ml/gcc/2005-11/msg00918.html
http://llvm.org/devmtg/2007-05/09-Naroff-CFE.pdf
http://llvm.org/devmtg/2007-05/
http://clang.llvm.org/
https://web.archive.org/web/20150325151730/http://lists.cs.uiuc.edu/pipermail/cfe-dev/2007-July/000000.html
https://web.archive.org/web/20150325151730/http://lists.cs.uiuc.edu/pipermail/cfe-dev/2007-July/000000.html
http://lists.cs.uiuc.edu/pipermail/cfe-dev/2007-July/000000.html

9.7. EXTERNAL LINKS 15

[14] Clang: Utility and Applications: Library Based Architecture

[15] Clang – Features and Goals: GCC Compatibility, 15 April
2013

[16] Clang – Features and Goals: Fast compiles and Low Memory
Use, October 2007

[17] Simonis, Volker (10 February 2011). “Compiling the
HotSpot VM with Clang”. Archived from the original on
18 February 2011. Retrieved 13 February 2011. While the
overall GCC compatibility is excellent and the compile times
are impressive, the performance of the generated code is still
lacking behind a recent GCC version.

[18] “Benchmarking LLVM & Clang Against GCC 4.5”.
Phoronix. 21 April 2010. Retrieved 13 February 2011. Bi-
naries from LLVM-GCC and Clang both struggled to compete
with GCC 4.5.0 in the timed HMMer benchmark of a Pfam
database search. LLVM-GCC and Clang were about 23%
slower(…)Though LLVM / Clang isn’t the performance cham-
pion at this point, both components continue to be under very
active development and there will hopefully be more news to
report in the coming months

[19] “GCC 4.9 VS. LLVM Clang 3.5 Linux Compiler Bench-
marks”. OpenBenchmarking.org. 14 April 2014. Retrieved
25 June 2014.

[20] Divacky, Roman. “[Announce] clang/llvm can compile
booting FreeBSD kernel on i386/amd64”.

[21] Building FreeBSD with Clang, Wiki.freebsd.org, 2012-08-
24, retrieved 2012-09-18

[22] Hornung, Alex. “llvm/clang once more”.

[23] Clang, DragonFly BSD, retrieved 2012-09-18

[24] “Clang can compile LLVM and Clang”. LLVM Project
Blog.

[25] “Clang Successfully Self-Hosts”. LLVM Project Blog.

[26] “HelenOS mainline changeset head,294”.

[27] Gregor, Doug. “Clang++ Builds Boost!”. LLVM Project
Blog.

[28] Davis, Brad. “FreeBSD Status Reports April – June, 2010”.

[29] Clang builds a working Linux Kernel (Boots to RL5 with SMP,
networking and X, self hosts), Lists.cs.uiuc.edu, retrieved
2012-09-18

[30] Gregor, Douglas (26 January 2011). “New C++0x feature
support in Clang” (Mailing list). Archived from the original
on 30 January 2011. Retrieved 29 January 2011.

[31] “C++ and C++’0x Support in Clang”. LLVM.

[32] Sonnenberger, Jörg (2012-01-19). “Status of NetBSD and
LLVM”. Retrieved 2014-02-26.

[33] Ledru, Sylvestre. “Rebuild of the Debian archive with
clang”.

[34] “Official Minix 3 website: News”.

[35] Gerzo, Daniel (12 May 2012). “FreeBSD Quarterly Status
Report January-March, 2012” (Mailing list). Retrieved 14
May 2012.

[36] Davis, Brooks (5 November 2012). “Heads Up: Clang now
the default on x86” (Mailing list). Retrieved 7 November
2012.

[37] Webster, Behan (18 February 2013). “LLVMLinux: Com-
piling Android with LLVM” (PDF). Retrieved 11 May
2013.

[38] Tinti, Vinicius (17 March 2013). “LLVMLinux: Nexus 7”.
Retrieved 11 May 2013.

[39] Du Toit, Stefanus. “Clang is C++11 feature complete as of
*just now*!”.

[40] “[llvm-project] Revision 194194”.

[41] Ledru, Sylvestre. “Rebuild of Debian using Clang 3.5.0”.

9.7 External links
• Official website

• LLVMdev: New LLVM C front-end: “clang”, an-
nouncement (11 July 2007)

• Presentation: Ted Kremenek – Finding Bugs with the
Clang Static Analyzer, Slides

• Presentation: Steve Naroff – Clang Internals, Slides

• 2009 DevMtg Clang presentation

http://clang.llvm.org/features.html#libraryarch
http://clang.llvm.org/features.html#gcccompat
http://clang.llvm.org/features.html
http://clang.llvm.org/features.html
https://web.archive.org/web/20110218013535/http://weblogs.java.net/blog/simonis/archive/2011/02/10/compiling-hotspot-vm-clang
https://web.archive.org/web/20110218013535/http://weblogs.java.net/blog/simonis/archive/2011/02/10/compiling-hotspot-vm-clang
http://weblogs.java.net/blog/simonis/archive/2011/02/10/compiling-hotspot-vm-clang
https://www.phoronix.com/scan.php?page=article&item=gcc_llvm_clang&num=6
https://en.wikipedia.org/wiki/Phoronix
http://openbenchmarking.org/result/1404144-KH-CLANG359076
http://openbenchmarking.org/result/1404144-KH-CLANG359076
http://lists.freebsd.org/pipermail/freebsd-current/2009-February/003743.html
http://lists.freebsd.org/pipermail/freebsd-current/2009-February/003743.html
http://wiki.freebsd.org/BuildingFreeBSDWithClang
http://leaf.dragonflybsd.org/mailarchive/kernel/2009-03/msg00067.html
http://www.dragonflybsd.org/docs/developer/clang/
http://blog.llvm.org/2009/12/clang-builds-llvm.html
http://blog.llvm.org/2010/02/clang-successfully-self-hosts.html
http://trac.helenos.org/trac.fcgi/changeset/mainline%252C294
http://blog.llvm.org/2010/05/clang-builds-boost.html
http://www.freebsd.org/news/status/report-2010-04-2010-06.html#Clang-Replacing-GCC-in-the-Base-System
http://lists.cs.uiuc.edu/pipermail/cfe-dev/2010-October/011711.html
http://lists.cs.uiuc.edu/pipermail/cfe-dev/2010-October/011711.html
https://web.archive.org/web/20110130065354/http://lists.cs.uiuc.edu:80/pipermail/cfe-dev/2011-January/013013.html
https://web.archive.org/web/20110130065354/http://lists.cs.uiuc.edu:80/pipermail/cfe-dev/2011-January/013013.html
http://lists.cs.uiuc.edu/pipermail/cfe-dev/2011-January/013013.html
http://clang.llvm.org/cxx_status.html
http://www.sonnenberger.org/2012/01/19/status-netbsd-and-llvm/
http://www.sonnenberger.org/2012/01/19/status-netbsd-and-llvm/
http://sylvestre.ledru.info/blog/2012/02/29/rebuild_of_the_debian_archive_with_clang
http://sylvestre.ledru.info/blog/2012/02/29/rebuild_of_the_debian_archive_with_clang
http://www.minix3.org/news/
http://lists.freebsd.org/pipermail/freebsd-stable/2012-May/067486.html
http://lists.freebsd.org/pipermail/freebsd-stable/2012-May/067486.html
http://lists.freebsd.org/pipermail/freebsd-current/2012-November/037610.html
http://lists.freebsd.org/pipermail/freebsd-current/2012-November/037610.html
http://events.linuxfoundation.org/images/stories/slides/abs2013_webster.pdf
http://events.linuxfoundation.org/images/stories/slides/abs2013_webster.pdf
http://llvm.linuxfoundation.org/index.php/Nexus_7
https://twitter.com/sdt_intel/status/325289093170864129
https://twitter.com/sdt_intel/status/325289093170864129
http://llvm.org/viewvc/llvm-project?view=revision&revision=194194
http://sylvestre.ledru.info/blog/2014/09/11/rebuild-of-debian-using-clang-3-5
http://clang.llvm.org/
http://lists.cs.uiuc.edu/pipermail/llvmdev/2007-July/009817.html



http://llvm.org/devmtg/2008-08/Kremenek_StaticAnalyzer.pdf

http://llvm.org/devmtg/2008-08/Naroff_Clang.pdf
http://llvm.org/devmtg/2009-10/StateOfClang.pdf

Chapter 10

CodeWarrior

CodeWarrior is an integrated development environ-
ment (IDE) published by Freescale Semiconductor for
editing, compiling, and debugging software for several
microcontrollers and microprocessors (Freescale Cold-
Fire, ColdFire+, Kinetis, Qorivva, PX, Freescale RS08,
Freescale S08, and S12Z) and digital signal controllers
(DSC MC56F80X and MC5680XX) used in embedded
systems.
Languages supported are C, C++, and assembly language.
Freescale’s CodeWarrior for Microcontrollers version 10.5
(September 16, 2013) incorporates the Eclipse IDE version
4.21 (Juno) and Eclipse CDT (C/C++ Development Tool-
ing) version 8.1.1.

10.1 Old versions

Prior to the acquisition of the product by Freescale, versions
existed targeting Macintosh, Microsoft Windows, Linux,
Solaris, PlayStation, PlayStation 2, Nintendo GameCube,
Nintendo DS, Wii,[1] Sega Dreamcast, SuperH, M·CORE,
Palm OS, Symbian OS, and BeOS.
Metrowerks versions of CodeWarrior also included Pascal,
Object Pascal, Objective-C, and Java compilers.
Retrocomputing enthusiasts still use older versions of Code-
Warrior to develop on the classic Mac OS. Classilla is built
with Metrowerks CodeWarrior 7.1.[2]

10.2 History

CodeWarrior was originally developed by Metrowerks
based on a C compiler and environment for the Mo-
torola 68K, developed by Andreas Hommel and licensed
to Metrowerks. The first versions of CodeWarrior tar-
geted the PowerPC Macintosh, with much of the develop-
ment done by a group from the original THINK C team.
Much like THINK C, which was known for its fast compile

times, CodeWarrior was faster than Macintosh Program-
mer’s Workshop (MPW), the development tools written by
Apple.
CodeWarrior was a key factor in the success of Apple’s tran-
sition of its machine architecture from 68K processors to
PowerPC because it provided a complete, solid PowerPC
compiler when the competition (Apple’s MPW tools and
Symantec C++) was mostly incomplete. Metrowerks also
made it easy to generate fat binaries, which included both
68K and PowerPC code.
After Metrowerks was acquired by Motorola in 1999, the
company concentrated on embedded applications, devoting
a smaller fraction of their efforts to compilers for desktop
computers. On 29 July 2005, they announced that Code-
Warrior for Mac would be discontinued after the next re-
lease, CodeWarrior Pro 10. Although Metrowerks did not
detail their reasons, the demand for CodeWarrior had pre-
sumably fallen during the time Apple began distributing
Xcode (its own software development kit for OS X) for
free. In addition, Apple’s switch to Intel chips left Metrow-
erks without an obvious product as they had sold their Intel
compiler technology to Nokia earlier in 2005.
During its heyday, the product was known for its rapid re-
lease cycle, with multiple revisions every year, and for its
quirky advertising campaign. Their “geekware” shirts were
featured in the fashion pages of the New York Times.[3]

10.3 Origin of the name

During the 1990s, Apple Computer released a monthly se-
ries of developer CD-ROMs containing resources for pro-
gramming the Macintosh. These CDs were, in the early
days, whimsically titled using punning references to various
movies but with a coding twist; for example, “The Hexor-
cist” (The Exorcist), “Lord of the Files” (Lord of the Flies),
“Gorillas in the Disc” (Gorillas in the Mist), etc.[4]

One of these, volume 9, was titled “Code Warrior”, refer-
ring to the movie Mad Max 2: The Road Warrior. Later

16

https://en.wikipedia.org/wiki/Integrated_development_environment
https://en.wikipedia.org/wiki/Integrated_development_environment
https://en.wikipedia.org/wiki/Freescale_Semiconductor
https://en.wikipedia.org/wiki/Microcontroller
https://en.wikipedia.org/wiki/Microprocessor
https://en.wikipedia.org/wiki/Freescale_ColdFire
https://en.wikipedia.org/wiki/Freescale_ColdFire
https://en.wikipedia.org/wiki/Qorivva
https://en.wikipedia.org/wiki/Freescale_RS08
https://en.wikipedia.org/wiki/Freescale_S08
https://en.wikipedia.org/wiki/Digital_signal_controller
https://en.wikipedia.org/wiki/Embedded_system
https://en.wikipedia.org/wiki/Embedded_system
https://en.wikipedia.org/wiki/C_(programming_language)
https://en.wikipedia.org/wiki/C++
https://en.wikipedia.org/wiki/Assembly_language
https://en.wikipedia.org/wiki/Eclipse_(software)
https://en.wikipedia.org/wiki/Apple_Macintosh
https://en.wikipedia.org/wiki/Microsoft_Windows
https://en.wikipedia.org/wiki/Linux
https://en.wikipedia.org/wiki/Solaris_(operating_system)
https://en.wikipedia.org/wiki/PlayStation
https://en.wikipedia.org/wiki/PlayStation_2
https://en.wikipedia.org/wiki/Nintendo_GameCube
https://en.wikipedia.org/wiki/Nintendo_DS
https://en.wikipedia.org/wiki/Wii
https://en.wikipedia.org/wiki/Sega_Dreamcast
https://en.wikipedia.org/wiki/SuperH
https://en.wikipedia.org/wiki/M%C2%B7CORE
https://en.wikipedia.org/wiki/Palm_OS
https://en.wikipedia.org/wiki/Symbian_OS
https://en.wikipedia.org/wiki/BeOS
https://en.wikipedia.org/wiki/Metrowerks
https://en.wikipedia.org/wiki/Pascal_(programming_language)
https://en.wikipedia.org/wiki/Object_Pascal
https://en.wikipedia.org/wiki/Objective-C
https://en.wikipedia.org/wiki/Java_(programming_language)
https://en.wikipedia.org/wiki/Retrocomputing
https://en.wikipedia.org/wiki/Classilla
https://en.wikipedia.org/wiki/68K
https://en.wikipedia.org/wiki/PowerPC
https://en.wikipedia.org/wiki/Apple_Macintosh
https://en.wikipedia.org/wiki/THINK_C
https://en.wikipedia.org/wiki/Macintosh_Programmer%2527s_Workshop
https://en.wikipedia.org/wiki/Macintosh_Programmer%2527s_Workshop
https://en.wikipedia.org/wiki/Apple_Computer
https://en.wikipedia.org/wiki/Symantec
https://en.wikipedia.org/wiki/Fat_binary
https://en.wikipedia.org/wiki/Motorola
https://en.wikipedia.org/wiki/Embedded_systems
https://en.wikipedia.org/wiki/Xcode
https://en.wikipedia.org/wiki/Intel
https://en.wikipedia.org/wiki/Nokia
https://en.wikipedia.org/wiki/New_York_Times
https://en.wikipedia.org/wiki/Apple_Computer
https://en.wikipedia.org/wiki/CD-ROM
https://en.wikipedia.org/wiki/The_Exorcist_(film)
https://en.wikipedia.org/wiki/Lord_of_the_Flies_(1963_film)
https://en.wikipedia.org/wiki/Gorillas_in_the_Mist
https://en.wikipedia.org/wiki/Mad_Max_2:_The_Road_Warrior

10.4. REFERENCES 17

Metrowerks CodeWarrior Professional Release 1

Apple dropped the whimsical titling in favor of a more
sober “Developer CD series”. Coincidentally the Metrow-
erks founder, Greg Galanos, an Australian, was also in-
spired by the movie and proposed the CodeWarrior name.
Metrowerks subsequently used the name for their new de-
veloper product.
CodeWarrior CD packaging was very much in the tradi-
tion of the Apple developer CDs, featuring slogans such

as “Blood, Sweat, and Code” and “Veni, Vidi, Codi” in
prominent lettering. Competing products such as Syman-
tec’s THINK C were more conventionally marketed.

10.4 References
[1] Carless, Simon (2006-05-09). “CodeWarrior Named Of-

ficial Toolset For Nintendo Wii”. Gamasutra. Retrieved
2015-05-28.

[2] “Classilla: HowToBuild”. Retrieved 2015-05-28.

[3] “FRONTIERS OF MARKETING; Selling Geek Chic”.
New York Times. 1995-02-12. Retrieved 2015-05-28.

[4] Every, David K. (1999). “Apple Developer CD Codenames:
Puns, fun, and satire”. MacKiDo. Retrieved 2015-05-28.

10.5 External links
• Metrowerks Inc. page: Professional 2

• Metrowerks (Freescale) CodeWarrior page

• Freescale Developer Technology Organization Code-
Warrior page

• Freescale Semiconductor, Inc. CodeWarrior page

https://en.wikipedia.org/wiki/THINK_C
http://www.gamasutra.com/php-bin/news_index.php?story=9243
http://www.gamasutra.com/php-bin/news_index.php?story=9243
http://code.google.com/p/classilla/wiki/HowToBuild

http://www.mackido.com/CodeNames/DeveloperCDs.html
http://www.mackido.com/CodeNames/DeveloperCDs.html
https://web.archive.org/web/19971110024156/http://www.metrowerks.com/desktop/pro/
https://web.archive.org/web/20050930204823/http://www.metrowerks.com/mw/default.htm
https://web.archive.org/web/20060115050848/http://www.metrowerks.com/mw/default.htm
https://web.archive.org/web/20060115050848/http://www.metrowerks.com/mw/default.htm
http://www.freescale.com/codewarrior

Chapter 11

Comeau C/C++

Comeau C/C++ is a compiler for C and C++ produced by
Comeau Computing.

11.1 Design

The compiler supports several dialects of both the C and
C++ languages. It comes with its own version of the Stan-
dard C++ library, libcomo, that is based upon the Standard
C++ library from Silicon Graphics, but can also be used
with the Dinkumware Standard C library.[1][2]

The compiler is based upon the Edison Design Group C++
frontend, also utilized in the Intel C++ Compiler. Rather
than produce an executable directly, Comeau C/C++ out-
puts C code and requires a separate C compiler in order
to produce the final program. Unlike the Intel compiler,
Comeau C/C++ can employ several back ends.[1][3]

Comeau C/C++ has been described as the most standards-
conformant C++ compiler.[1] In 2006-2008 it was de-
scribed as the only mainstream C++ compiler to fully sup-
port the export keyword for exported templates.[4][5]

11.2 Standards compliance

Comeau Computing is a founding member of the C++ com-
mittee. Comeau Computing’s CEO, Greg Comeau, pro-
vided one of the early ports of cfront to the PC.[2][6]

11.3 Distribution

A limited-function version of the compiler, which allows
one to compile source code and view any resulting error
messages, but not to produce executable programs, is avail-
able from the company’s web site.[2]

The compiler is available for both Unix and Microsoft Win-
dows platforms. Comeau also offers custom ports to other

platforms, albeit that this is substantially more expensive
than buying existent versions of the compiler.[1]

11.4 Current status

The compiler was updated October 6, 2008 featuring ver-
sion 4.3.10.1 Beta 2.
The Comeau Computing website experienced technical dif-
ficulties starting in 2012 and was completely offline for an
extended period. In 2013, Greg Comeau issued a series
of status updates via the company’s Twitter account. On
July 19, 2013, the Comeau Computing website was brought
back online.
As of December 2016, version 4.3.10.1 remains in Beta.
The company website remains online although marked as
under construction. The online compiler on the site’s “try-
itout” page is marked as non-functional.

11.5 References

[1] D. Ryan Stephens; Christopher Diggins; Jonathan Turkanis;
Jeff Cogswell (2006). C++Cookbook. O’Reilly. p. 8. ISBN
978-0-596-00761-4.

[2] Harvey M. Deitel; Paul J. Deitel (2007). C. Corso completo
di programmazione (in Italian). translator I. Scagnetto. Apo-
geo Editore. p. 537. ISBN 978-88-503-2633-4.

[3] David Abrahams and Aleksey Gurtovoy (2005). C++ Tem-
plate Metaprogramming: Concepts, Tools, and Techniques
from Boost and Beyond. Addison-Wesley. p. 155. ISBN
978-0-321-22725-6.

[4] Mark S. Joshi (2008). C++ Design Patterns and Derivatives
Pricing. Cambridge University Press. p. 263. ISBN 978-0-
521-72162-2.

[5] Marshall Cline (2006). “35: How does the C++ keyword
export help with template linker errors?”. C++ FAQ Lite.

18

https://en.wikipedia.org/wiki/Compiler
https://en.wikipedia.org/wiki/C_(programming_language)
https://en.wikipedia.org/wiki/C++
https://en.wikipedia.org/wiki/Silicon_Graphics
https://en.wikipedia.org/wiki/Dinkumware
https://en.wikipedia.org/wiki/Edison_Design_Group
https://en.wikipedia.org/wiki/Intel_C++_Compiler
https://en.wikipedia.org/wiki/Export_(C++)
https://en.wikipedia.org/wiki/Template_(programming)
https://en.wikipedia.org/wiki/Chief_Executive_Officer
https://en.wikipedia.org/wiki/Cfront
https://en.wikipedia.org/wiki/IBM_PC_compatible
https://en.wikipedia.org/wiki/International_Standard_Book_Number
https://en.wikipedia.org/wiki/Special:BookSources/978-0-596-00761-4
https://en.wikipedia.org/wiki/International_Standard_Book_Number
https://en.wikipedia.org/wiki/Special:BookSources/978-88-503-2633-4
https://en.wikipedia.org/wiki/David_Abrahams_(computer_programmer)
https://en.wikipedia.org/wiki/International_Standard_Book_Number
https://en.wikipedia.org/wiki/Special:BookSources/978-0-321-22725-6
https://en.wikipedia.org/wiki/Mark_S._Joshi
https://en.wikipedia.org/wiki/International_Standard_Book_Number
https://en.wikipedia.org/wiki/Special:BookSources/978-0-521-72162-2
https://en.wikipedia.org/wiki/Special:BookSources/978-0-521-72162-2
http://www.parashift.com/c++-faq-lite/templates.html#faq-35.14
http://www.parashift.com/c++-faq-lite/templates.html#faq-35.14

11.6. EXTERNAL LINKS 19

[6] Stanley B. Lippman (1997). C++ Gems. Cambridge Uni-
versity Press. pp. x. ISBN 978-0-13-570581-0.

11.6 External links
• Official website

https://en.wikipedia.org/wiki/Stanley_B._Lippman
https://en.wikipedia.org/wiki/International_Standard_Book_Number
https://en.wikipedia.org/wiki/Special:BookSources/978-0-13-570581-0
http://www.comeaucomputing.com/

Chapter 12

Deep Blue C

Deep Blue C is a compiler for a subset of the C program-
ming language for the Atari 8-bit family distributed by the
Atari Program Exchange. The compiler is a version of Ron
Cain’s public domain Small-C[1] modified by John Howard
Palevich to run on the Atari computer hardware. Palevich
also wrote the Atari 8-bit game Dandy.[2] The syntax sup-
ported by Deep Blue C is close to that of ANSI C with sig-
nificant limitations.
The source code to the compiler was sold as Deep Blue Se-
crets, also from APX.[1]

12.1 Limitations

The following language constructs are not supported:[3]

• structs

• unions

• multidimensional arrays

• floating point numbers

• sizeof operator

• type casting

• functions return integer only results

Other non-standard properties of Deep Blue C:

• The last part of switch clause must be ended with:
break, continue, or return.

• The maximum length of source code line has to be less
than 80 characters.

• The number of arguments for functions cannot exceed
126.

• $( and $) are used instead of { and }.

12.2 Sample program

The exemplary program writes the “Hello World!” message
on the user screen.[4]

main() $( printf(“Hello World!”); $)

12.3 Performance

The Deep Blue C compiler does not create the native
executable for 6502 processor but intermediate code
called C-code. The C-code is then executed by C-code
interpreter.[3] According to Atari 8-bit FAQ the compiler
creates binary code for Intel 8080 processor and then exe-
cuted by 8080 virtual machine.[5] This is the main cause of
low performance of generated code.

12.4 References
[1] Palevich, John Howard. Deep Blue Secrets Manual. Atari

Program Exchange.

[2] “The Giant List of Classic Game Programmers”.

[3] Deep Blue C documentation at Atari Archives

[4] W. Zientara, “Jezyki programowania Atari cz.2”, SOETO,
Warsaw, 1989

[5] Atari 8-bit FAQ

20

https://en.wikipedia.org/wiki/Compiler
https://en.wikipedia.org/wiki/C_(programming_language)
https://en.wikipedia.org/wiki/C_(programming_language)
https://en.wikipedia.org/wiki/Atari_8-bit_family
https://en.wikipedia.org/wiki/Atari_Program_Exchange
https://en.wikipedia.org/wiki/Small-C
https://en.wikipedia.org/wiki/Dandy_(video_game)
https://en.wikipedia.org/wiki/ANSI_C
https://en.wikipedia.org/wiki/Struct_(C_programming_language)
https://en.wikipedia.org/wiki/Union_(computer_science)
https://en.wikipedia.org/wiki/Array_data_type#Multi-dimensional_arrays
https://en.wikipedia.org/wiki/Floating_point_numbers
https://en.wikipedia.org/wiki/Sizeof
https://en.wikipedia.org/wiki/Type_conversion
https://en.wikipedia.org/wiki/Function_(computer_science)
https://en.wikipedia.org/wiki/Integer_(computer_science)
https://en.wikipedia.org/wiki/Switch_statement
https://en.wikipedia.org/wiki/Native_(computing)
https://en.wikipedia.org/wiki/Executable
https://en.wikipedia.org/wiki/MOS_Technology_6502
https://en.wikipedia.org/wiki/Microprocessor
https://en.wikipedia.org/wiki/Intel_8080
https://en.wikipedia.org/wiki/Virtual_machine
https://archive.org/stream/APX20179_DeepBlueSecrets/APX20179-DeepBlueSecrets#page/n5/mode/2up
http://dadgum.com/giantist
http://www.atariarchives.org/APX/showinfo.php?cat=20166
http://www.faqs.org/faqs/atari-8-bit/faq/

Chapter 13

Digital Mars

Digital Mars is a small American software company
owned by Walter Bright that makes C and C++ compilers,
and associated utilities such as an integrated development
environment (IDE) for Windows and DOS, which Digital
Mars terms an integrated development and debugging en-
vironment (IDDE).[1] They also distribute the compilers for
free on their web site.
Over time, the names of these products have changed. The
C compiler was first named Datalight C compiler, then
Zorland C, then Zortech C, and now Digital Mars C/C++
compiler.[2] The C++ compiler was first named Zortech
C++ (the first commercial C++ compiler for Windows),
then Symantec C++, and now Digital Mars C++ (DMC++).
The company has gained notice in the software develop-
ment community for the programming language D which
they developed in-house.

13.1 References
[1] “Digital Mars Features”.

[2] “Digital Mars License Agreement”.

13.2 External links
• Official website

• Company page on the D programming language

21

https://en.wikipedia.org/wiki/United_States
https://en.wikipedia.org/wiki/Company_(law)
https://en.wikipedia.org/wiki/Walter_Bright
https://en.wikipedia.org/wiki/C_(programming_language)
https://en.wikipedia.org/wiki/C++
https://en.wikipedia.org/wiki/Integrated_development_environment
https://en.wikipedia.org/wiki/Integrated_development_environment
https://en.wikipedia.org/wiki/Microsoft_Windows
https://en.wikipedia.org/wiki/DOS
https://en.wikipedia.org/wiki/Datalight
https://en.wikipedia.org/wiki/Zortech
https://en.wikipedia.org/wiki/Microsoft_Windows
https://en.wikipedia.org/wiki/Symantec
https://en.wikipedia.org/wiki/D_(programming_language)
http://www.digitalmars.com/features.html
http://www.digitalmars.com/download/dmcpp.html
http://www.digitalmars.com/
http://www.digitalmars.com/d/

Chapter 14

DJGCC

DJGCC (DJ’s GNU Compiler Collection [1]) is a C devel-
opment suite for x86 PCs that runs under DOS or compat-
ibles. It is guided by DJ Delorie, who started the project in
1989. It is a port of the popular gcc compiler.

14.1 See also
• DJGPP – C++ version

• EMX – a POSIX implementation for DOS (and OS/2,
too)

• Cygwin – a UNIX compatibility layer with many
ported libraries and applications

• MinGW – a port of the GNU toolchain for Windows,
designed to require minimal runtime support

• GnuWin32

14.2 References
[1] “The history of djgpp”. 091108 delorie.com

14.3 External links
• DJGPP website

• DJ Delorie’s webpage

22

https://en.wikipedia.org/wiki/C_(programming_language)
https://en.wikipedia.org/wiki/X86
https://en.wikipedia.org/wiki/PC_compatible
https://en.wikipedia.org/wiki/DOS
https://en.wikipedia.org/wiki/DJ_Delorie
https://en.wikipedia.org/wiki/Porting
https://en.wikipedia.org/wiki/GNU_Compiler_Collection
https://en.wikipedia.org/wiki/Compiler
https://en.wikipedia.org/wiki/DJGPP
https://en.wikipedia.org/wiki/C++
https://en.wikipedia.org/wiki/EMX_(programming_environment)
https://en.wikipedia.org/wiki/Cygwin
https://en.wikipedia.org/wiki/MinGW
https://en.wikipedia.org/wiki/GnuWin32
http://www.delorie.com/djgpp/history.html
http://www.delorie.com/djgpp/
http://www.delorie.com/users/dj/

Chapter 15

DJGPP

DJ’s GNUProgramming Platform (DJGPP)[2] is a soft-
ware development suite for Intel 80386-level and above,
IBM PC compatibles which supports DOS operating sys-
tems. It is guided by DJ Delorie, who began the project in
1989. It is a port of the GNU Compiler Collection (GCC),
and mostly GNU utilities such as Bash, find, tar, ls, GAWK,
sed, and ld to DOS Protected Mode Interface (DPMI). Sup-
ported languages include C, C++, Objective-C/C++, Ada,
Fortran, and Pascal. DJGPP was described as an “aging”
product in 2004.[3]

15.1 Overview

The compiler generates 32-bit code, which runs natively
in 32-bit protected mode while switching back to 16-bit
DOS calls for basic OS support. However, unlike the Open
Watcom C/C++ compiler, it is not a zero-based flat model
due to preferring NULL pointer protection for better stabil-
ity. It is currently based upon a variant of the COFF format.
It can access up to 4 GB of RAM in pure DOS when using
a suitable DPMI host (e.g., CWSDPMI r7 or HDPMI32).

15.2 Compatibility

DJGPP presents the programmer an interface which is com-
patible with the ANSI C and C99 standards, DOS APIs,
and an older POSIX-like environment. Compiled binaries
are long filename (LFN) aware and can handle such names
under most 32-bit Windows by default, but they cannot use
the Win16 or Win32 APIs that graphical programs on Win-
dows need.[3] Terminate and Stay Resident (TSR) programs
to support LFNs under plain DOS or Windows NT 4 are
available.
While DJGPP runs in 32-bit protected mode, its stub and li-
brary heavily rely on many 16-bit DOS and BIOS calls. Be-
cause the x86-64 versions of Windows lack support for 16-
bit programs,[4][5] there is no NTVDM, and DJGPP appli-
cations cannot be run. Under x86-64 systems these applica-

tions function only through emulation (e.g. DOSBox), x86
virtualization (e.g. VirtualBox), or similar (e.g. Linux’s
DOSEMU). This problem arises because in long mode x86-
64 processors do not support the virtual 8086 mode used to
run 16-bit code in IA-32 processors. Newer x86 CPUs with
VT-x do support paged real mode and unrestricted guest
mode execution.

15.3 See also

• Cygwin

• EMX (programming environment)

• GnuWin32

• MinGW

• Open Watcom C/C++ compiler

15.4 References
[1] Announce: DJGPP V2.05 Released, comp.os.msdos.djgpp,

3 November 2015

[2] Eli Zaretskii (Jul 1999). “The DJGPP Project”. Retrieved
20 Jul 2009.

[3] Wall, Kurt; Von Hagen, William (2004). The Definitive
Guide to GCC. Apress. pp. 47–48.

[4] “Guide: What is DJGPP?”. Retrieved November 22, 2015.
The target hardware platform for DJGPP programs is a PC
platform … running DOS … or a DOS-compatible operating
system DJGPP programs run under Windows’ “dos prompt”
boxes.

[5] Microsoft (Oct 2007). “List of limitations in 64-Bit Win-
dows”. Retrieved 18 May 2010. 16-bit MS-DOS and Mi-
crosoft Windows 3.x utilities will not start. If you attempt
to start such a program, you receive a “Program.exe is not a
valid Win32 application” error message.

23

https://en.wikipedia.org/wiki/Intel_80386
https://en.wikipedia.org/wiki/PC_compatible
https://en.wikipedia.org/wiki/DOS
https://en.wikipedia.org/wiki/Porting
https://en.wikipedia.org/wiki/GNU_Compiler_Collection
https://en.wikipedia.org/wiki/GNU
https://en.wikipedia.org/wiki/Bash_(Unix_shell)
https://en.wikipedia.org/wiki/Find
https://en.wikipedia.org/wiki/Tar_(file_format)
https://en.wikipedia.org/wiki/Ls
https://en.wikipedia.org/wiki/AWK
https://en.wikipedia.org/wiki/Sed
https://en.wikipedia.org/wiki/Ld_(Unix)
https://en.wikipedia.org/wiki/DOS_Protected_Mode_Interface
https://en.wikipedia.org/wiki/C_(programming_language)
https://en.wikipedia.org/wiki/C++
https://en.wikipedia.org/wiki/Objective-C
https://en.wikipedia.org/wiki/Ada_(programming_language)
https://en.wikipedia.org/wiki/Fortran
https://en.wikipedia.org/wiki/Pascal_(programming_language)
https://en.wikipedia.org/wiki/Protected_mode
https://en.wikipedia.org/wiki/Watcom_C/C++_compiler
https://en.wikipedia.org/wiki/COFF
https://en.wikipedia.org/wiki/CWSDPMI
https://en.wikipedia.org/wiki/ANSI_C
https://en.wikipedia.org/wiki/C99
https://en.wikipedia.org/wiki/POSIX
https://en.wikipedia.org/wiki/Long_filename
https://en.wikipedia.org/wiki/Win16
https://en.wikipedia.org/wiki/Terminate_and_Stay_Resident
https://en.wikipedia.org/wiki/DOS
https://en.wikipedia.org/wiki/Windows_NT_4
https://en.wikipedia.org/wiki/Protected_mode
https://en.wikipedia.org/wiki/X86-64
https://en.wikipedia.org/wiki/Microsoft_Windows
https://en.wikipedia.org/wiki/NTVDM
https://en.wikipedia.org/wiki/DOSBox
https://en.wikipedia.org/wiki/X86_virtualization
https://en.wikipedia.org/wiki/X86_virtualization
https://en.wikipedia.org/wiki/VirtualBox
https://en.wikipedia.org/wiki/DOSEMU
https://en.wikipedia.org/wiki/Long_mode
https://en.wikipedia.org/wiki/Virtual_8086_mode
https://en.wikipedia.org/wiki/VT-x
https://en.wikipedia.org/wiki/Cygwin
https://en.wikipedia.org/wiki/EMX_(programming_environment)
https://en.wikipedia.org/wiki/GnuWin32
https://en.wikipedia.org/wiki/MinGW
https://en.wikipedia.org/wiki/Watcom_C/C++_compiler
https://groups.google.com/forum/#!topic/comp.os.msdos.djgpp/srgUBVOMGmI
http://www.delorie.com/djgpp/doc/eli-m17n99.html#History
https://books.google.com/books?id=VV1gB-9S9BIC&pg=PA51
https://books.google.com/books?id=VV1gB-9S9BIC&pg=PA51
http://www.delorie.com/djgpp/doc/ug/intro/what-is-djgpp.html
http://support.microsoft.com/kb/282423
http://support.microsoft.com/kb/282423

24 CHAPTER 15. DJGPP

15.5 External links
• Official website

http://www.delorie.com/djgpp

Chapter 16

FpgaC

FpgaC is a compiler for a subset of the C program-
ming language, which produces digital circuits that will
execute the compiled programs. The circuits may use
FPGAs or CPLDs as the target processor for reconfigurable
computing, or even ASICs for dedicated applications. Fp-
gaC’s goal is to be an efficient High Level Language (HLL)
for reconfigurable computing, rather than a Hardware De-
scription Language (HDL) for building efficient custom
hardware circuits.

16.1 History

The historical roots of FpgaC are in the Transmogrifier C
3.1 (TMCC) HDL, a 1996 BSD licensed Open source of-
fering from University of Toronto. TMCC is one of the
first FPGA C compilers, with work starting in 1994 and
presented at IEEE’s FCCM95. This predated the evolution
from the Handel language to Handel-C work done shortly
afterward at Oxford University Computing Laboratory.
TMCC was renamed FpgaC for the initial SourceForge
project release, with syntax modifications to start the evolu-
tion to ANSI C. Later development has removed all explicit
HDL syntax from the language, and increased the subset
of C supported. By capitalizing on ANSI C C99 exten-
sions, the same functionality is now available by inference
rather than non-standard language extensions. This shift
away from non-standard HDL extensions was influenced in
part by Streams-C from Los Alamos National Laboratory
(now available commercially as Impulse C).
In the years that have followed, compiling ANSI C for ex-
ecution as FPGA circuits has become a mainstream tech-
nology. Commercial FPGA C compilers are available from
multiple vendors, and ANSI C based System Level Tools
have gone mainstream for system description and simula-
tion languages. FPGA based Reconfigurable Computing
offerings from industry leaders like Altera, Silicon Graph-
ics, Seymour Cray’s SRC Computers, and Xilinx have capi-
talized on two decades of government and university recon-

figurable computing research.

16.2 External links
• FpgaC on SourceForge.net

• Transmogrifier C Homepage

• Oxford Handel-C

• FPGA System Level Tools

25

https://en.wikipedia.org/wiki/Compiler
https://en.wikipedia.org/wiki/C_programming_language
https://en.wikipedia.org/wiki/C_programming_language
https://en.wikipedia.org/wiki/Digital_circuit
https://en.wikipedia.org/wiki/Field-programmable_gate_array
https://en.wikipedia.org/wiki/CPLD
https://en.wikipedia.org/wiki/Central_processing_unit
https://en.wikipedia.org/wiki/Computing
https://en.wikipedia.org/wiki/Application-specific_integrated_circuit
https://en.wikipedia.org/wiki/High-level_programming_language
https://en.wikipedia.org/wiki/Reconfigurable_computing
https://en.wikipedia.org/wiki/Hardware_Description_Language
https://en.wikipedia.org/wiki/Hardware_Description_Language
https://en.wikipedia.org/wiki/Computer_hardware
https://en.wikipedia.org/wiki/BSD
https://en.wikipedia.org/wiki/Open_source
https://en.wikipedia.org/wiki/IEEE
https://en.wikipedia.org/wiki/Handel-C
https://en.wikipedia.org/wiki/Oxford_University_Computing_Laboratory
https://en.wikipedia.org/wiki/SourceForge
https://en.wikipedia.org/wiki/ANSI_C
https://en.wikipedia.org/wiki/C99
https://en.wikipedia.org/wiki/Inference
https://en.wikipedia.org/wiki/Los_Alamos_National_Laboratory
https://en.wikipedia.org/wiki/Impulse_C
https://en.wikipedia.org/wiki/Altera
https://en.wikipedia.org/wiki/Silicon_Graphics
https://en.wikipedia.org/wiki/Silicon_Graphics
https://en.wikipedia.org/wiki/Seymour_Cray
https://en.wikipedia.org/wiki/SRC_Computers
https://en.wikipedia.org/wiki/Xilinx
https://sourceforge.net/projects/fpgac/
https://en.wikipedia.org/wiki/SourceForge
http://www.eecg.toronto.edu/RESEARCH/tmcc/
http://citeseer.ist.psu.edu/rd/49527001%252C78794%252C1%252C0.25%252CDownload/http://citeseer.ist.psu.edu/cache/papers/cs/3848/ftp:zSzzSzftp.comlab.ox.ac.ukzSzpubzSzDocumentszSztechpaperszSzIan.PagezSzumist.pdf/page96hardwaresoftware.pdf
http://www.xilinx.com/publications/xcellonline/xcell_58/xc_pdf/p006-008_58-execview.pdf

Chapter 17

GNU Compiler Collection

“Cc1” redirects here. For other uses, see CC1 (disam-
biguation).

The GNU Compiler Collection (GCC) is a compiler
system produced by the GNU Project supporting various
programming languages. GCC is a key component of the
GNU toolchain and the standard compiler for most Unix-
like Operating Systems. The Free Software Foundation
(FSF) distributes GCC under the GNU General Public Li-
cense (GNU GPL). GCC has played an important role in
the growth of free software, as both a tool and an example.
Originally named the GNU C Compiler, when it only
handled the C programming language, GCC 1.0 was re-
leased in 1987.[1] It was extended to compile C++ in De-
cember of that year. Front ends were later developed for
Objective-C, Objective-C++, Fortran, Java, Ada, and Go
among others.[5]

Version 4.5 of the OpenMP specification is now supported
in the C and C++ compilers[6] and a “much improved”
implementation of the OpenACC 2.0a specification[7] is
also supported. By default, the current version supports
gnu++14, a superset of C++14 and gnu11, a superset of
C11, with strict standard support also available. It also pro-
vides experimental support for C++17 and later.
GCC has been ported to a wide variety of processor archi-
tectures, and is widely deployed as a tool in the development
of both free and proprietary software. GCC is also avail-
able for most embedded systems, including ARM-based;
AMCC, and Freescale Power Architecture-based chips.[8]
The compiler can target a wide variety of platforms.
As well as being the official compiler of the GNU operating
system, GCC has been adopted as the standard compiler by
many other modern Unix-like computer operating systems,
including Linux and the BSD family, although FreeBSD
and OS X have moved to the LLVM system.[9] Versions are
also available for Microsoft Windows and other operating
systems; GCC can compile code for Android and iOS.

17.1 History

In an effort to bootstrap the GNU operating system,
Richard Stallman asked Andrew S. Tanenbaum, the author
of the Amsterdam Compiler Kit (also known as the Free
University Compiler Kit) if he could use that software for
GNU. When Tanenbaum told him that while the Free Uni-
versity was free, the compiler was not, Stallman decided to
write his own.[10] Stallman’s initial plan[11] was to rewrite
an existing compiler from Lawrence Livermore Labora-
tory from Pastel to C with some help from Len Tower and
others.[12] Stallman wrote a new C front end for the Liver-
more compiler, but then realized that it required megabytes
of stack space, an impossibility on a 68000 Unix system
with only 64 KB, and concluded he would have to write a
new compiler from scratch.[11] None of the Pastel compiler
code ended up in GCC, though Stallman did use the C front
end he had written.[11]

GCC was first released March 22, 1987, available by FTP
from MIT.[13] Stallman was listed as the author but cited
others for their contributions, including Jack Davidson and
Christopher Fraser for the idea of using RTL as an in-
termediate language, Paul Rubin for writing most of the
preprocessor and Leonard Tower for “parts of the parser,
RTL generator, RTL definitions, and of the Vax machine
description.”[14] Described as the “first free software hit” by
Salus, the GNU compiler arrived just at the time when Sun
Microsystems was unbundling its development tools from
its operating system, selling them separately at a higher
combined price than the previous bundle, which led many
of Sun’s users to buy or download GCC instead of the ven-
dor’s tools.[15] By 1990, GCC supported thirteen computer
architectures, was outperforming several vendor compilers,
was shipped by Data General and NeXT with their worksta-
tions and was used by Lotus Development Corporation.[16]

As GCC was licensed under the GPL, programmers want-
ing to work in other directions—particularly those writing
interfaces for languages other than C—were free to develop
their own fork of the compiler, provided they meet the

26

https://en.wikipedia.org/wiki/CC1_(disambiguation)
https://en.wikipedia.org/wiki/CC1_(disambiguation)
https://en.wikipedia.org/wiki/Compiler
https://en.wikipedia.org/wiki/GNU_Project
https://en.wikipedia.org/wiki/Programming_language
https://en.wikipedia.org/wiki/GNU_toolchain
https://en.wikipedia.org/wiki/Free_Software_Foundation
https://en.wikipedia.org/wiki/GNU_General_Public_License
https://en.wikipedia.org/wiki/GNU_General_Public_License
https://en.wikipedia.org/wiki/Free_software
https://en.wikipedia.org/wiki/C_(programming_language)
https://en.wikipedia.org/wiki/C++
https://en.wikipedia.org/wiki/Compiler_frontend
https://en.wikipedia.org/wiki/Objective-C
https://en.wikipedia.org/wiki/Objective-C++
https://en.wikipedia.org/wiki/Fortran
https://en.wikipedia.org/wiki/Java_(programming_language)
https://en.wikipedia.org/wiki/Ada_(programming_language)
https://en.wikipedia.org/wiki/Go_(programming_language)
https://en.wikipedia.org/wiki/OpenMP
https://en.wikipedia.org/wiki/OpenACC
https://en.wikipedia.org/wiki/C++14
https://en.wikipedia.org/wiki/C11_(C_standard_revision)
https://en.wikipedia.org/wiki/C++17
https://en.wikipedia.org/wiki/Porting
https://en.wikipedia.org/wiki/Processor_architecture
https://en.wikipedia.org/wiki/Processor_architecture
https://en.wikipedia.org/wiki/Proprietary_software
https://en.wikipedia.org/wiki/Embedded_system
https://en.wikipedia.org/wiki/ARM_architecture
https://en.wikipedia.org/wiki/Applied_Micro_Circuits_Corporation
https://en.wikipedia.org/wiki/Freescale
https://en.wikipedia.org/wiki/Power_Architecture
https://en.wikipedia.org/wiki/GNU
https://en.wikipedia.org/wiki/Unix-like
https://en.wikipedia.org/wiki/Operating_system
https://en.wikipedia.org/wiki/Linux
https://en.wikipedia.org/wiki/Berkeley_Software_Distribution
https://en.wikipedia.org/wiki/FreeBSD
https://en.wikipedia.org/wiki/OS_X
https://en.wikipedia.org/wiki/LLVM
https://en.wikipedia.org/wiki/Microsoft_Windows
https://en.wikipedia.org/wiki/Android_(operating_system)
https://en.wikipedia.org/wiki/IOS
https://en.wikipedia.org/wiki/GNU
https://en.wikipedia.org/wiki/Richard_Stallman
https://en.wikipedia.org/wiki/Andrew_S._Tanenbaum
https://en.wikipedia.org/wiki/Amsterdam_Compiler_Kit
https://en.wikipedia.org/wiki/VU_University_Amsterdam
https://en.wikipedia.org/wiki/VU_University_Amsterdam
https://en.wikipedia.org/wiki/Lawrence_Livermore_Laboratory
https://en.wikipedia.org/wiki/Lawrence_Livermore_Laboratory
https://en.wikipedia.org/wiki/Pastel_(programming_language)
https://en.wikipedia.org/wiki/Leonard_H._Tower,_Jr.
https://en.wikipedia.org/wiki/File_Transfer_Protocol
https://en.wikipedia.org/wiki/Massachusetts_Institute_of_Technology
https://en.wikipedia.org/wiki/Register_transfer_language
https://en.wikipedia.org/wiki/Peter_H._Salus
https://en.wikipedia.org/wiki/Sun_Microsystems
https://en.wikipedia.org/wiki/Sun_Microsystems
https://en.wikipedia.org/wiki/SunOS
https://en.wikipedia.org/wiki/Data_General
https://en.wikipedia.org/wiki/NeXT
https://en.wikipedia.org/wiki/Lotus_Development_Corporation
https://en.wikipedia.org/wiki/Fork_(software_development)

17.2. DESIGN 27

GPL’s terms, including its requirements to distribute source
code. Multiple forks proved inefficient and unwieldy, how-
ever, and the difficulty in getting work accepted by the of-
ficial GCC project was greatly frustrating for many.[17] The
FSF kept such close control on what was added to the offi-
cial version of GCC 2.x that GCC was used as one example
of the “cathedral” development model in Eric S. Raymond’s
essay The Cathedral and the Bazaar.
In 1997, a group of developers formed Experimen-
tal/Enhanced GNU Compiler System (EGCS) to merge
several experimental forks into a single project.[17][18] The
basis of the merger was a GCC development snapshot
taken between the 2.7 and 2.81 releases. Projects merged
included g77 (Fortran), PGCC (P5 Pentium-optimized
GCC), many C++ improvements, and many new archi-
tectures and operating system variants.[19] EGCS develop-
ment proved considerably more vigorous than GCC devel-
opment, so much so that the FSF officially halted devel-
opment on their GCC 2.x compiler, blessed EGCS as the
official version of GCC and appointed the EGCS project as
the GCC maintainers in April 1999. With the release of
GCC 2.95 in July 1999 the two projects were once again
united.
GCC has since been maintained by a varied group of
programmers from around the world under the direction
of a steering committee.[20] It has been ported to more
kinds of processors and operating systems than any other
compiler.[21]

GCC has been ported to a wide variety of processor archi-
tectures, and is widely deployed as a tool in the develop-
ment of both free and proprietary software. GCC is also
available for most embedded systems, including Symbian
(called gcce),[22] ARM-based; AMCC, and Freescale Power
Architecture-based chips.[8] The compiler can target a wide
variety of platforms, including video game consoles such
as the PlayStation 2,[23] Cell SPE of PlayStation 3[24] and
Dreamcast.[25]

17.2 Design

GCC’s external interface follows Unix conventions. Users
invoke a language-specific driver program (gcc for C, g++
for C++, etc.), which interprets command arguments, calls
the actual compiler, runs the assembler on the output,
and then optionally runs the linker to produce a complete
executable binary.
Each of the language compilers is a separate program that
reads source code and outputs machine code. All have a
common internal structure. A per-language front end parses
the source code in that language and produces an abstract
syntax tree (“tree” for short).

in Linux kernel 3.7

☐☐

Linux
process

scheduler

Linux
memory
manager

IPC
manager

I/O
interface

Network
interface

Virtual
file

system Linux
process

scheduler

Linux
memory
manager

IPC
manager

I/O
interface

Network
interface

Virtual
file

system

✘✔

API stability is guaranteed, source code
is portable!

API stability is not guaranteed,
source code portability is not a given

compatible ABI can be guaranteed,
binaries are portable

no stable ABI over Linux kernel releases,
binaries are not portable

☐ ☐✔ ✘

API

ABI

Linux kernel-to-userspace Linux kernel-internal

compiled against
LSB 5.0 for x86-64

MotionBuilder
Siemens NX
BricsCAD
CATIA5
Maya
et al.

compiled against
LSB 5.0 for x86-64

Linux OS
“Bravo”

Linux OS
“Alpha”

Linux OS
“Charlie”

compiled for
Linux kernel 3.0

in Linux kernel 3.0

in Linux kernel 3.14

DRM

binary
device
driver

DRM

DRM

To obtain a stable ABI, like e.g. the Linux Standard Base aims to
procure, the Compiler version is important.

These are, if necessary, converted to the middle end’s in-
put representation, called GENERIC form; the middle end
then gradually transforms the program towards its final
form. Compiler optimizations and static code analysis tech-
niques (such as FORTIFY_SOURCE,[26] a compiler direc-
tive that attempts to discover some buffer overflows) are
applied to the code. These work on multiple representa-
tions, mostly the architecture-independent GIMPLE repre-
sentation and the architecture-dependent RTL representa-
tion. Finally, machine code is produced using architecture-
specific pattern matching originally based on an algorithm
of Jack Davidson and Chris Fraser.
GCC was written primarily in C except for parts of the
Ada front end. The distribution includes the standard li-
braries for Ada, C++, and Java whose code is mostly written
in those languages.[27] On some platforms, the distribution
also includes a low-level runtime library, libgcc, written in
a combination of machine-independent C and processor-
specific machine code, designed primarily to handle arith-
metic operations that the target processor cannot perform
directly.[28]

In May 2010, the GCC steering committee decided to allow
use of a C++ compiler to compile GCC.[3] The compiler
was intended to be written in C plus a subset of features
from C++. In particular, this was decided so that GCC’s
developers could use the destructors and generics features
of C++.[29]

In August 2012, the GCC steering committee announced
that GCC now uses C++ as its implementation language.[30]
This means that to build GCC from sources, a C++ com-
piler is required that understands ISO/IEC C++03 standard.

https://en.wikipedia.org/wiki/Source_code
https://en.wikipedia.org/wiki/Source_code
https://en.wikipedia.org/wiki/Eric_S._Raymond
https://en.wikipedia.org/wiki/The_Cathedral_and_the_Bazaar
https://en.wikipedia.org/wiki/P5_(microarchitecture)
https://en.wikipedia.org/wiki/Pentium
https://en.wikipedia.org/wiki/Operating_system
https://en.wikipedia.org/wiki/Central_processing_unit
https://en.wikipedia.org/wiki/Porting
https://en.wikipedia.org/wiki/Processor_architecture
https://en.wikipedia.org/wiki/Processor_architecture
https://en.wikipedia.org/wiki/Proprietary_software
https://en.wikipedia.org/wiki/Embedded_system
https://en.wikipedia.org/wiki/Symbian
https://en.wikipedia.org/wiki/ARM_architecture
https://en.wikipedia.org/wiki/Applied_Micro_Circuits_Corporation
https://en.wikipedia.org/wiki/Freescale
https://en.wikipedia.org/wiki/Power_Architecture
https://en.wikipedia.org/wiki/Power_Architecture
https://en.wikipedia.org/wiki/Video_game_console
https://en.wikipedia.org/wiki/PlayStation_2
https://en.wikipedia.org/wiki/Dreamcast
https://en.wikipedia.org/wiki/Unix
https://en.wikipedia.org/wiki/Command-line_argument
https://en.wikipedia.org/wiki/Assembly_language_assembler
https://en.wikipedia.org/wiki/Linker_(computing)
https://en.wikipedia.org/wiki/Executable
https://en.wikipedia.org/wiki/Machine_code
https://en.wikipedia.org/wiki/Parsing
https://en.wikipedia.org/wiki/Abstract_syntax_tree
https://en.wikipedia.org/wiki/Abstract_syntax_tree
https://en.wikipedia.org/wiki/Application_binary_interface
https://en.wikipedia.org/wiki/Linux_Standard_Base
https://en.wikipedia.org/wiki/Compiler_optimization
https://en.wikipedia.org/wiki/Static_code_analysis
https://en.wikipedia.org/wiki/Buffer_overflow
https://en.wikipedia.org/wiki/Register_transfer_language
https://en.wikipedia.org/wiki/Machine_code
https://en.wikipedia.org/wiki/Pattern_matching
https://en.wikipedia.org/wiki/C_(programming_language)
https://en.wikipedia.org/wiki/Ada_(programming_language)
https://en.wikipedia.org/wiki/C++
https://en.wikipedia.org/wiki/Java_(programming_language)
https://en.wikipedia.org/wiki/Machine_code
https://en.wikipedia.org/wiki/C++
https://en.wikipedia.org/wiki/Destructor_(computer_science)
https://en.wikipedia.org/wiki/Generic_programming
https://en.wikipedia.org/wiki/C++03

28 CHAPTER 17. GNU COMPILER COLLECTION

17.2.1 Front ends

Each front end uses a parser to produce the abstract syntax
tree of a given source file. Due to the syntax tree abstrac-
tion, source files of any of the different supported languages
can be processed by the same back end. GCC started
out using LALR parsers generated with Bison, but gradu-
ally switched to hand-written recursive-descent parsers; for
C++ in 2004,[31] and for C and Objective-C in 2006.[32]
Currently all front ends use hand-written recursive-descent
parsers.
Until recently, the tree representation of the program was
not fully independent of the processor being targeted.
The meaning of a tree was somewhat different for differ-
ent language front ends, and front ends could provide their
own tree codes. This was simplified with the introduction
of GENERIC and GIMPLE, two new forms of language-
independent trees that were introduced with the advent of
GCC 4.0. GENERIC is more complex, based on the GCC
3.x Java front end’s intermediate representation. GIMPLE
is a simplified GENERIC, in which various constructs are
lowered to multiple GIMPLE instructions. The C, C++ and
Java front ends produce GENERIC directly in the front end.
Other front ends instead have different intermediate repre-
sentations after parsing and convert these to GENERIC.
In either case, the so-called “gimplifier” then converts this
more complex form into the simpler SSA-based GIMPLE
form that is the common language for a large number
of powerful language- and architecture-independent global
(function scope) optimizations.

17.2.2 GENERIC and GIMPLE

GENERIC is an intermediate representation language used
as a “middle end” while compiling source code into
executable binaries. A subset, called GIMPLE, is targeted
by all the front ends of GCC.
The middle stage of GCC does all of the code analysis
and optimization, working independently of both the com-
piled language and the target architecture, starting from the
GENERIC[33] representation and expanding it to register
transfer language (RTL). The GENERIC representation
contains only the subset of the imperative programming
constructs optimized by the middle end.
In transforming the source code to GIMPLE,[34] com-
plex expressions are split into a three-address code us-
ing temporary variables. This representation was inspired
by the SIMPLE representation proposed in the McCAT
compiler[35] by Laurie J. Hendren[36] for simplifying the
analysis and optimization of imperative programs.

17.2.3 Optimization

Optimization can occur during any phase of compilation;
however, the bulk of optimizations are performed after the
syntax and semantic analysis of the front end and before
the code generation of the back end; thus a common, even
though somewhat contradictory, name for this part of the
compiler is the “middle end.”
The exact set of GCC optimizations varies from release to
release as it develops, but includes the standard algorithms,
such as loop optimization, jump threading, common subex-
pression elimination, instruction scheduling, and so forth.
The RTL optimizations are of less importance with the
addition of global SSA-based optimizations on GIMPLE
trees,[37] as RTL optimizations have a much more limited
scope, and have less high-level information.
Some of these optimizations performed at this level in-
clude dead code elimination, partial redundancy elimina-
tion, global value numbering, sparse conditional constant
propagation, and scalar replacement of aggregates. Array
dependence based optimizations such as automatic vector-
ization and automatic parallelization are also performed.
Profile-guided optimization is also possible.[38]

17.2.4 Back end

The behavior of GCC’s back end is partly specified by
preprocessor macros and functions specific to a target ar-
chitecture, for instance to define its endianness, word size,
and calling conventions. The front part of the back end uses
these to help decide RTL generation, so although GCC’s
RTL is nominally processor-independent, the initial se-
quence of abstract instructions is already adapted to the
target. At any moment, the actual RTL instructions form-
ing the program representation have to comply with the
machine description of the target architecture.
The machine description file contains RTL patterns, along
with operand constraints, and code snippets to output the fi-
nal assembly. The constraints indicate that a particular RTL
pattern might only apply (for example) to certain hardware
registers, or (for example) allow immediate operand offsets
of only a limited size (e.g. 12, 16, 24, … bit offsets, etc.).
During RTL generation, the constraints for the given target
architecture are checked. In order to issue a given snippet
of RTL, it must match one (or more) of the RTL patterns in
the machine description file, and satisfy the constraints for
that pattern; otherwise, it would be impossible to convert
the final RTL into machine code.
Towards the end of compilation, valid RTL is reduced to
a strict form in which each instruction refers to real ma-
chine registers and a pattern from the target’s machine de-
scription file. Forming strict RTL is a complicated task;

https://en.wikipedia.org/wiki/Front_end_(compiler)
https://en.wikipedia.org/wiki/Abstract_syntax_tree
https://en.wikipedia.org/wiki/Abstract_syntax_tree
https://en.wikipedia.org/wiki/Source_file
https://en.wikipedia.org/wiki/Back_end_(Compiler)
https://en.wikipedia.org/wiki/LALR_parser
https://en.wikipedia.org/wiki/GNU_Bison
https://en.wikipedia.org/wiki/Recursive_descent_parser
https://en.wikipedia.org/wiki/Lowering_(computer_science)
https://en.wikipedia.org/wiki/C_(Programming_Language)
https://en.wikipedia.org/wiki/C++
https://en.wikipedia.org/wiki/Java_(programming_language)
https://en.wikipedia.org/wiki/Static_single_assignment_form
https://en.wikipedia.org/wiki/Intermediate_representation
https://en.wikipedia.org/wiki/Executable_binaries
https://en.wikipedia.org/wiki/Optimization_(compiler)
https://en.wikipedia.org/wiki/Register_transfer_language
https://en.wikipedia.org/wiki/Register_transfer_language
https://en.wikipedia.org/wiki/Computer_programming
https://en.wikipedia.org/wiki/Expression_(programming)
https://en.wikipedia.org/wiki/Three-address_code
https://en.wikipedia.org/wiki/Temporary_variable
https://en.wikipedia.org/wiki/Optimization_(computer_science)
https://en.wikipedia.org/wiki/Imperative_programming
https://en.wikipedia.org/wiki/Semantic_analysis_(compiler)
https://en.wikipedia.org/wiki/Code_generation_(compiler)
https://en.wikipedia.org/wiki/Loop_optimization
https://en.wikipedia.org/wiki/Jump_threading
https://en.wikipedia.org/wiki/Common_subexpression_elimination
https://en.wikipedia.org/wiki/Common_subexpression_elimination
https://en.wikipedia.org/wiki/Instruction_scheduling
https://en.wikipedia.org/wiki/Register_transfer_language
https://en.wikipedia.org/wiki/GIMPLE
https://en.wikipedia.org/wiki/Dead_code_elimination
https://en.wikipedia.org/wiki/Partial_redundancy_elimination
https://en.wikipedia.org/wiki/Partial_redundancy_elimination
https://en.wikipedia.org/wiki/Global_value_numbering
https://en.wikipedia.org/wiki/Sparse_conditional_constant_propagation
https://en.wikipedia.org/wiki/Sparse_conditional_constant_propagation
https://en.wikipedia.org/wiki/Scalar_replacement_of_aggregates
https://en.wikipedia.org/wiki/Automatic_vectorization
https://en.wikipedia.org/wiki/Automatic_vectorization
https://en.wikipedia.org/wiki/Automatic_parallelization
https://en.wikipedia.org/wiki/Profile-guided_optimization
https://en.wikipedia.org/wiki/C_preprocessor
https://en.wikipedia.org/wiki/Endianness
https://en.wikipedia.org/wiki/Word_size
https://en.wikipedia.org/wiki/Calling_convention
https://en.wikipedia.org/wiki/Machine_description

17.3. LANGUAGES 29

an important step is register allocation, where real hard-
ware registers are chosen to replace the initially assigned
pseudo-registers. This is followed by a “reloading” phase;
any pseudo-registers that were not assigned a real hardware
register are ‘spilled’ to the stack, and RTL to perform this
spilling is generated. Likewise, offsets that are too large to
fit into an actual instruction must be broken up and replaced
by RTL sequences that will obey the offset constraints.
In the final phase, the machine code is built by calling a
small snippet of code, associated with each pattern, to gen-
erate the real instructions from the target’s instruction set,
using the final registers, offsets, and addresses chosen dur-
ing the reload phase. The assembly-generation snippet may
be just a string, in which case a simple string substitution
of the registers, offsets, and/or addresses into the string is
performed. The assembly-generation snippet may also be
a short block of C code, performing some additional work,
but ultimately returning a string containing the valid assem-
bly code.

17.2.5 Features

Some features of GCC include:

• Link-time optimization optimizes across object file
boundaries to directly improve the linked binary.
Link-time optimization relies on an intermediate file
containing the serialization of some Gimple represen-
tation included in the object file. The file is gener-
ated alongside the object file during source compila-
tion. Each source compilation generates a separate
object file and link-time helper file. When the object
files are linked, the compiler is executed again and uses
the helper files to optimize code across the separately
compiled object files.

• Plugins can extend the GCC compiler directly.[39] Plu-
gins allow a stock compiler to be tailored to specific
needs by external code loaded as plugins. For exam-
ple, plugins can add, replace, or even remove middle-
end passes operating on Gimple representations.[40]
Several GCC plugins have already been published,
notably the GCC Python Plugin, which links against
libpython, and allows one to invoke arbitrary Python
scripts from inside the compiler. The aim is to allow
GCC plugins to be written in Python. The MELT plu-
gin provides a high-level Lisp-like language to extend
GCC.[41]

• “C++ Transactional Memory when compiling with –
fgnu-tm.”[6][42]

17.3 Languages

The standard compiler releases since 4.6 include front
ends for C (gcc), C++ (g++), Objective-C, Objective-
C++, Fortran (gfortran), Java (gcj), Ada (GNAT), and
Go (gccgo).[43] A popular parallel language extension,
OpenMP, is also supported. Version 5.0 added support for
Cilk Plus, and since version 5.1, there is preliminary sup-
port for OpenACC.[44]

The Fortran front end was g77 before version 4.0, which
only supports FORTRAN 77. In newer versions, g77 is
dropped in favor of the new GNU Fortran front end (retain-
ing most of g77’s language extensions) that supports Fortran
95 and large parts of Fortran 2003 and Fortran 2008 as
well. A front-end for CHILL was dropped due to a lack
of maintenance.[45]

Third-party front ends exist for Pascal (gpc), Modula-2,
Modula-3, PL/I, D (gdc),[46] and VHDL (ghdl).
A few experimental branches exist to support additional
languages, such as the GCC UPC compiler[47] for Unified
Parallel C.

17.4 Architectures

GCC target processor families as of version 4.3 include:

• Alpha

• ARM

• AVR

• Blackfin

• Epiphany (GCC 4.8)

• H8/300

• HC12

• IA-32 (x86)

• IA-64 (Intel Itanium)

• MIPS

• Motorola 68000

• PA-RISC

• PDP-11

• PowerPC

• R8C / M16C / M32C

https://en.wikipedia.org/wiki/Register_allocation
https://en.wikipedia.org/wiki/Instruction_set
https://en.wikipedia.org/wiki/Link-time_optimization
https://en.wikipedia.org/wiki/Plug-in_(computing)
https://en.wikipedia.org/wiki/Lisp_(programming_language)
https://en.wikipedia.org/wiki/Software_transactional_memory
https://en.wikipedia.org/wiki/C_(programming_language)
https://en.wikipedia.org/wiki/C++
https://en.wikipedia.org/wiki/Objective-C
https://en.wikipedia.org/wiki/Objective-C++
https://en.wikipedia.org/wiki/Objective-C++
https://en.wikipedia.org/wiki/Fortran
https://en.wikipedia.org/wiki/Gfortran
https://en.wikipedia.org/wiki/Java_(programming_language)
https://en.wikipedia.org/wiki/Gcj
https://en.wikipedia.org/wiki/Ada_(programming_language)
https://en.wikipedia.org/wiki/GNAT
https://en.wikipedia.org/wiki/Go_(programming_language)
https://en.wikipedia.org/wiki/OpenMP
https://en.wikipedia.org/wiki/Cilk_Plus
https://en.wikipedia.org/wiki/OpenACC
https://en.wikipedia.org/wiki/FORTRAN_77
https://en.wikipedia.org/wiki/GNU_Fortran
https://en.wikipedia.org/wiki/Fortran_95
https://en.wikipedia.org/wiki/Fortran_95
https://en.wikipedia.org/wiki/Fortran_2003
https://en.wikipedia.org/wiki/Fortran_2008
https://en.wikipedia.org/wiki/CHILL
https://en.wikipedia.org/wiki/Pascal_(programming_language)
https://en.wikipedia.org/wiki/GNU_Pascal
https://en.wikipedia.org/wiki/Modula-2
https://en.wikipedia.org/wiki/Modula-3
https://en.wikipedia.org/wiki/PL/I
https://en.wikipedia.org/wiki/D_(programming_language)
https://en.wikipedia.org/wiki/VHDL
https://en.wikipedia.org/wiki/Unified_Parallel_C
https://en.wikipedia.org/wiki/Unified_Parallel_C
https://en.wikipedia.org/wiki/Unified_Parallel_C
https://en.wikipedia.org/wiki/DEC_Alpha
https://en.wikipedia.org/wiki/ARM_architecture
https://en.wikipedia.org/wiki/Atmel_AVR
https://en.wikipedia.org/wiki/Blackfin
https://en.wikipedia.org/wiki/Adapteva#Products
https://en.wikipedia.org/wiki/Hitachi_H8
https://en.wikipedia.org/wiki/HC12
https://en.wikipedia.org/wiki/IA-32
https://en.wikipedia.org/wiki/X86
https://en.wikipedia.org/wiki/IA-64
https://en.wikipedia.org/wiki/MIPS_instruction_set
https://en.wikipedia.org/wiki/Motorola_68000
https://en.wikipedia.org/wiki/PA-RISC
https://en.wikipedia.org/wiki/PDP-11
https://en.wikipedia.org/wiki/PowerPC
https://en.wikipedia.org/wiki/R8C
https://en.wikipedia.org/wiki/M16C
https://en.wikipedia.org/wiki/M32C

30 CHAPTER 17. GNU COMPILER COLLECTION

• SPARC

• SPU

• SuperH

• System/390 / zSeries

• VAX

• x86-64

Lesser-known target processors supported in the standard
release have included:

• 68HC11

• A29K

• CR16

• C6x

• D30V

• DSP16xx

• ETRAX CRIS

• FR-30

• FR-V

• Intel i960

• IP2000

• M32R

• MCORE

• MIL-STD-1750A

• MMIX

• MN10200

• MN10300

• Motorola 88000

• NS32K

• ROMP

• RL78

• Stormy16

• V850

• Xtensa

Additional processors have been supported by GCC ver-
sions maintained separately from the FSF version:

• Cortus APS3

• ARC

• AVR32

• C166 and C167

• D10V

• EISC

• eSi-RISC

• Hexagon[48]

• LatticeMico32

• LatticeMico8

• MeP

• MicroBlaze

• Motorola 6809

• MSP430

• NEC SX architecture[49]

• Nios II and Nios

• OpenRISC

• PDP-10

• PIC24/dsPIC

• PIC32

• Propeller

• RISC-V

• Saturn (HP48XGCC)

• System/370

• TIGCC (m68k variant)

• TriCore

• Z8000

• ZPU

The gcj Java compiler can target either a native machine
language architecture or the Java Virtual Machine’s Java
bytecode.[50] When retargeting GCC to a new platform,
bootstrapping is often used.

https://en.wikipedia.org/wiki/SPARC
https://en.wikipedia.org/wiki/Synergistic_Processing_Unit
https://en.wikipedia.org/wiki/SuperH
https://en.wikipedia.org/wiki/System/390
https://en.wikipedia.org/wiki/ZSeries
https://en.wikipedia.org/wiki/VAX
https://en.wikipedia.org/wiki/X86-64
https://en.wikipedia.org/wiki/68HC11
https://en.wikipedia.org/wiki/A29K
https://en.wikipedia.org/wiki/CR16
https://en.wikipedia.org/wiki/C6x
https://en.wikipedia.org/wiki/D30V
https://en.wikipedia.org/wiki/DSP16xx
https://en.wikipedia.org/wiki/ETRAX_CRIS
https://en.wikipedia.org/wiki/Fujitsu_FR
https://en.wikipedia.org/wiki/FR-V
https://en.wikipedia.org/wiki/Intel_i960
https://en.wikipedia.org/wiki/IP2000
https://en.wikipedia.org/wiki/M32R
https://en.wikipedia.org/wiki/MCORE
https://en.wikipedia.org/wiki/MIL-STD-1750A
https://en.wikipedia.org/wiki/MMIX
https://en.wikipedia.org/wiki/MN10200
https://en.wikipedia.org/wiki/MN10300
https://en.wikipedia.org/wiki/Motorola_88000
https://en.wikipedia.org/wiki/NS320xx
https://en.wikipedia.org/wiki/ROMP
https://en.wikipedia.org/wiki/RL78
https://en.wikipedia.org/wiki/Stormy16
https://en.wikipedia.org/wiki/V850
https://en.wikipedia.org/wiki/Xtensa
https://en.wikipedia.org/wiki/Cortus_APS3
https://en.wikipedia.org/wiki/ARC_(processor)
https://en.wikipedia.org/wiki/AVR32
https://en.wikipedia.org/wiki/C166
https://en.wikipedia.org/wiki/C167
https://en.wikipedia.org/wiki/D10V
https://en.wikipedia.org/wiki/EISC
https://en.wikipedia.org/wiki/ESi-RISC
https://en.wikipedia.org/wiki/Hexagon_(processor)
https://en.wikipedia.org/wiki/LatticeMico32
https://en.wikipedia.org/wiki/LatticeMico8
https://en.wikipedia.org/wiki/MeP
https://en.wikipedia.org/wiki/MicroBlaze
https://en.wikipedia.org/wiki/Motorola_6809
https://en.wikipedia.org/wiki/MSP430
https://en.wikipedia.org/wiki/NEC_SX_architecture
https://en.wikipedia.org/wiki/Nios_II
https://en.wikipedia.org/wiki/Nios_embedded_processor
https://en.wikipedia.org/wiki/OpenRISC
https://en.wikipedia.org/wiki/PDP-10
https://en.wikipedia.org/wiki/PIC30#PIC24_and_dsPIC_16-bit_microcontrollers
https://en.wikipedia.org/wiki/PIC30#PIC32_32-bit_microcontrollers
https://en.wikipedia.org/wiki/Parallax_Propeller
https://en.wikipedia.org/wiki/RISC-V
https://en.wikipedia.org/wiki/HP_Saturn
https://en.wikipedia.org/wiki/System/370
https://en.wikipedia.org/wiki/TIGCC
https://en.wikipedia.org/wiki/M68k
https://en.wikipedia.org/wiki/TriCore
https://en.wikipedia.org/wiki/Z8000
https://en.wikipedia.org/wiki/ZPU_(microprocessor)
https://en.wikipedia.org/wiki/Gcj
https://en.wikipedia.org/wiki/Java_Virtual_Machine
https://en.wikipedia.org/wiki/Java_bytecode
https://en.wikipedia.org/wiki/Java_bytecode
https://en.wikipedia.org/wiki/Retargetable_compiler
https://en.wikipedia.org/wiki/Bootstrapping_(compilers)

17.9. SEE ALSO 31

17.5 Development

The current stable version of GCC is 6.2, which was re-
leased on August 22, 2016.[51]

As of version 4.8, GCC is implemented in C++.[52]

GCC 4.6 supports many new Objective-C features,
such as declared and synthesized properties, dot syn-
tax, fast enumeration, optional protocol methods,
method/protocol/class attributes, class extensions and
a new GNU Objective-C runtime API. It also supports the
Go programming language and includes the libquadmath
library, which provides quadruple-precision mathematical
functions on targets supporting the __float128 datatype.
The library is used to provide the REAL(16) type in GNU
Fortran on such targets.
GCC uses many standard tools in its build, including Perl,
Flex, Bison, and other common tools. In addition it cur-
rently requires three additional libraries to be present in or-
der to build: GMP, MPC, and MPFR.
The trunk concentrates the major part of the development
efforts, where new features are implemented and tested.

17.6 C library

By default GCC uses the GNU C library (glibc),[53]
while musl, an alternative (for Linux and Android with
Bionic[54]) C library, is also officially supported “for the
AArch64, ARM, MicroBlaze, MIPS, MIPS64, PowerPC,
PowerPC64, SH, i386, x32 and x86_64 targets. [..] GCC
defaults to musl libc if it is built with a target triplet match-
ing the *-linux-musl* pattern.”[6][55][56]

17.7 License

The GCC runtime exception permits compilation of
proprietary and free software programs with GCC and us-
age of free software plugins.[57] The availability of this ex-
ception does not imply any general presumption that third-
party software is unaffected by the copyleft requirements
of the license of GCC.

17.8 Uses

Several companies make a business out of supplying and
supporting GCC ports to various platforms.[58]

17.9 See also

• List of compilers

• MinGW

• C++ concepts, an extension of the C++ standard. This
extension is supported exclusively by GCC.

17.10 References
[1] “GCC Releases”. GNU Project. Retrieved 2006-12-27.

[2] “GCC Releases – GNU Project – Free Software Foundation
(FSF)”.

[3] “GCC allows C++ – to some degree”. The H. June 1, 2010.

[4] “GCC Runtime Library Exception”. Retrieved 2013-02-28.

[5] “Programming Languages Supported by GCC”. GNU
Project. Retrieved 2014-06-23.

[6] “GCC 6 Release Series”.

[7] “OpenACC”.

[8] “Linux Board Support Packages”. Retrieved 2008-08-07.

[9] http://llvm.org/Users.html

[10] von Hagen, William (2006). The Definitive Guide to GCC.
Definitive Guides (2nd ed.). Apress. p. XXVII. ISBN 978-
1-4302-0219-6. So he wrote to VUCK’s author asking if
GNU could use it. Evidently, VUCK’s developer was un-
cooperative, responding that the university was free but that
the compiler was not.

[11] Stallman, Richard (September 20, 2011). “About the GNU
Project”. The GNU Project. Retrieved October 9, 2011.

[12] Puzo, Jerome E., ed. (February 1986). “Gnu’s Zoo”. GNU’S
Bulletin. Free Software Foundation. 1 (1). Retrieved 2007-
08-11.

[13] Richard M. Stallman (forwarded by Leonard H. Tower, Jr.)
(March 22, 1987). “GNU C compiler beta test release”.
Newsgroup: comp.lang.c. Retrieved October 9, 2011.

[14] Stallman, Richard M. (June 22, 2001) [First published
1988], “Contributors to GNU CC”, Using and Porting the
GNU Compiler Collection (GCC), Free Software Foundation,
Inc., p. 7, retrieved June 18, 2015.

[15] Salus, Peter H. (2005). “Chapter 10. SUN and gcc”. The
Daemon, the Gnu and the Penguin. Groklaw.

[16] Garfinkel, Simson L. (6 August 1990). “Get ready for GNU
software”. Computerworld.

https://en.wikipedia.org/wiki/Objective-C
https://en.wikipedia.org/wiki/Go_programming_language
https://en.wikipedia.org/wiki/Quadruple_precision_floating-point_format
https://en.wikipedia.org/wiki/Fortran
https://en.wikipedia.org/wiki/Perl
https://en.wikipedia.org/wiki/Flex_lexical_analyser
https://en.wikipedia.org/wiki/GNU_bison
https://en.wikipedia.org/wiki/GNU_Multi-Precision_Library
https://en.wikipedia.org/wiki/Multiple_Precision_Complex
https://en.wikipedia.org/wiki/MPFR
https://en.wikipedia.org/wiki/Glibc
https://en.wikipedia.org/wiki/Musl
https://en.wikipedia.org/wiki/Bionic_(software)
https://en.wikipedia.org/wiki/C_standard_library
https://en.wikipedia.org/wiki/Proprietary_software
https://en.wikipedia.org/wiki/Free_software
https://en.wikipedia.org/wiki/List_of_compilers
https://en.wikipedia.org/wiki/MinGW
https://en.wikipedia.org/wiki/C++_concepts
https://www.gnu.org/software/gcc/releases.html
https://www.gnu.org/software/gcc/releases.html
https://www.gnu.org/software/gcc/releases.html
http://www.h-online.com/open/news/item/GCC-allows-C-to-some-degree-1012611.html
https://en.wikipedia.org/wiki/Heinz_Heise
https://www.gnu.org/licenses/gcc-exception.html
https://gcc.gnu.org/frontends.html
https://gcc.gnu.org/gcc-6/changes.html
https://gcc.gnu.org/wiki/OpenACC
http://www.freescale.com/webapp/sps/site/overview.jsp?code=CW_BSP&fsrch=1
http://llvm.org/Users.html
http://books.google.us/books?id=wQ6r3UTivJgC&printsec=frontcover&source=gbs_ge_summary_r&cad=0#v=onepage&q&f=false
https://en.wikipedia.org/wiki/International_Standard_Book_Number
https://en.wikipedia.org/wiki/Special:BookSources/978-1-4302-0219-6
https://en.wikipedia.org/wiki/Special:BookSources/978-1-4302-0219-6
https://www.gnu.org/gnu/thegnuproject.html
https://www.gnu.org/gnu/thegnuproject.html
https://www.gnu.org/bulletins/bull1.txt
https://groups.google.com/group/comp.lang.misc/msg/32eda22392c20f98
https://en.wikipedia.org/wiki/Usenet_newsgroup
news:comp.lang.c
https://gcc.gnu.org/onlinedocs/gcc-2.95.3/gcc_23.html
https://en.wikipedia.org/wiki/Peter_H._Salus
http://www.groklaw.net/article.php?story=20050525231654621
http://www.groklaw.net/article.php?story=20050525231654621
https://en.wikipedia.org/wiki/Groklaw
https://en.wikipedia.org/wiki/Simson_Garfinkel
https://books.google.com/books?id=mZ0kj6qvsvYC&pg=PT101
https://books.google.com/books?id=mZ0kj6qvsvYC&pg=PT101

32 CHAPTER 17. GNU COMPILER COLLECTION

[17] Henkel-Wallace, David (August 15, 1997), A new compiler
project to merge the existing GCC forks, retrieved May 25,
2012.

[18] “Pentium Compiler FAQ”.

[19] “The Short History of GCC development”.

[20] “GCC Steering Committee”.

[21] “Linux Information Project”. LINFO. Retrieved 2010-04-
27. The GCC has been ported to (i.e., modified to run on)
more than 60 platforms, which is more than for any other
compiler.

[22] “Symbian GCC Improvement Project”. Retrieved 2007-11-
08.

[23] “setting up gcc as a cross-compiler”. ps2stuff. 2002-06-08.
Archived from the original on December 11, 2008. Re-
trieved 2008-12-12.

[24] https://gcc.gnu.org/wiki/CompileFarm

[25] “sh4 g++ guide”. Archived from the original on 2002-12-20.
Retrieved 2008-12-12.

[26] “Security Features: Compile Time Buffer Checks (FOR-
TIFY_SOURCE)”. fedoraproject.org. Retrieved 2009-03-
11.

[27] “languages used to make GCC”.

[28] “GCC Internals”. GCC.org. Retrieved March 1, 2010.

[29] “An email by Richard Stallman on emacs-devel”.

[30] “GCC 4.8 Release Series: Changes, New Features, and
Fixes”. Retrieved October 4, 2013.

[31] “GCC 3.4 Release Series Changes, New Features, and
Fixes”.

[32] “GCC 4.1 Release Series Changes, New Features, and
Fixes”.

[33] “GENERIC in GNU Compiler Collection Internals”.

[34] “GIMPLE in GNU Compiler Collection Internals”.

[35] McCAT at the Wayback Machine (archived August 12,
2004)

[36] “Laurie J. Hendren”.

[37] Novillo, Diego (December 2004). “From Source to Binary:
The Inner Workings of GCC”. Red Hat Magazine.

[38] “Profile-guided optimization is demonstrated here”.

[39] “Plugins”. GCC online documentation. Retrieved July 8,
2013.

[40] Starynkevitch, Basile. “GCC plugins thru the MELT exam-
ple” (PDF). Retrieved 2014-04-10.

[41] “About GCC MELT”. Retrieved July 8, 2013.

[42] “Transactional Memory in GCC”.

[43] “GCC Front Ends”. gnu.org. Retrieved November 25, 2011.

[44] “GCC 5 Release Series”.

[45] “PATCH] Remove chill”. gcc.gnu.org. Retrieved July 29,
2010.

[46] “gdc project on bitbucket”. Retrieved July 3, 2010.

[47] “GCC UPC (GCC Unified Parallel C)”. www .gccupc .org.
2006-02-20. Retrieved 2009-03-11. External link in |pub-
lisher= (help)

[48] “Hexagon Project Wiki”.

[49] “sx-gcc: port gcc to nec sx vector cpu”.

[50] “The GNU Compiler for the Java Programming Language”.
Retrieved 2010-04-22.

[51] “GCC 6 Release Series”.

[52] “GCC 4.8 Release Series: Changes, New Features, and
Fixes”.

[53] “The GNU C Library (glibc)”. The GNU C Library is used
as the C library in the GNU system and in GNU/Linux sys-
tems

[54] “Bionic and musl – room for cooperation?” (PDF). but there
is no need to throw away existing Bionic, and ABI compati-
bility is important

[55] “Musl Libc 1.0 Is Going To Be Released Real Soon”. Used
alongside an existing Android userspace, musl bridges the
gap between full-fledged Linux systems and Android, pro-
viding the necessary library foundation to run standard C
and C++ software while retaining the license freedom de-
velopers have come to expect.

[56] “Taking Rust everywhere with rustup”. Today’s Rust de-
pends on libc, and on most Linuxes that means glibc. It’s
technically challenging to fully statically link glibc, which
presents difficulties when using it to produce a truly stan-
dalone binary. Fortunately, an alternative exists: musl

[57] “GCC Runtime Exception”. FSF. Retrieved 2014-04-10.

[58] “FSF Service Directory”.

17.11 Further reading

• Using the GNU Compiler Collection (GCC), Free Soft-
ware Foundation, 2008.

• GNU Compiler Collection (GCC) Internals, Free Soft-
ware Foundation, 2008.

https://gcc.gnu.org/news/announcement.html
https://gcc.gnu.org/news/announcement.html
http://home.schmorp.de/pgcc-faq.html#egcs
http://www.softpanorama.org/People/Stallman/history_of_gcc_development.shtml
https://gcc.gnu.org/steering.html
http://www.linfo.org/gcc.html
http://www.inf.u-szeged.hu/symbian-gcc/
https://web.archive.org/web/20081211044658/http://ps2stuff.playstation2-linux.com/gcc_build.html
http://ps2stuff.playstation2-linux.com/gcc_build.html
https://gcc.gnu.org/wiki/CompileFarm
https://web.archive.org/web/20021220025554/http://www.ngine.de/gccguide.html
http://www.ngine.de/gccguide.html
http://fedoraproject.org/wiki/Security/Features
http://fedoraproject.org/wiki/Security/Features
http://www.ohloh.net/projects/gcc/analyses/latest
https://gcc.gnu.org/onlinedocs/gccint/Libgcc.html
http://lists.gnu.org/archive/html/emacs-devel/2010-07/msg00518.html
https://gcc.gnu.org/gcc-4.8/changes.html
https://gcc.gnu.org/gcc-4.8/changes.html
https://gcc.gnu.org/gcc-3.4/changes.html
https://gcc.gnu.org/gcc-3.4/changes.html
https://gcc.gnu.org/gcc-4.1/changes.html
https://gcc.gnu.org/gcc-4.1/changes.html
https://gcc.gnu.org/onlinedocs/gccint/GENERIC.html
https://gcc.gnu.org/onlinedocs/gccint/GIMPLE.html
https://web.archive.org/web/20040812030043/www-acaps.cs.mcgill.ca/info/McCAT/McCAT.html
https://en.wikipedia.org/wiki/Wayback_Machine
http://www.sable.mcgill.ca/~hendren/
http://www.redhat.com/magazine/002dec04/features/gcc/
http://www.redhat.com/magazine/002dec04/features/gcc/
https://en.wikipedia.org/wiki/Red_Hat#Red_Hat_Magazine
https://gcc.gnu.org/install/build.html#TOC4
https://gcc.gnu.org/onlinedocs/gccint/Plugins.html
http://gcc-melt.org/gcc-plugin-MELT-LinuxCollabSummit2014.pdf
http://gcc-melt.org/gcc-plugin-MELT-LinuxCollabSummit2014.pdf
http://gcc-melt.org/
https://gcc.gnu.org/wiki/TransactionalMemory
https://gcc.gnu.org/frontends.html
https://gcc.gnu.org/gcc-5/changes.html
https://gcc.gnu.org/ml/gcc-patches/2002-04/msg00887.html
https://bitbucket.org/goshawk/gdc/
http://www.gccupc.org/
http://www.gccupc.org/
https://en.wikipedia.org/wiki/Help:CS1_errors#param_has_ext_link
https://www.codeaurora.org/xwiki/bin/Hexagon/
https://code.google.com/p/sx-gcc/
https://gcc.gnu.org/java/
https://gcc.gnu.org/gcc-6/
https://gcc.gnu.org/gcc-4.8/changes.html
https://gcc.gnu.org/gcc-4.8/changes.html
https://www.gnu.org/software/libc/
http://elinux.org/images/8/8b/Room_For_Cooperation-_Bionic_and_musl.pdf
http://www.phoronix.com/scan.php?page=news_item&px=mtyymzm
https://blog.rust-lang.org/2016/05/13/rustup.html
https://www.gnu.org/licenses/gcc-exception
http://www.fsf.org/resources/service
https://gcc.gnu.org/onlinedocs/gcc-4.4.2/gcc/
https://gcc.gnu.org/onlinedocs/gccint/

17.12. EXTERNAL LINKS 33

• An Introduction to GCC, Network Theory Ltd., 2004
(Revised August 2005). ISBN 0-9541617-9-3.

• Arthur Griffith, GCC: The Complete Reference. Mc-
GrawHill / Osborne, 2002. ISBN 0-07-222405-3.

17.12 External links

17.12.1 Official

• Official website

• GCC Release Timeline

• GCC Development Plan

17.12.2 Other

• GCC optimisations

• Collection of GCC 4.0.2 architecture and internals
documents at I.I.T. Bombay

• Kerner, Sean Michael (March 2, 2006). “New GCC
Heavy on Optimization”. internetnews.com

• Kerner, Sean Michael (April 22, 2005). “Open Source
GCC 4.0: Older, Faster”. internetnews.com

• From Source to Binary: The Inner Workings of GCC,
by Diego Novillo, Red Hat Magazine, December 2004

• A 2003 paper on GENERIC and GIMPLE

• Marketing Cygnus Support, an essay covering GCC
development for the 1990s, with 30 monthly reports
for in the “Inside Cygnus Engineering” section near
the end

• EGCS 1.0 announcement

• EGCS 1.0 features list

• Fear of Forking, an essay by Rick Moen recording
seven well-known forks, including the GCC/EGCS
one

http://www.network-theory.co.uk/gcc/intro/
https://en.wikipedia.org/wiki/Special:BookSources/0954161793
https://en.wikipedia.org/wiki/Special:BookSources/0072224053
http://gcc.gnu.org/
https://www.gnu.org/software/gcc/releases.html
https://www.gnu.org/software/gcc/develop.html
http://hanoo.org/index.php?article=gcc-optimisations
http://www.cse.iitb.ac.in/grc/
http://www.cse.iitb.ac.in/grc/
http://www.internetnews.com/dev-news/article.php/3588926
http://www.internetnews.com/dev-news/article.php/3588926
http://www.internetnews.com/dev-news/article.php/3499881
http://www.internetnews.com/dev-news/article.php/3499881
http://www.redhat.com/magazine/002dec04/features/gcc/
https://en.wikipedia.org/wiki/Red_Hat#Red_Hat_Magazine
ftp://gcc.gnu.org/pub/gcc/summit/2003/GENERIC%2520and%2520GIMPLE.pdf
http://www.toad.com/gnu/cygnus/index.html
http://oldhome.schmorp.de/egcs.html
https://gcc.gnu.org/egcs-1.0/features.html
http://linuxmafia.com/faq/Licensing_and_Law/forking.html

Chapter 18

HP aC++

The HP C/aC++ Developer’s Bundle includes the utilities
for creating C and C++ programs. These tools provide fea-
tures such as performance analysis, code analysis, and the
HP-UX Developer’s Toolkit. This product runs on HP-UX
11i v3, on the HP Integrity and HP 9000 systems.

18.1 Products

The HP C/aC++ Developer’s Bundle includes:

• HP C/ANSI C compiler

• HP aC++ compiler

• HP-UX Developer’s Toolkit

• HP WDB debugger

• HP Caliper performance analyzer

• HP Code Advisor (cadvise) analysis tool

18.2 External links
• HP aC++

• HP Caliper performance analyzer

• HP Code Advisor (cadvise)

34

https://en.wikipedia.org/wiki/HP-UX
https://en.wikipedia.org/wiki/HP_Integrity
https://en.wikipedia.org/wiki/HP_9000
https://h20392.www2.hpe.com/portal/swdepot/displayProductInfo.do?productNumber=B9007AAEVAL
http://www.hp.com/go/caliper
http://www.hp.com/go/cadvise

Chapter 19

IBM XL C/C++ Compilers

XL C/C++ is the name of IBM’s proprietary optimizing
C/C++ compiler for IBM-supported environments.
The IBM XL compilers are built from modularized compo-
nents consisting of front ends (for different programming
languages), a platform agnostic high level optimizer, and
platform-specific low-level optimizers/code generators to
target specific hardware and operating systems. The XL
C/C++ compilers target POWER, BlueGene/Q, and z Sys-
tems hardware architectures.
A common high level optimizer across the POWER and
z/OS XL C/C++ compilers optimizes the source pro-
gram using platform-agnostic optimizations such as inter-
procedural analysis, profile-directed feedback, and loop and
vector optimizations.
A low-level optimizer on each platform performs function-
level optimizations, and generates optimized code for a spe-
cific operating system and hardware platform.
The particular optimizations performed for any given com-
pilation depend upon the optimization level chosen un-
der option control (O2 to O5) along with any other
optimization-related options, such as those for interproce-
dural analysis or loop optimizations.
A 60-day installable evaluation version is available for
download for the XL C/C++ for AIX, XL C/C++ for Linux
on Power, and XL C/C++ for Linux on z compilers. z/OS
XL C/C++ is available for a 15-day zero install trial via the
IBM Integrated Solution for z Systems Development.
In June 2016, IBM introduced XL C/C++ for Linux Com-
munity Edition which is free of charge. It can be down-
loaded from this link.
The XL compilers on AIX have delivered leadership scores
in the SPEC CPU2000 and CPU2006 benchmarks, in com-
bination with specific IBM POWER system processor an-
nouncements, for example CPU2006 Floating Point score
of 71.5 in May 2010 and SPEC CPU2000 Floating Point
score of 4051 in August 2006.

Current (2016) versions of the XL C/C++ compilers sup-
port a subset of the C++03 standard on AIX; while XL
C/C++ for Linux (Power) v13.1.3 supports C++11.
The XL C/C++ compiler for Linux on Power little en-
dian edition, released in December 2014, is based on the
open source Clang front end (part of the Clang/LLVM open
source project) and therefore provides a higher level of lan-
guage and GCC compatibility than IBM C/C++ compilers
on other platforms, although that support is a subset of what
Clang/LLVM itself supports.

19.1 Products

The XL C/C++ compiler family consists of the following
products, with most recent version and release dates where
known:

• XL C/C++ for z/VM (Version 1.3, December 2011)

• z/OS XL C/C++ (Version 2.2, September 2015)

• XL C/C++ for Linux on z Systems (Version 1.1, Jan-
uary 2015)

• XL C/C++ for AIX (Version 13.1, June 2014)

• XL C for AIX (Version 13.1, June 2014)

• XL C/C++ for Linux on Power (Version 13.1.1, De-
cember 2014)

• XL C/C++ for Blue Gene/Q (Version 12.1, June 2012)

• XL C/C++ Advanced Edition for Blue Gene (Version
9.0, September 2007, withdrawn August 2009)

35

https://en.wikipedia.org/wiki/Z_Systems
https://en.wikipedia.org/wiki/Z_Systems
https://en.wikipedia.org/wiki/Z/OS
http://www.ibm.com/developerworks/downloads/r/xlcplusaix/
http://www.ibm.com/developerworks/downloads/r/xlcpluslinux/
http://www.ibm.com/developerworks/downloads/r/xlcpluslinux/
http://www.ibm.com/developerworks/downloads/r/xlcpluslinuxonz/
http://www.ibm.com/developerworks/downloads/rdtsandbox_systemz/index.html
https://www.ibm.com/developerworks/community/blogs/572f1638-121d-4788-8bbb-c4529577ba7d/entry/June_17_2016_at_6_13_42_PM?lang=en
https://en.wikipedia.org/wiki/Standard_Performance_Evaluation_Corporation
http://www.spec.org/cpu2006/results/res2010q2/#SPECfp%7CSPEC
http://www.spec.org/cpu2000/results/res2006q3/
https://en.wikipedia.org/wiki/Little_endian
https://en.wikipedia.org/wiki/Little_endian
https://en.wikipedia.org/wiki/Clang

36 CHAPTER 19. IBM XL C/C++ COMPILERS

19.2 References

19.3 External links
• C/C++ Café – Community & Forum

http://www.ibm.com/rational/community/cpp

Chapter 20

Intel C++ Compiler

Intel C++ Compiler, also known as icc or icl, is a group
of C and C++ compilers from Intel available for Windows,
OS X, Linux and Intel-based Android devices.

20.1 Overview

The compilers generate optimized code for IA-32 and Intel
64 architectures, and non-optimized code for non-Intel but
compatible processors, such as certain AMD processors. A
specific release of the compiler (11.1) is available for de-
velopment of Linux-based applications for IA-64 (Itanium
2) processors.
The 14.0 compiler added support for Intel-based Android
devices and optimized vectorization and SSE Family in-
structions for performance. The 13.0 release added support
for the Intel Xeon Phi coprocessor. It continues support
for automatic vectorization, which can generate SSE, SSE2,
SSE3, SSSE3, SSE4, AVX and AVX2 SIMD instructions,
and the embedded variant for Intel MMX and MMX 2.[4]
Use of such instruction through the compiler can lead to
improved application performance in some applications as
run on IA-32 and Intel 64 architectures, compared to ap-
plications built with compilers that do not support these in-
structions.
Intel compilers support Cilk Plus, which is a capability for
writing vectorized and parallel code that can be used on
IA-32 and Intel 64 processors or which can be offloaded
to Xeon Phi coprocessors. They also continue support for
OpenMP 4.0, symmetric multiprocessing, automatic paral-
lelization, and Guided Auto-Parallization (GAP). With the
add-on Cluster OpenMP capability, the compilers can also
automatically generate Message Passing Interface calls for
distributed memory multiprocessing from OpenMP direc-
tives.
Intel C++ is compatible with Microsoft Visual C++ on Win-
dows and integrates into Microsoft Visual Studio. On Linux
and OS X, it is compatible with GNU Compiler Collec-
tion (GCC) and the GNU toolchain. Intel C++ Compiler

for Android is hosted on Windows, OS X or Linux and is
compatible with the Android NDK, including gcc and the
Eclipse IDE. Intel compilers are known for the application
performance they can enable as measured by benchmarks,
such as the SPEC CPU benchmarks.

20.2 Optimizations

Intel compilers are optimized to computer systems using
processors that support Intel architectures. They are de-
signed to minimize stalls and to produce code that executes
in the fewest possible number of cycles. The Intel C++
Compiler supports three separate high-level techniques for
optimizing the compiled program: interprocedural opti-
mization (IPO), profile-guided optimization (PGO), and
high-level optimizations (HLO). The Intel C++ compiler in
the Parallel Studio XE 2016 products also supports tools,
techniques and language extensions, such as Cilk Plus, for
adding and maintaining application parallelism on IA-32
and Intel 64 processors, and also enables application of-
floading to Intel coprocessors, such as the Intel Xeon Phi
coprocessor.
Cilk Plus adds language extensions to C++ to express data
and task-parallelism. _Cilk_spawn and _Cilk_sync are key-
words to enable task parallelism and the _Cilk_for keyword
enables parallelization of for loops. It also provides vector
notation with array notations and elemental function capa-
bilities.
Profile-guided optimization refers to a mode of optimiza-
tion where the compiler is able to access data from a sample
run of the program across a representative input set. The
data would indicate which areas of the program are exe-
cuted more frequently, and which areas are executed less
frequently. All optimizations benefit from profile-guided
feedback because they are less reliant on heuristics when
making compilation decisions.
High-level optimizations are optimizations performed on
a version of the program that more closely represents the

37

https://en.wikipedia.org/wiki/C_(programming_language)
https://en.wikipedia.org/wiki/C++
https://en.wikipedia.org/wiki/Compiler
https://en.wikipedia.org/wiki/Intel
https://en.wikipedia.org/wiki/Windows
https://en.wikipedia.org/wiki/OS_X
https://en.wikipedia.org/wiki/Linux
https://en.wikipedia.org/wiki/Android_(operating_system)
https://en.wikipedia.org/wiki/IA-32
https://en.wikipedia.org/wiki/Intel_64
https://en.wikipedia.org/wiki/Intel_64
https://en.wikipedia.org/wiki/Advanced_Micro_Devices
https://en.wikipedia.org/wiki/Itanium
https://en.wikipedia.org/wiki/Intel_MIC
https://en.wikipedia.org/wiki/Automatic_vectorization
https://en.wikipedia.org/wiki/Streaming_SIMD_Extensions
https://en.wikipedia.org/wiki/SSE2
https://en.wikipedia.org/wiki/SSE3
https://en.wikipedia.org/wiki/SSSE3
https://en.wikipedia.org/wiki/SSE4
https://en.wikipedia.org/wiki/Advanced_Vector_Extensions
https://en.wikipedia.org/wiki/Advanced_Vector_Extensions
https://en.wikipedia.org/wiki/SIMD
https://en.wikipedia.org/wiki/Embedded_system
https://en.wikipedia.org/wiki/MMX_(instruction_set)
https://en.wikipedia.org/wiki/Cilk_Plus
https://en.wikipedia.org/wiki/OpenMP
https://en.wikipedia.org/wiki/Symmetric_multiprocessing
https://en.wikipedia.org/wiki/Automatic_parallelization
https://en.wikipedia.org/wiki/Automatic_parallelization
https://en.wikipedia.org/wiki/Message_Passing_Interface
https://en.wikipedia.org/wiki/Distributed_memory_multiprocessing
https://en.wikipedia.org/wiki/Visual_C++
https://en.wikipedia.org/wiki/Microsoft_Visual_Studio
https://en.wikipedia.org/wiki/GNU_Compiler_Collection
https://en.wikipedia.org/wiki/GNU_Compiler_Collection
https://en.wikipedia.org/wiki/GNU_toolchain
https://en.wikipedia.org/wiki/Eclipse_(software)
https://en.wikipedia.org/wiki/Standard_Performance_Evaluation_Corporation
https://en.wikipedia.org/wiki/Interprocedural_optimization
https://en.wikipedia.org/wiki/Interprocedural_optimization
https://en.wikipedia.org/wiki/Profile-guided_optimization
https://en.wikipedia.org/wiki/Cilk_Plus
https://en.wikipedia.org/wiki/For_loop

38 CHAPTER 20. INTEL C++ COMPILER

source code. This includes loop interchange, loop fusion,
loop unrolling, loop distribution, data prefetch, and more.[5]

Interprocedural optimization applies typical compiler op-
timizations (such as constant propagation) but using a
broader scope that may include multiple procedures, multi-
ple files, or the entire program.[6]

Intel’s compiler has been criticized for applying, by default,
floating-point optimizations not allowed by the C standard
and that require special flags with other compilers such as
gcc.[7]

20.3 Architectures
• IA-32
• x86-64 (Intel 64 and AMD64)
• Intel Xeon Phi coprocessor
• IA-64 (Itanium 2)

20.4 Description of packaging

Except for the Intel Bi-Endian C++ Compiler, Intel C++
compilers are not available in standalone form. They are
available in suites:

• Intel Parallel Studio XE for development of technical,
enterprise, and high-performance computing applica-
tions on Windows, Linux and OS X

• Intel System Studio for development of system and
app software for embedded systems or devices running
Windows, Linux or Android

The suites include other build tools, such as libraries, and
tools for threading and performance analysis.

20.5 History Since 2003

20.6 Flags and manuals

Documentation can be found at the Intel Software Technical
Documentation site.

20.7 Debugging

The Intel compiler provides debugging information that is
standard for the common debuggers (DWARF 2 on Linux,

similar to gdb, and COFF for Windows). The flags to com-
pile with debugging information are /Zi on Windows and -g
on Linux. Debugging is done on Windows using the Visual
Studio debugger and, on Linux, using gdb.
While the Intel compiler can generate a gprof compat-
ible profiling output, Intel also provides a kernel level,
system-wide statistical profiler called Intel VTune Ampli-
fier. VTune can be used from a command line or thru an in-
cluded GUI on Linux or Windows. It can also be integrated
into Visual Studio on Windows, or Eclipse on Linux).
Intel also offers a tool for memory and threading error de-
tection called Intel Inspector XE. Regarding memory er-
rors, it helps detect memory leaks, memory corruption,
allocation/de-allocation of API mismatches and inconsis-
tent memory API usage. Regarding threading errors, it
helps detect data races (both heap and stack), deadlocks and
thread and synch API errors.

20.8 Criticism

Intel and third parties have published benchmark results to
substantiate performance leadership claims over other com-
mercial, open source and AMD compilers and libraries on
Intel and non-Intel processors. Intel and AMD have doc-
umented flags to use on the Intel compilers to get optimal
performance on Intel and AMD processors.[12][13] Never-
theless, the Intel compilers have been known to produce
sub-optimal code for processors from other vendors than
Intel. For example, Steve Westfield wrote in a 2005 article
at the AMD website:[14]

The Danish developer and scholar Agner Fog wrote in
2009:[15]

This vendor-specific CPU dispatching decreases the per-
formance on non-Intel processors of software built with an
Intel compiler or an Intel function library – possibly with-
out the knowledge of the programmer. This has allegedly
led to misleading benchmarks.[15] A legal battle between
AMD and Intel over this and other issues has been settled
in November 2009.[16] In late 2010, AMD settled a US
Federal Trade Commission antitrust investigation against
Intel.[17]

The FTC settlement included a disclosure provision where
Intel must:[18]

In compliance with this rule, Intel added an “optimization
notice” to its compiler descriptions stating that they “may
or may not optimize to the same degree for non-Intel mi-
croprocessors” and that “certain optimizations not specific
to Intel microarchitecture are reserved for Intel micropro-
cessors.” It says that:[19]

As reported by The Register[20] in July, 2013, Intel was

https://en.wikipedia.org/wiki/Loop_interchange
https://en.wikipedia.org/wiki/Loop_fusion
https://en.wikipedia.org/wiki/Loop_unrolling
https://en.wikipedia.org/wiki/Loop_distribution
https://en.wikipedia.org/wiki/GNU_Compiler_Collection
https://en.wikipedia.org/wiki/IA-32
https://en.wikipedia.org/wiki/X86-64
https://en.wikipedia.org/wiki/Intel_64
https://en.wikipedia.org/wiki/AMD64
https://en.wikipedia.org/wiki/Intel_MIC
https://en.wikipedia.org/wiki/Itanium
http://software.intel.com/en-us/articles/intel-software-technical-documentation/
http://software.intel.com/en-us/articles/intel-software-technical-documentation/
https://en.wikipedia.org/wiki/DWARF
https://en.wikipedia.org/wiki/GNU_Debugger
https://en.wikipedia.org/wiki/COFF
https://en.wikipedia.org/wiki/Profiler_(computer_science)
https://en.wikipedia.org/wiki/Intel_VTune_Amplifier
https://en.wikipedia.org/wiki/Intel_VTune_Amplifier
https://en.wikipedia.org/wiki/Visual_Studio
https://en.wikipedia.org/wiki/Eclipse_(software)
https://en.wikipedia.org/wiki/Memory_leak
https://en.wikipedia.org/wiki/Benchmark_(computing)
https://en.wikipedia.org/wiki/Federal_Trade_Commission
https://en.wikipedia.org/wiki/Federal_Trade_Commission
https://en.wikipedia.org/wiki/Competition_law
https://en.wikipedia.org/wiki/The_Register

20.11. EXTERNAL LINKS 39

suspected of “benchmarksmanship”, when it was shown
that the object code produced by the Intel compiler for the
AnTuTu Mobile Benchmark omitted portions of the bench-
mark which showed increased performance compared to
ARM platforms.

20.9 See also

• Intel Parallel Studio XE

• Intel Integrated Performance Primitives (IPP)

• Intel Data Analytics Acceleration Library (DAAL)

• Intel Math Kernel Library (MKL)

• Intel Threading Building Blocks (TBB)

• Cilk Plus

• VTune Amplifier

• Intel Fortran Compiler

• Intel Developer Zone (Intel DZ; support and discus-
sion)

20.10 References
[1] “Intel C++ Compiler 17.0 Release Notes”.

[2] “No Cost Options for Intel Parallel Studio XE, Support your-
self, Royalty-Free”.

[3] “Intel C++ Compiler for Android documentation”.

[4] A. J. C. Bik, The Software Vectorization Handbook (Intel
Press, Hillsboro, OR, 2004), ISBN 0-9743649-2-4.

[5] The Software Optimization Cookbook, High-Performance
Recipes for IA-32 Platforms, Richard Gerber, Aart J.C. Bik,
Kevin B. Smith, and Xinmin Tian, Intel Press, 2006

[6] Intel C++ Compiler XE 13.0 User and Reference Guides

[7] The pitfalls of verifying floating-point computations, by
David Monniaux, also printed in ACM Transactions on pro-
gramming languages and systems (TOPLAS), May 2008;
section 4.3.2 discusses nonstandard optimizations.

[8] This note is attached to the release in which Cilk Plus was
introduced. This ULR points to current documentation:
http://software.intel.com/en-us/intel-composer-xe/

[9] Intel C++ Composer XE 2013 Release
Notes http://software.intel.com/en-us/articles/
intel-c-composer-xe-2013-release-notes/

[10] Intel C++ Composer XE 2013 Release
Notes http://software.intel.com/en-us/articles/
intel-c-composer-xe-2013-release-notes/

[11] “Intel® Compilers | Intel® Developer Zone”. Intel.com.
1999-02-22. Retrieved 2012-10-13.

[12] Archived March 23, 2010, at the Wayback Machine.

[13] http://developer.amd.com/Assets/
CompilerOptQuickRef-61004100.pdf

[14] Your Processor, Your Compiler, and You: The Case of the
Secret CPUID String

[15] Intel’s “cripple AMD” function

[16] http://download.intel.com/pressroom/legal/AMD_
settlement_agreement.pdf

[17] “Intel and U.S. Federal Trade Commission Reach Tentative
Settlement”. Newsroom.intel.com. 2010-08-04. Retrieved
2012-10-13.

[18] FTC, Intel Reach Settlement; Intel Banned From Anticom-
petitive Practices

[19] “Optimization Notice”. Intel Corporation. Retrieved 11 De-
cember 2013.

[20] http://www.theregister.co.uk/2013/07/12/intel_atom_
didnt_beat_arm

20.11 External links
• Intel C++ Compiler for Android

• Compilers in Parallel Studio XE 2013

• Cilk Plus Open Source Site

• TBB Open Source Site

• Free download of Intel compilers for non-commercial
use

https://en.wikipedia.org/wiki/AnTuTu
https://en.wikipedia.org/wiki/Intel_Parallel_Studio_XE
https://en.wikipedia.org/wiki/Integrated_Performance_Primitives
https://en.wikipedia.org/wiki/Data_Analytics_Acceleration_Library
https://en.wikipedia.org/wiki/Math_Kernel_Library
https://en.wikipedia.org/wiki/Threading_Building_Blocks
https://en.wikipedia.org/wiki/Cilk_Plus
https://en.wikipedia.org/wiki/VTune
https://en.wikipedia.org/wiki/Intel_Fortran_Compiler
https://en.wikipedia.org/wiki/Intel_Developer_Zone
https://software.intel.com/en-us/articles/intel-c-compiler-170-release-notes
https://software.intel.com/en-us/free_tools_and_libraries
https://software.intel.com/en-us/free_tools_and_libraries
http://software.intel.com/c-compiler-android
https://en.wikipedia.org/wiki/Special:BookSources/0974364924
http://hal.archives-ouvertes.fr/hal-00128124/en/
http://software.intel.com/en-us/intel-composer-xe/
http://software.intel.com/en-us/articles/intel-c-composer-xe-2013-release-notes/
http://software.intel.com/en-us/articles/intel-c-composer-xe-2013-release-notes/
http://software.intel.com/en-us/articles/intel-c-composer-xe-2013-release-notes/
http://software.intel.com/en-us/articles/intel-c-composer-xe-2013-release-notes/
http://www.intel.com/software/products/compilers/docs/cwin/release_notes.htm
https://web.archive.org/web/20100323062819/http://software.intel.com/sites/products/documentation/hpc/compilerpro/en-us/cpp/win/compiler_c/index.htm
https://en.wikipedia.org/wiki/Wayback_Machine
http://developer.amd.com/Assets/CompilerOptQuickRef-61004100.pdf
http://developer.amd.com/Assets/CompilerOptQuickRef-61004100.pdf
http://developer.amd.com/documentation/articles/pages/4292005119.aspx
http://developer.amd.com/documentation/articles/pages/4292005119.aspx
http://www.agner.org/optimize/blog/read.php?i=49
http://download.intel.com/pressroom/legal/AMD_settlement_agreement.pdf
http://download.intel.com/pressroom/legal/AMD_settlement_agreement.pdf
http://newsroom.intel.com/community/intel_newsroom/blog/2010/08/04/intel-and-us-federal-trade-commission-reach-tentative-settlement
http://newsroom.intel.com/community/intel_newsroom/blog/2010/08/04/intel-and-us-federal-trade-commission-reach-tentative-settlement
http://www.dailytech.com/FTC+Intel+Reach+Settlement+Intel+Banned+From+Anticompetitive+Practices/article19265.htm
http://www.dailytech.com/FTC+Intel+Reach+Settlement+Intel+Banned+From+Anticompetitive+Practices/article19265.htm
http://software.intel.com/en-us/articles/optimization-notice
http://www.theregister.co.uk/2013/07/12/intel_atom_didnt_beat_arm
http://www.theregister.co.uk/2013/07/12/intel_atom_didnt_beat_arm
http://software.intel.com/c-compiler-android/
http://software.intel.com/intel-compilers/
http://www.cilkplus.org/
http://www.threadingbuildingblocks.org/
http://software.intel.com/en-us/articles/non-commercial-software-download/
http://software.intel.com/en-us/articles/non-commercial-software-download/

Chapter 21

LabWindows/CVI

For other uses, see CVI (disambiguation).

LabWindows/CVI (CVI is short for C for Virtual Instru-
mentation) is an ANSI C programming environment for test
and measurement developed by National Instruments. The
program was originally released as LabWindows for DOS
in 1987, but was soon revisioned (and renamed) for the
Microsoft Windows platform. The current version of Lab-
Windows/CVI (commonly referred to as CVI) is 2015.
LabWindows/CVI uses the same libraries and data acquisi-
tion modules as the better known National Instrument prod-
uct LabVIEW, and is thus highly compatible with it.
LabVIEW is targeted more at domain experts and scientists
and CVI more towards software engineers that are more
comfortable with text-based linear languages such as C.

21.1 Release history

Starting with LabVIEW 8.0, major versions are released
around the first week of August, to coincide with the annual
National Instruments conference NI Week, and followed by
a bug-fix release the following February.
In 2009 National Instruments started to name the releases
after the year in which they are released. The bug-fix is
called a Service Pack (for instance the 2009 service pack 1
is released in February 2010). Follow the information:[1]

21.2 See also
• National Instruments

21.3 References
[1] LabWindows™/CVI™ Release Information

40

https://en.wikipedia.org/wiki/CVI_(disambiguation)
https://en.wikipedia.org/wiki/C_(programming_language)
https://en.wikipedia.org/wiki/Virtual_instrumentation
https://en.wikipedia.org/wiki/Virtual_instrumentation
https://en.wikipedia.org/wiki/ANSI
https://en.wikipedia.org/wiki/National_Instruments
https://en.wikipedia.org/wiki/DOS
https://en.wikipedia.org/wiki/Microsoft_Windows
https://en.wikipedia.org/wiki/LabVIEW
https://en.wikipedia.org/wiki/C_(programming_language)
https://en.wikipedia.org/wiki/National_Instruments
http://www.ni.com/product-documentation/6609/en/

Chapter 22

Lattice C

The Lattice C Compiler was released in June 1982 by
Lifeboat Associates and was the first C compiler for the
IBM Personal Computer.[1] The compiler sold for $500
and would run on PC DOS or MS-DOS. The hard-
ware requirements were 96KB of RAM and two floppy
drives.[2] It was ported to many other platforms, such as
mainframes (MVS), minicomputers (VMS), workstations
(UNIX), OS/2, the Commodore Amiga, Atari ST and the
Sinclair QL.
The compiler was subsequently repackaged by Microsoft
under a distribution agreement as Microsoft C version
2.0.[3] Microsoft developed their own C compiler that was
released in April 1985 as Microsoft C Compiler 3.0.[4] Lat-
tice was purchased by SAS Institute in 1987. After this,
support for other platforms dwindled until compiler devel-
opment ceased for all platforms except IBM mainframes.
The product is still available in versions that run on other
platforms, but these are cross compilers that only produce
mainframe code.
Some of the early 1982 commercial software for the IBM
PC was ported from CP/M (where it was written for the
BDS C subset of the C language) to MS-DOS using Lat-
tice C including Perfect Writer, PerfectCalc, PerfectSpeller
and PerfectFiler. This suite was bundled with the Seequa
Chameleon and Columbia Data Products.

• LMK, make tool

• LSE, screen editor

• TMN, text management utilities

22.1 Reception

In a 1983 review of nine C compilers for the IBM PC,
BYTE chose Lattice C as the best in the “superior qual-
ity, but expensive and unsuited to the beginner” category.
It cited the software’s “quick compile and execution times,
small incremental code, best documentation and consistent

reliability”.[5] PC Magazine that year similarly praised Lat-
tice C’s documentation and compile-time and runtime per-
formance, and stated that it was slightly superior to the CI-
C86 and c-systems C compilers.[2]

22.2 References
[1] “Software News”. InfoWorld. Vol. 4 no. 22. Palo Alto

CA: Popular Computing. June 7, 1982. p. 61. ISSN 0199-
6649. Lifeboat Associates’ new Lattice C Compiler for the
IBM Personal Computer produces relocatable machine code
in Intel’s 8086 object module format and takes advantage of
the 8086 instruction set.

[2] Hinsch, Hanno (July 4, 1983). “Is Lifeboat King of the
C’s?”. PC Magazine. Vol. 2 no. 2. Ziff-Davis Publishing.
pp. 527–533. ISSN 0888-8507.

[3] Clapp, Douglas (October 4, 1983). “Microsoft C Unveiled”.
PC Magazine. Vol. 2 no. 5. Ziff-Davis Publishing. pp.
503–508. ISSN 0888-8507.

[4] “Software”. ComputerWorld. Framingham, MA: CW Com-
munications. 19 (15): 71. April 15, 1985. ISSN 0010-
4841. Microsoft has announced an enhanced version of its
Microsoft C Compiler for the IBM Personal Computer… A
vendor spokesman said Version 3.0 is the first C compiler
developed internally by Microsoft.

[5] Phraner, Ralph A. (August 1983). “Nine C Compilers for
the IBM PC”. BYTE. pp. 134–168. Retrieved 20 October
2013.

22.3 External links
• DOS and OS/2 compiler at the Wayback Machine

(archived April 23, 2009)

41

https://en.wikipedia.org/wiki/Lifeboat_Associates
https://en.wikipedia.org/wiki/C_(programming_language)
https://en.wikipedia.org/wiki/Compiler
https://en.wikipedia.org/wiki/IBM_Personal_Computer
https://en.wikipedia.org/wiki/PC_DOS
https://en.wikipedia.org/wiki/MS-DOS
https://en.wikipedia.org/wiki/Mainframe_computer
https://en.wikipedia.org/wiki/MVS
https://en.wikipedia.org/wiki/Minicomputer
https://en.wikipedia.org/wiki/Virtual_Memory_System
https://en.wikipedia.org/wiki/Workstation
https://en.wikipedia.org/wiki/Unix
https://en.wikipedia.org/wiki/OS/2
https://en.wikipedia.org/wiki/Commodore_International
https://en.wikipedia.org/wiki/Amiga
https://en.wikipedia.org/wiki/Atari_ST
https://en.wikipedia.org/wiki/Sinclair_Research
https://en.wikipedia.org/wiki/Sinclair_QL
https://en.wikipedia.org/wiki/Microsoft
https://en.wikipedia.org/wiki/SAS_Institute
https://en.wikipedia.org/wiki/Cross-compilation
https://en.wikipedia.org/wiki/CP/M
https://en.wikipedia.org/wiki/BDS_C
https://en.wikipedia.org/wiki/Perfect_Writer
https://en.wikipedia.org/wiki/PerfectCalc
https://en.wikipedia.org/wiki/PerfectSpeller
https://en.wikipedia.org/wiki/PerfectFiler
https://en.wikipedia.org/wiki/Seequa_Chameleon
https://en.wikipedia.org/wiki/Seequa_Chameleon
https://en.wikipedia.org/wiki/Columbia_Data_Products
https://en.wikipedia.org/wiki/Make_(software)
https://en.wikipedia.org/wiki/BYTE
https://en.wikipedia.org/wiki/PC_Magazine
https://books.google.com/books?id=XDAEAAAAMBAJ&pg=PA61
https://en.wikipedia.org/wiki/International_Standard_Serial_Number
https://www.worldcat.org/issn/0199-6649
https://www.worldcat.org/issn/0199-6649
https://books.google.com/books?id=V2588uIxmAQC&pg=PA527
https://books.google.com/books?id=V2588uIxmAQC&pg=PA527
https://en.wikipedia.org/wiki/International_Standard_Serial_Number
https://www.worldcat.org/issn/0888-8507
https://books.google.com/books?id=qURs4j9vKn4C&pg=PA503
https://en.wikipedia.org/wiki/International_Standard_Serial_Number
https://www.worldcat.org/issn/0888-8507
https://books.google.com/books?id=XxS89r_AA_0C&pg=PA71
https://en.wikipedia.org/wiki/International_Standard_Serial_Number
https://www.worldcat.org/issn/0010-4841
https://www.worldcat.org/issn/0010-4841
https://archive.org/stream/byte-magazine-1983-08/1983_08_BYTE_08-08_The_C_Language#page/n135/mode/2up
https://archive.org/stream/byte-magazine-1983-08/1983_08_BYTE_08-08_The_C_Language#page/n135/mode/2up
https://web.archive.org/web/20090423134335/http://www.lattice.com/otherdos.htm
https://en.wikipedia.org/wiki/Wayback_Machine

Chapter 23

LCC (compiler)

LCC (“Local C Compiler” or “Little C Compiler”) is a
small, retargetable compiler for the ANSI C programming
language. Although its source code is available at no charge
for personal use,[2] it is not open-source or free software
according to the usual definitions because products derived
from LCC may not be sold.[1] It was developed by Chris
Fraser and David Hanson.

23.1 LCC

LCC is intended to be simple to understand and is well-
documented; its design is described in Fraser and Hanson’s
book A Retargetable C Compiler: Design and Implementa-
tion. The book includes most of the source code for version
3.6 of the compiler, which was written as a literate program
using noweb. As of July 2011 the current version of LCC
is 4.2, but much of the book still applies to this version.
The major change since the book was published is in the
code-generator interface, which is described in a separate
document.[3]

The source code for LCC is around 20,000 lines, which is
much smaller than many major compilers.[4] The Tiny C
Compiler is one of the few compilers smaller than LCC.
LCC can generate code for several processor architectures,
including Alpha, SPARC, MIPS, and x86; there is also an
LCC backend that generates Microsoft’s Common Interme-
diate Language.[5]

23.2 Projects incorporating LCC

23.2.1 Quake 3

id Software’s id Tech 3 engine relies on a modified version
of LCC to compile the source code of each game module
or third-party mod into bytecode targeting its virtual ma-
chine.[6] This means that modules are oblivious to the sys-
tem beyond the system calls and limited file system scope

offered by the engine, which is intended to reduce the threat
posed by malicious mod authors. Another consideration is
that games and mods written for the engine are portable
without recompilation; only the virtual machine needs to be
ported to new platforms in order to execute the modules.

23.2.2 lcc-win

lcc-win32 is an integrated development environment pack-
age for Microsoft Windows which includes a fork of LCC.
An amd64 counterpart named lcc-win64 exists, which has
been available since April 15, 2012.[7]

23.2.3 Pelles C

Pelles C’s compiler is a heavily modified version of LCC
providing C11 support, amd64 support, and additional op-
timisation techniques such as inline expansion.[8]

23.2.4 Mathworks

For 32-bit Windows machines, Lcc is used as a default if
no other compiler is installed for Mathworks Matlab and
related products.[9]

23.3 License

LCC is free for personal use and may be redistributed with
attribution. LCC may not be sold for profit, but it may be
included with other software that is sold for profit.[1]

23.4 References
[1] “LCC License”. Retrieved 5 July 2011.

[2] “Official Github Repository”.

42

https://en.wikipedia.org/wiki/Retargetable_compiler
https://en.wikipedia.org/wiki/ANSI_C
https://en.wikipedia.org/wiki/Open-source
https://en.wikipedia.org/wiki/Free_software
https://en.wikipedia.org/wiki/Chris_Fraser
https://en.wikipedia.org/wiki/Chris_Fraser
https://en.wikipedia.org/wiki/David_Hanson_(computer_scientist)
https://en.wikipedia.org/wiki/Literate_programming
https://en.wikipedia.org/wiki/Noweb
https://en.wikipedia.org/wiki/Tiny_C_Compiler
https://en.wikipedia.org/wiki/Tiny_C_Compiler
https://en.wikipedia.org/wiki/DEC_Alpha
https://en.wikipedia.org/wiki/SPARC
https://en.wikipedia.org/wiki/MIPS_architecture
https://en.wikipedia.org/wiki/X86
https://en.wikipedia.org/wiki/Common_Intermediate_Language
https://en.wikipedia.org/wiki/Common_Intermediate_Language
https://en.wikipedia.org/wiki/Id_Software
https://en.wikipedia.org/wiki/Id_Tech_3
https://en.wikipedia.org/wiki/Game_engine
https://en.wikipedia.org/wiki/Mod_(video_gaming)
https://en.wikipedia.org/wiki/Bytecode
https://en.wikipedia.org/wiki/Virtual_machine
https://en.wikipedia.org/wiki/Virtual_machine
https://en.wikipedia.org/wiki/System_call
https://en.wikipedia.org/wiki/File_system
https://en.wikipedia.org/wiki/Software_portability
https://en.wikipedia.org/wiki/Porting
https://en.wikipedia.org/wiki/Integrated_development_environment
https://en.wikipedia.org/wiki/Microsoft_Windows
https://en.wikipedia.org/wiki/Software_fork
https://en.wikipedia.org/wiki/Amd64
https://en.wikipedia.org/wiki/Pelles_C
https://en.wikipedia.org/wiki/C11_(C_standard_revision)
https://en.wikipedia.org/wiki/Inline_expansion
https://en.wikipedia.org/wiki/Mathworks
https://en.wikipedia.org/wiki/Matlab
https://github.com/drh/lcc/blob/master/CPYRIGHT
https://github.com/drh/lcc

23.5. BIBLIOGRAPHY 43

[3] Fraser, Christopher W.; Hanson, David R. (July 2001). “The
lcc 4.x Code-Generation Interface” (PDF). Microsoft Re-
search. Technical Report MSR-TR-2001-64. Retrieved 5
July 2011.

[4] Sao-Jie Chen, Guang-Huei Lin, Pao-Ann Hsiung, Yu-Hen
Hu. “Hardware software co-design of a multimedia SOC
platform”. Section 5.6.1: LCC Compiler Infrastructure.

[5] Hanson, David R. (March 2004). “Lcc.NET: Targeting the
.NET Common Intermediate Language from Standard C”
(PDF). Microsoft Research. Retrieved 22 July 2012.

[6] “John Carmack’s .plan file, 24 July, 1999”.

[7] lcc-win: A Compiler system for Windows

[8] Pelles C Overview

[9] “Build MEX-Files”. Archived from the original on 14
September 2012. Retrieved 6 November 2013.

23.5 Bibliography
• Fraser, Christopher W.; Hanson, David R. (1995). A
Retargetable C Compiler: Design and Implementation.
Addison-Wesley. ISBN 0-8053-1670-1.

http://storage.webhop.net/documents/interface4.pdf
http://storage.webhop.net/documents/interface4.pdf
http://storage.webhop.net/documents/msil-spe.pdf
http://storage.webhop.net/documents/msil-spe.pdf
http://www.team5150.com/~andrew/carmack/johnc_plan_1999.html#d19990724
http://www.cs.virginia.edu/~lcc-win32/
http://www.smorgasbordet.com/pellesc/
https://web.archive.org/web/20120914063120/http://www.mathworks.com/help/matlab/matlab_external/building-mex-files.html
http://www.mathworks.com/help/matlab/matlab_external/building-mex-files.html
https://en.wikipedia.org/wiki/International_Standard_Book_Number
https://en.wikipedia.org/wiki/Special:BookSources/0-8053-1670-1

Chapter 24

Macintosh Programmer’s Workshop

Macintosh Programmer’s Workshop or MPW, is a
software development environment for the Classic Mac
OS operating system, written by Apple Computer. For
Macintosh developers, it was one of the primary tools for
building applications for System 7.x and Mac OS 8.x and
9.x. Initially MPW was available for purchase, but Ap-
ple made it a free download after it was superseded by
CodeWarrior. On Mac OS X it was replaced by the Project
Builder IDE, which eventually became Xcode.

24.1 Design

MPW provided a command line environment and tools, in-
cluding 68k and PowerPC assemblers as well as Pascal, C
and C++ compilers. The shell environment is somewhat
similar to Unix shells in design, but is designed around
the Macintosh’s character set and GUI, replacing the usual
terminal environment with a “worksheet” interface, allow-
ing the user to select and run arbitrary sections of a shell
script or to redo commands with no retyping. In addition,
command line tools were commonly provided with a some-
what standardized graphical interface named Commando
that provided limited access to the command line capabili-
ties of the program. The debuggers were not integrated into
MPW like most IDEs of today but the language compil-
ers supported the symbolic debugging information file for-
mat used by the debugger. MPW supported a source-level
debugger called SADE (Symbolic Application Debugging
Environment). SADE was not an MPW Tool, but ran as a
separate application with a user interface similar to MPW.
Apple’s compilers had some features that were not com-
mon on other platforms—for example, the Pascal com-
piler was object-oriented, while the C and C++ compil-
ers included support for length-prefixed strings (needed for
Pascal-oriented APIs).
Pascal was Apple’s original preferred language for Macin-
tosh software development,[1] and MPW was initially re-
leased with only Pascal support. A C compiler was re-

leased with MPW 2.0. The MPW C compiler was writ-
ten under contract for Apple by Greenhills.[2] In addition,
the original MPW C compiler was known for its casual and
frequently humorous error messages (“we already did this
function”),[3] as well as occasionally addressing users by
name.[4] These quirks were not carried on after the Pow-
erPC transition, when Apple replaced the originals with
compilers written by Symantec. Pascal support was no
longer provided by the mid-90s due to declining popular-
ity of the language.
MPW was always targeted to a professional audience and
was seldom used by hobbyist developers due to the consid-
erable price for the package; by the time it was made free-
ware it had long since been superseded by offerings from
Symantec and Metrowerks, as well as Apple’s own devel-
opment tools inherited from NeXT and distributed for free
with OS X. It was also occasionally available as a wrapper
environment for third-party compilers, a practice used by
both Metrowerks and Absoft among others. Apple has of-
ficially discontinued further development of MPW and the
last version of OS X to run it is 10.4 ‘Tiger’, the last one to
support the Classic environment. Apple maintained a web
site for the software long after its discontinuation, but that
site now redirects to the Xcode page.

24.2 MPW Shell

The MPW Shell featured redirection of output to files, and
to windows. If a file were open, the output would go to
the file and to the open window. This redirection of output
required significant patching out of the file system calls so
that tools need not do anything special to inherit this feature:
the MPW Shell did all of the work.
The MPW Shell command language was based on the Unix
csh language, but was extended to support the main features
of the Macintosh GUI. It had simple commands to create
menus, dialogs (prompts), and new shell windows. The cur-
sor could be controlled, and MPW scripts or tools could

44

https://en.wikipedia.org/wiki/Software
https://en.wikipedia.org/wiki/Classic_Mac_OS
https://en.wikipedia.org/wiki/Classic_Mac_OS
https://en.wikipedia.org/wiki/Operating_system
https://en.wikipedia.org/wiki/Apple_Computer
https://en.wikipedia.org/wiki/Apple_Macintosh
https://en.wikipedia.org/wiki/CodeWarrior
https://en.wikipedia.org/wiki/Mac_OS_X
https://en.wikipedia.org/wiki/Xcode
https://en.wikipedia.org/wiki/Command-line_interface
https://en.wikipedia.org/wiki/68k
https://en.wikipedia.org/wiki/Assembly_language
https://en.wikipedia.org/wiki/Pascal_(programming_language)
https://en.wikipedia.org/wiki/C_(programming_language)
https://en.wikipedia.org/wiki/C++
https://en.wikipedia.org/wiki/Compiler
https://en.wikipedia.org/wiki/Unix_shell
https://en.wikipedia.org/wiki/Graphical_user_interface
https://en.wikipedia.org/wiki/Debugger
https://en.wikipedia.org/wiki/Integrated_development_environment
https://en.wikipedia.org/wiki/String_(computer_science)#Length-prefixed
https://en.wikipedia.org/wiki/Metrowerks
https://en.wikipedia.org/wiki/Absoft_Fortran_Compilers
https://en.wikipedia.org/wiki/Redirection_(computing)
https://en.wikipedia.org/wiki/C_shell

24.4. WRITING MPW TOOLS 45

easily be attached to a menu item. Command key shortcuts
could be specified. Window size and location could be con-
trolled. These features were popular in commercial produc-
tion environments, where complicated build and packaging
processes were all controlled by elaborate scripts.
The shell had some important differences from its Unix
counterparts. For instance, the classic Mac OS had nothing
comparable to Unix fork(), so MPW tools were effectively
called as subroutines of the shell; only one could be running
at any one time, and tools could not themselves run other
tools. These limitations were the inspiration for the MacRe-
lix project, a “Unix-like system” for Classic Mac OS.[5]

24.2.1 Look and feel

Functionally, a worksheet is a cross between a text editor
document and an xterm window. Each worksheet window
is persistently bound to a file. The user may type anything
anywhere in the window, including commands, which can
be executed via the keyboard’s Enter key; command output
appears at the insertion point. Unlike an xterm window,
an MPW worksheet is always in visual editing mode and
can be freely reorganized by its user. Hence a worksheet
can be purely a command script or purely a text document
or a mixture of the two—an integrated document describ-
ing the history, maintenance procedures and test results of
a software project. The commercial BBEdit text editor re-
tains a feature it calls “shell worksheets” on Mac OS X. The
Emacs text editor provides shell buffers, a similar feature
that works across platforms.

24.3 Other tools

MPW included a version of make. Its syntax was conceptu-
ally similar to that of Unix make, but the MacRoman long
f character to indicate dependencies. More significantly,
since the limitations of the shell precluded the make pro-
gram from running tools itself, it had to work by compos-
ing a script of compile/link actions to be run, then deliv-
ering that to the shell for execution. While this was good
enough most of the time, it precluded makefiles that could
make on-the-fly decisions based on the results of a previous
action.
Although not implemented as MPW tools, the package also
came with several source-level debuggers through its his-
tory; SourceBug and SADE (Symbolic Application Debug-
ging Environment) were used on MC680x0 systems, while
the Power Mac Debugger (known during development as
R2Db[6]) provided both local and remote debugging ser-
vices for PowerPC systems, the latter by using a server pro-
gram known as a “debugger nub” on the computer being

debugged.

24.4 Writing MPW tools

MPW included a set of standard C libraries sufficient for
developers to build their own MPW tools. Many Unix util-
ities could be ported with little change. One point of diffi-
culty was the Mac OS newline convention, which was dif-
ferent from Unix. Another was the pathname separator, “:”
in Mac OS, but many Unix utilities assumed “/”. Many Unix
utilities also assumed pathnames would not have embedded
spaces, a common practice on Macs.
For a number of years, the GNU toolchain included porta-
bility support for MPW as part of libiberty. This was used
to support MPW-hosted cross-compilers used by General
Magic and several other developers.

24.5 History

MPW was started in late 1985 by Rick Meyers, Jeff Parrish,
and Dan Smith (now Dan Keller). It was going to be called
the Macintosh Programmer’s System, or MPS. (Notice that
coincidentally the three last names start with MPS.) ‘MPS ‘
has always been the creator signature of the MPW Shell as
a result of this. Since MPW was to be the successor to the
Lisa Workshop, they decided to rename it the Macintosh
Programmer’s Workshop. Before MPW, Mac applications
had to be cross-developed on a Lisa.
The MPW Pascal compiler was descended from the Lisa
Pascal compiler. Apple’s Larry Tesler worked with Niklaus
Wirth to come up with Object Pascal extensions which Ken
Doyle incorporated in one of the last versions of the Lisa
Pascal compiler. This enabled MacApp.
Early contributors included Rick Meyers (project lead and
MPW Shell command interpreter), Jeff Parrish (MPW
Shell editor), Dan Smith (MPW Shell commands), Ira
Ruben (assembler and many of the tools including Backup,
PasMat, and more), Fred Forsman (Make, Print, SADE,
and assembler macro processor), Al Hoffman (Pascal com-
piler) Roger Lawrence (Pascal and C compilers, includ-
ing the error messages), Ken Friedenbach (linker), Johan
Strandberg (Rez, DeRez, RezDet), Steve Hartwell (C li-
braries), and Dan Allen (MacsBug, editor). The Apple Nu-
merics Group also contributed math libraries.
MPW 1.0 was completed on September 24, 1986. A shell
memory leak was fixed on October 10, 1986 and MPW
1.0.1 was born. MPW 2.0 was completed on July 20, 1987,
and MPW 3.0 was done November 30, 1988. MPW 3.1,
3.2, and 3.3 came in the next few years. MPW 3.4 was

https://en.wikipedia.org/wiki/Fork_(operating_system)
https://en.wikipedia.org/wiki/Text_editor
https://en.wikipedia.org/wiki/Xterm
https://en.wikipedia.org/wiki/BBEdit
https://en.wikipedia.org/wiki/Emacs
https://en.wikipedia.org/wiki/Make_(software)
https://en.wikipedia.org/wiki/MacRoman
https://en.wikipedia.org/wiki/F_with_hook
https://en.wikipedia.org/wiki/F_with_hook
https://en.wikipedia.org/wiki/Debugger
https://en.wikipedia.org/wiki/Newline
https://en.wikipedia.org/wiki/Path_(computing)
https://en.wikipedia.org/wiki/GNU_toolchain
https://en.wikipedia.org/wiki/Libiberty
https://en.wikipedia.org/wiki/General_Magic
https://en.wikipedia.org/wiki/General_Magic
https://en.wikipedia.org/wiki/Creator_signature
https://en.wikipedia.org/wiki/Larry_Tesler
https://en.wikipedia.org/wiki/Niklaus_Wirth
https://en.wikipedia.org/wiki/Niklaus_Wirth
https://en.wikipedia.org/wiki/Object_Pascal
https://en.wikipedia.org/wiki/MacApp
https://en.wikipedia.org/wiki/Memory_leak

46 CHAPTER 24. MACINTOSH PROGRAMMER’S WORKSHOP

completed July 14, 1995, and MPW 3.5 was done Decem-
ber 17, 1999. Work was being done on MPW 3.6 when
work was halted in late 2001.
During MPW’s twilight years, Greg Branche supported
MPW unofficially through the Apple MPW-dev mailing
list. The list, and the lists.apple.com server that hosted it,
was planned to be shut down January 17, 2014,[7] a decision
that was later reversed.[8]

24.6 Legacy

MPW can still be used to develop for Mac OS X, but sup-
port is limited to Carbon applications for PowerPC-based
computers. To develop Mac OS X applications based on
other technologies, one must use either Xcode or another
OS X compatible development environment. MPW also
included a version control system called Projector; this has
been superseded by modern version control systems and is
no longer supported in Mac OS X.

24.7 See also
• Jasik debugger

• Comparison of computer shells

24.8 References
[1] Webster, Bruce (February 1986). “Programming Tool and

the Atari ST”. BYTE. p. 331. Retrieved 9 May 2015.

[2] “Re: [Humor ] Old MPW C error messages”.

[3] MPW C Error Messages, May 15, 1994 – Robert Lentz

[4] “Re: Will the last one to leave please turn off the lights?”.

[5] “MacRelix Origins”.

[6] Short for RISC 2-machine Debugger; http://www.mactech.
com/articles/develop/issue_17/Falk_Topping_final.html

[7] “Will the last one to leave please turn off the lights?”.

[8] “Reprieve!”.

24.9 External links
• Official MPW website at the Wayback Machine

(archived May 14, 2011)

• MPW 3.0 General Information

• MPW 3.5 Download from Apple FTP Mirror &
Updates

• MPW fan/reference page

https://en.wikipedia.org/wiki/Mac_OS_X
https://en.wikipedia.org/wiki/Carbon_(computing)
https://en.wikipedia.org/wiki/PowerPC
https://en.wikipedia.org/wiki/Xcode
https://en.wikipedia.org/wiki/Version_control
https://en.wikipedia.org/wiki/Version_control_systems
https://en.wikipedia.org/wiki/Jasik_debugger
https://en.wikipedia.org/wiki/Comparison_of_computer_shells
https://archive.org/stream/byte-magazine-1986-02/1986_02_BYTE_11-02_Text_Processing#page/n343/mode/2up
https://archive.org/stream/byte-magazine-1986-02/1986_02_BYTE_11-02_Text_Processing#page/n343/mode/2up
http://lists.apple.com/archives/MPW-Dev/2005/May/msg00003.html
http://www.ralentz.com/old/mac/humor/mpw-c-errors.html
http://lists.apple.com/archives/mpw-dev/2014/Jan/msg00007.html
http://www.metamage.com/text/relix/origins.html
http://www.mactech.com/articles/develop/issue_17/Falk_Topping_final.html
http://www.mactech.com/articles/develop/issue_17/Falk_Topping_final.html
http://lists.apple.com/archives/mpw-dev/2014/Jan/msg00000.html
http://lists.apple.com/archives/mpw-dev/2014/Jan/msg00014.html
https://web.archive.org/web/20110514011858/http://developer.apple.com/tools/mpw-tools/
https://en.wikipedia.org/wiki/Wayback_Machine
http://support.apple.com/kb/TA39367
http://staticky.com/mirrors/ftp.apple.com/developer/Tool_Chest/Core_Mac_OS_Tools/MPW_etc./MPW-GM_Images/
http://staticky.com/mirrors/ftp.apple.com/developer/Tool_Chest/Core_Mac_OS_Tools/MPW_Website_Downloads/
http://www.geek-central.gen.nz/MPW/intro.html

Chapter 25

Megamax C

Megamax C is a K&R implementation of C for the Atari
ST, Apple IIgs, and Macintosh computers. Sold by Mega-
max, Inc., based in Richardson, Texas,[1] the package in-
cludes a one-pass compiler, linker, editor, resource con-
struction kit, and documentation.[1] In the early days of the
Atari ST, Megamax C was the primary competitor to the
Alcyon C compiler from Digital Research which was in-
cluded in the official developer kit from Atari. According
to a review inAnticmagazine, Megamax C compiled a small
benchmark program six times faster than Digital Research’s
compiler.[1]

Megamax C was written by Michael Bunnell with Eric
Parker providing the linker and most of the standard library.
A later version of the compiler was renamed Laser C, while
the company remained Megamax.[2]

25.1 References
[1] Fleishman, Mike (September 1986). “Megama C Review”.

Antic. 5 (5).

[2] Darek, Mihocka (November 1988). “Review: Laser C
(Megamax, Inc.)”. ST-Log (25): 78.

47

https://en.wikipedia.org/wiki/K&R_C
https://en.wikipedia.org/wiki/Atari_ST
https://en.wikipedia.org/wiki/Atari_ST
https://en.wikipedia.org/wiki/Apple_IIgs
https://en.wikipedia.org/wiki/One-pass_compiler
https://en.wikipedia.org/wiki/Digital_Research
https://en.wikipedia.org/wiki/Antic
http://www.atarimagazines.com/v5n5/megamaxc.html
http://www.atarimagazines.com/st-log/issue25/78_1_LASER_C.php
http://www.atarimagazines.com/st-log/issue25/78_1_LASER_C.php

Chapter 26

MinGW

MinGW (Minimalist GNU for Windows), formerly
mingw32, is a free and open source software development
environment for creating Microsoft Windows applications.
It includes a port of the GNU Compiler Collection (GCC),
GNU Binutils for Windows (assembler, linker, archive
manager), a set of freely distributable Windows specific
header files and static import libraries which enable the use
of the Windows API, a Windows native build of the GNU
Project’s GNU Debugger, and miscellaneous utilities.
MinGW does not rely on third-party C runtime dynamic-
link library (DLL) files, and because the runtime libraries
are not distributed using the GNU General Public License
(GPL), it is not necessary to distribute the source code with
the programs produced, unless a GPL library is used else-
where in the program.[2]

MinGW can be run either on the native Microsoft Windows
platform, cross-hosted on Linux (or other Unix), or “cross-
native” on Cygwin.
An alternative called MinGW-w64 was created by a differ-
ent author to include several new APIs and provide 64-bit
support.

26.1 History

MinGW was originally called mingw32 (Minimalist GNU
for W32), following the GNU convention whereby Win-
dows is shortened as “W32”.[3][4] The numbers were
dropped in order to avoid the implication that it would be
limited to producing 32-bit binaries. Colin Peters authored
the initial release in 1998, consisting only of a Cygwin port
of GCC.[5][6] Jan-Jaap van der Heijden created a Windows-
native port of GCC and added binutils and make.[5][6]
Mumit Khan later took over development, adding more
Windows-specific features to the package, including the
Windows system headers by Anders Norlander.[5][6] In
2000, the project was moved to SourceForge.net in order
to solicit more assistance from the community and central-
ize its development.[5][6]

MinGW was selected as Project of the Month at
SourceForge.net for September 2005.[6]

In the last quarter of 2013 a new project was started,[7]
MSYS2 together with 32-bit and 64-bit MinGW packages.
This project was created to keep track with newer advances
of the Cygwin project and the fact that the original MSYS
was not able to keep up with Cygwin. MSYS2 is an in-
dependent rewrite of MSYS, based on modern Cygwin
(POSIX compatibility layer) and MinGW-w64 with the aim
of better interoperability with native Windows software. It
uses Arch Linux’s Pacman as the package manager.

26.2 Programming language sup-
port

Most languages supported by GCC are supported on the
MinGW port as well. These include C, C++, Objective-
C, Objective-C++, Fortran and Ada. The GCC runtime li-
braries are used (libstdc++ for C++, libgfortran for Fortran,
etc.).
MinGW links by default to the Windows OS component
library MSVCRT, which is the C library that Visual C ver-
sion 6.0 linked to (the initial target was CRTDLL), which
was released in 1998 and therefore does not include sup-
port for C99 features, or even all of C89. While targeting
MSVCRT yields programs that require no additional run-
time redistributables to be installed, the lack of support
for C99 has caused porting problems, particularly where
printf-style conversion specifiers are concerned. These is-
sues have been partially mitigated by the implementation of
a C99 compatibility library, libmingwex, but the extensive
work required is far from complete and may never be fully
realized.[8] MinGW-w64 has resolved these issues, and pro-
vides fully POSIX compliant printf functionality.

48

https://en.wikipedia.org/wiki/Free_software
https://en.wikipedia.org/wiki/Open-source_software
https://en.wikipedia.org/wiki/Software_development
https://en.wikipedia.org/wiki/Microsoft_Windows
https://en.wikipedia.org/wiki/Porting
https://en.wikipedia.org/wiki/GNU_Compiler_Collection
https://en.wikipedia.org/wiki/GNU_Binutils
https://en.wikipedia.org/wiki/Assembler_(computing)
https://en.wikipedia.org/wiki/Linker_(computing)
https://en.wikipedia.org/wiki/Archive_file
https://en.wikipedia.org/wiki/Archive_file
https://en.wikipedia.org/wiki/Header_file
https://en.wikipedia.org/wiki/Static_library
https://en.wikipedia.org/wiki/Windows_API
https://en.wikipedia.org/wiki/GNU_Project
https://en.wikipedia.org/wiki/GNU_Project
https://en.wikipedia.org/wiki/GNU_Debugger
https://en.wikipedia.org/wiki/Third-party_software_component
https://en.wikipedia.org/wiki/C_(programming_language)
https://en.wikipedia.org/wiki/Runtime_library
https://en.wikipedia.org/wiki/Dynamic-link_library
https://en.wikipedia.org/wiki/Dynamic-link_library
https://en.wikipedia.org/wiki/GNU_General_Public_License
https://en.wikipedia.org/wiki/Source_code
https://en.wikipedia.org/wiki/Linux
https://en.wikipedia.org/wiki/Cygwin
https://en.wikipedia.org/wiki/MinGW#MinGW-w64
https://en.wikipedia.org/wiki/Application_programming_interface
https://en.wikipedia.org/wiki/64-bit_support
https://en.wikipedia.org/wiki/64-bit_support
https://en.wikipedia.org/wiki/GNU_Project
https://en.wikipedia.org/wiki/32-bit_application
https://en.wikipedia.org/wiki/Cygwin
https://en.wikipedia.org/wiki/GNU_Compiler_Collection
https://en.wikipedia.org/wiki/Binutils
https://en.wikipedia.org/wiki/Make_(software)
https://en.wikipedia.org/wiki/SourceForge.net
https://en.wikipedia.org/wiki/SourceForge.net
https://en.wikipedia.org/wiki/Microsoft_Windows_library_files#MSVCRT.DLL_and_MSVCPP.DLL
https://en.wikipedia.org/wiki/Visual_C++
https://en.wikipedia.org/wiki/C99
https://en.wikipedia.org/wiki/ANSI_C
https://en.wikipedia.org/wiki/Printf
https://en.wikipedia.org/wiki/MinGW#MinGW-w64

26.5. MINGW-W64 49

26.3 Components

The MinGW project maintains and distributes a number
of different core components and supplementary packages,
including various ports of the GNU toolchain, such as
GCC and binutils, translated into equivalent packages.[9][10]
These utilities can be used from the Windows command
line or integrated into an IDE. Packages may be installed
using the command line via mingw-get.[11]

MinGW supports dynamic libraries named according to the
.lib and .dll conventions, as well as static li-
braries following the lib.a naming convention com-
mon on Unix and Unix-like systems.
In addition, a component of MinGW known as MSYS (min-
imal system) provides Windows ports of a lightweight Unix-
like shell environment including rxvt and a selection of
POSIX tools sufficient to enable autoconf scripts to run,[12]
but it does not provide a C compiler or a case-sensitive file
system.[13]

mingwPORTs are user contributed additions to the MinGW
software collection. Rather than providing these “add-ons”
as precompiled binary packages, they are supplied in the
form of interactive Bourne shell scripts, which guide the end
user through the process of automatically downloading and
patching original source code, then building and installing
it. Users who wish to build any application from a mingw-
PORT must first install both MinGW and MSYS.[14]

The implementation of Windows system headers and static
import libraries are released under a permissive license,[15]
while the GNU ports are provided under the GNU General
Public License. Binary downloads of both the complete
MSYS package and individual MinGW GNU utilities are
available from the MinGW site.

26.4 Comparison with Cygwin

MinGW was forked from version 1.3.3 of Cygwin.[5] Al-
though both Cygwin and MinGW can be used to port Unix
software to Windows, they have different approaches:[16]
Cygwin aims to provide a complete POSIX layer compris-
ing a full implementation of all major Unix system calls
and libraries. Compatibility is considered higher priority
than performance. On the other hand, MinGW’s priori-
ties are simplicity and performance. As such, it does not
provide certain POSIX APIs which cannot easily be imple-
mented using the Windows API, such as fork(), mmap()
and ioctl().[16] Applications written using a cross-platform
library that has itself been ported to MinGW, such as SDL,
wxWidgets, Qt, or GTK+, will usually compile as easily in
MinGW as they would in Cygwin.

Windows programs written with Cygwin run on top of
a copylefted compatibility DLL that must be distributed
with the program, along with the program’s source code.
MinGW does not require a compatibility layer, since
MinGW-based programs are compiled with direct calls to
Windows APIs.
The combination of MinGW and MSYS provides a small,
self-contained environment that can be loaded onto remov-
able media without leaving entries in the registry or files on
the computer. Cygwin Portable provides a similar feature
that is far more robust.
It is also possible to cross-compile Windows applications
with MinGW-GCC under POSIX systems. This means that
developers do not need a Windows installation with MSYS
to compile software that will run on Windows with or with-
out Cygwin.

26.5 MinGW-w64

In 2005, MinGW-w64, was created by OneVision Soft-
ware under clean room design principles, since the origi-
nal MinGW project was not prompt on updating its code
base, including the inclusion of several key new APIs and
the much needed 64-bit support. In 2008, OneVision then
donated the code to Kai Tietz, one of its lead develop-
ers, under the condition that it remain open source.[18] It
was first submitted to the original MinGW project, but re-
fused under suspicion of using non-public or proprietary
information.[19] For many reasons, the lead developer and
co-founder of the MinGW-w64 project, Kai Tietz, decided
not to attempt further cooperation with MinGW.[20]

MinGW-w64 provides a more complete Win32 API
implementation,[21] including:

• better C99 support

• better POSIX Threads (pthreads) support (including
the possibility to enable C++11 thread-related func-
tionality in GCC’s libstdc++)

• GCC multilib, which allows users to install 32-bit and
64-bit libraries in parallel

• Unicode entry point (wmain/wWinMain)

• DDK (from ReactOS)

• DirectX (from Wine)

• Large file support

• Win64 support

https://en.wikipedia.org/wiki/GNU_toolchain
https://en.wikipedia.org/wiki/GNU_Compiler_Collection
https://en.wikipedia.org/wiki/Binutils
https://en.wikipedia.org/wiki/Windows_command_line
https://en.wikipedia.org/wiki/Windows_command_line
https://en.wikipedia.org/wiki/Integrated_development_environment
https://en.wikipedia.org/wiki/Shell_(computer_science)
https://en.wikipedia.org/wiki/Rxvt
https://en.wikipedia.org/wiki/POSIX
https://en.wikipedia.org/wiki/Autoconf
https://en.wikipedia.org/wiki/Bourne_shell
https://en.wikipedia.org/wiki/Permissive_license
https://en.wikipedia.org/wiki/GNU_General_Public_License
https://en.wikipedia.org/wiki/GNU_General_Public_License
https://en.wikipedia.org/wiki/Cygwin
https://en.wikipedia.org/wiki/POSIX
https://en.wikipedia.org/wiki/POSIX
https://en.wikipedia.org/wiki/Fork_(operating_system)
https://en.wikipedia.org/wiki/Mmap
https://en.wikipedia.org/wiki/Ioctl
https://en.wikipedia.org/wiki/Cross-platform
https://en.wikipedia.org/wiki/Simple_DirectMedia_Layer
https://en.wikipedia.org/wiki/WxWidgets
https://en.wikipedia.org/wiki/Qt_(toolkit)
https://en.wikipedia.org/wiki/GTK+
https://en.wikipedia.org/wiki/Copyleft
https://en.wikipedia.org/wiki/Microsoft_Dynamic_Link_Library
https://en.wikipedia.org/wiki/Compatibility_layer
https://en.wikipedia.org/wiki/Windows_Registry
https://en.wikipedia.org/wiki/Cross_compiler
http://mingw-w64.org/
https://en.wikipedia.org/wiki/Clean_room_design
https://en.wikipedia.org/wiki/C99
https://en.wikipedia.org/wiki/POSIX_Threads
https://en.wikipedia.org/wiki/C++11
https://en.wikipedia.org/wiki/Libstdc++
https://en.wikipedia.org/wiki/Unicode_in_Microsoft_Windows
https://en.wikipedia.org/wiki/Windows_Driver_Kit
https://en.wikipedia.org/wiki/ReactOS
https://en.wikipedia.org/wiki/DirectX
https://en.wikipedia.org/wiki/Wine_(software)
https://en.wikipedia.org/wiki/Large_file_support
https://en.wikipedia.org/wiki/Win64

50 CHAPTER 26. MINGW

• Some useful tools such as gendef (an improved ver-
sion of MinGW’s pexports utility), and widl (an IDL
compiler, a free replacement for MIDL).

Additionally, the MinGW-w64 project maintains
winpthreads, a wrapper library similar to pthreads-
win32, with the main difference that it allows GCC to use
it as a threads library resulting in functional C++11 thread
libraries , , and .

26.6 See also
• UnxUtils

• DJGPP

• Watcom C/C++ compiler

• Interix

• Tiny C Compiler

• GnuWin32

26.7 References
[1] “Recent Project News”. mingw.org.

[2] “(MinGW on) MinGW”. MinGW.org/wiki. 2008-07-07.
Retrieved 2013-10-16.

[3] “GNU Coding Standards”. gnu.org. Free Software Founda-
tion. April 27, 2013. 5.5 Portability between System Types.
Retrieved July 1, 2013.

[4] Stallman, Richard (2000-09-18). “Libtool Re: Naming a
project gnu-win32?”. libtool (Mailing list). Retrieved 2013-
05-21.

[5] “(MinGW’s) History”. MinGW.org. Retrieved 2012-07-09.

[6] “(sourceforge’s) Project of the Month”. SourceForge.net.
2005-08-31. Retrieved 2012-07-09.

[7] “How are msys, msys2, and msysgit related to each other?”.
stackoverflow.com. Retrieved 2015-04-01.

[8] “(MinGW And) C99”. MinGW.org/wiki. 2010-06-21.

[9] “(MinGW) FAQ”. MinGW.org. Retrieved 2012-07-09.

[10] “MinGW – Minimalist GNU for Windows”. Source-
forge.net. Retrieved 2012-07-09.

[11] “MinGW Command Line Interface Installer”. Retrieved 14
June 2012.

[12] “(wiki:) MSYS”. MinGW.org. Retrieved 2016-02-18.

[13] “(wiki:) MSYS”. MinGW.org. Retrieved 2016-02-18. A
common misunderstanding is MSYS is “UNIX on Win-
dows”, MSYS by itself does not contain a compiler or a C
library, […] nor does it provide any UNIX specific function-
ality like case-sensitive filenames.

[14] “(wiki:) mingwPORT”. MinGW.org. Retrieved 2012-07-
09.

[15] “(MinGW) Licensing Terms”. MinGW.org. Retrieved
2012-07-09.

[16] “(MinGW:) About Cygwin”. MinGW.org. Retrieved 2012-
07-09.

[17] “MinGW-w64 – … (directory listing releases)”. mingw-
w64.org. Retrieved 2016-11-27.

[18] “(MinGW-w64) History”. MinGW-w64 Wiki. Retrieved
2016-02-18.

[19] Marshall, Keith (19 July 2009). “Re: Harmonizing mingwrt
/ w32api with mingw-w64”. MinGW-dvlpr (Mailing list).
Retrieved 12 June 2014. However, we would require a for-
mal audit of mingw-64 code, to ensure conformance with
our requirements for truly open documentation of sources,
before [merge of mingw-w64] could be completed.

[20] Tietz, Kai (20 July 2014). “Re: Harmonizing mingwrt /
w32api with mingw-w64”. MinGW-dvlpr (Mailing list). Re-
trieved 12 June 2014.

[21] “MinGW-w64”. MinGW-w64.org. Retrieved 30 May
2013.

26.8 External links
• Official website

• MinGW on SourceForge.net

• “MSYS2 installer”. github.io. Retrieved 2016-02-18.

https://en.wikipedia.org/wiki/MIDL
https://en.wikipedia.org/wiki/Wrapper_library
https://en.wikipedia.org/wiki/UnxUtils
https://en.wikipedia.org/wiki/DJGPP
https://en.wikipedia.org/wiki/Watcom_C/C++_compiler
https://en.wikipedia.org/wiki/Interix
https://en.wikipedia.org/wiki/Tiny_C_Compiler
https://en.wikipedia.org/wiki/GnuWin32
http://www.mingw.org/aggregator/sources/1
http://mingw.org/wiki/MinGW
https://www.gnu.org/prep/standards/html_node/System-Portability.html#System-Portability
https://en.wikipedia.org/wiki/Richard_Stallman
https://lists.gnu.org/archive/html/libtool/2000-09/msg00000.html
https://lists.gnu.org/archive/html/libtool/2000-09/msg00000.html
http://mingw.org/history
https://sourceforge.net/blog/potm-2005-09/
https://stackoverflow.com/questions/25019057/how-are-msys-msys2-and-msysgit-related-to-each-other
http://mingw.org/wiki/C99
http://mingw.org/mingwfaq.shtml#faq-what
http://sourceforge.net/project/showfiles.php?group_id=2435
http://www.mingw.org/wiki/Getting_Started#toc2
http://www.mingw.org/wiki/MSYS
http://www.mingw.org/wiki/MSYS
http://www.mingw.org/wiki/mingwPORT
http://www.mingw.org/license
http://www.mingw.org/node/21
http://mingw-w64.org/doku.php/download
https://sourceforge.net/p/mingw-w64/wiki2/History/
http://sourceforge.net/p/mingw/mailman/message/23100595/
http://sourceforge.net/p/mingw/mailman/message/23100595/
http://sourceforge.net/p/mingw/mailman/message/23108552/
http://sourceforge.net/p/mingw/mailman/message/23108552/
http://mingw-w64.org/
http://mingw.org/
https://sourceforge.net/projects/mingw/
https://en.wikipedia.org/wiki/SourceForge
https://msys2.github.io/

Chapter 27

Norcroft C compiler

The Norcroft C compiler (also referred to as the Norcroft
compiler suite) in computing is a portable set of C/C++
programming tools written by Codemist, available for a
wide range of processor architectures.[1]

Norcroft C was developed by Codemist, established in
November 1987[2] by a group of academics from the
University of Cambridge and University of Bath;[3][4]
Arthur Norman, Alan Mycroft and John Fitch. Develop-
ment took place from at least 1985;[5][6] the company was
dissolved in May 2016.[2] The name Norcroft is derived
from the original authors’ surnames.[7]

27.1 Supported architectures

27.1.1 Acorn C/C++

Acorn C/C++ was released for the RISC OS operating
system, developed in collaboration with Acorn Comput-
ers.[1][8]

27.1.2 INMOS Transputer C Compiler

This compiler for the INMOS Transputer was developed in
collaboration with Perihelion Software.[8]

27.1.3 Cambridge Consultants XAP

This compiler for Cambridge Consultants’ XAP processor
is another Norcroft compiler.[8]

27.2 References
[1] “Interview with Ian Johnson”. CAUGers. ACCU. Retrieved

2011-06-30. Acorn began work on ANSI C compilers
around 1987. C release 3 was made in 1989, and was fol-
lowed by Desktop C and Desktop Assembler in 1991. The

development of the compiler was a joint venture between
Norcroft (at the time Arthur Norman and Alan Mycroft–two
academics from Cambridge University Computing Labs)
and the PLG at Acorn. Sources were regularly exchanged
between both parties but, generally, Norcroft were respon-
sible for adherence to the emerging ANSI standard, whilst
Acorn concentrated on the RISC OS specifics of the C li-
brary and on common subexpression elimination, register al-
location and peephole optimisation for the ARM.

[2] “Officers – Codemist Limited, Company number
02197915”. Companies House. Retrieved 2016-09-
07.

[3] “Codemist Ltd”. Bath, UK: Codemist. 2010. Retrieved
2011-10-21. Codemist is owned and operated by a group
of university academics from Bath and Cambridge.

[4] Alan Mycroft (April 29, 1988). “Query about C compil-
ers on IBM 370s.”. Newsgroup: comp.lang.c. Usenet:
997@ima.ISC.COM. Retrieved June 30, 2011.

[5] “John fitch”. LinkedIn. Retrieved 2016-09-07.

[6] “Codemist Compilers / Norcroft”. Codemist. 2010-08-22.
Retrieved 2016-09-07.

[7] Mogensen, Torben (2011-05-27). “Hindbærtærte” [Rasp-
berry Tart] (in Danish). Version2. Retrieved 2011-07-12.
[…] Norcroft Compiler (navnet er en sammentrækning af
Norman og Mycroft) […]

[8] “Codemist Compilers / Norcroft”. Bath, UK: Codemist Ltd.
2010. Retrieved 2011-10-21. We have created C compilers
for a range of computers, from mainframes to embedded
special purpose chips. […] the following partial list will give
an idea of the range of our output. Acorn Computers ARM
C Compiler. This is the original ANSI C compiler known as
Norcroft C.

27.3 External links

• Norcroft C Compiler at the Codemist website

51

https://en.wikipedia.org/wiki/Computing
https://en.wikipedia.org/wiki/C_(programming_language)
https://en.wikipedia.org/wiki/C++
https://en.wikipedia.org/wiki/Programming_tool
https://en.wikipedia.org/wiki/Codemist
https://en.wikipedia.org/wiki/University_of_Cambridge
https://en.wikipedia.org/wiki/University_of_Bath
https://en.wikipedia.org/wiki/Arthur_Charles_Norman
https://en.wikipedia.org/wiki/Alan_Mycroft
https://en.wikipedia.org/wiki/John_Fitch_(computer_scientist)
https://en.wikipedia.org/wiki/Acorn_C/C++
https://en.wikipedia.org/wiki/RISC_OS
https://en.wikipedia.org/wiki/Acorn_Computers
https://en.wikipedia.org/wiki/Acorn_Computers
https://en.wikipedia.org/wiki/INMOS_Transputer
https://en.wikipedia.org/wiki/Perihelion_Software
https://en.wikipedia.org/wiki/Cambridge_Consultants
https://en.wikipedia.org/wiki/XAP_processor
http://www.accu.informika.ru/acornsig/public/caugers/volume2/issue1/ianjohnson.html
https://en.wikipedia.org/wiki/ACCU_(organisation)
https://beta.companieshouse.gov.uk/company/02197915/officers
https://beta.companieshouse.gov.uk/company/02197915/officers
https://en.wikipedia.org/wiki/Companies_House
http://codemist.co.uk/index.html
http://groups.google.com/group/comp.lang.c/msg/69ab873f6a25ce91
http://groups.google.com/group/comp.lang.c/msg/69ab873f6a25ce91
https://en.wikipedia.org/wiki/Usenet_newsgroup
news:comp.lang.c
https://en.wikipedia.org/wiki/Usenet
news:997@ima.isc.com
https://uk.linkedin.com/in/john-fitch-a656524
https://en.wikipedia.org/wiki/LinkedIn
http://www.codemist.co.uk/ncc/index.html
http://www.version2.dk/blog/hindbaertaerte-19250
http://www.version2.dk/blog/hindbaertaerte-19250
http://www.codemist.co.uk/ncc/index.html
http://www.codemist.co.uk/ncc/index.html
http://www.codemist.co.uk/index.html

52 CHAPTER 27. NORCROFT C COMPILER

• C/C++ Development Suite at iyonix.com at the
Wayback Machine (archived May 14, 2008)

https://web.archive.org/web/20080514205123/
https://en.wikipedia.org/wiki/Wayback_Machine

Chapter 28

Open64

Open64 is a discontinued, free, open source, optimizing
compiler for the Itanium and x86-64 microprocessor archi-
tectures. It derives from the SGI compilers for the MIPS
R10000 processor, called MIPSPro. It was initially released
in 2000 as GNU GPL software under the name Pro64. The
following year, University of Delaware adopted the project
and renamed the compiler to Open64. It now mostly serves
as a research platform for compiler and computer architec-
ture research groups. Open64 supports Fortran 77/95 and
C/C++, as well as the shared memory programming model
OpenMP. It can conduct high-quality interprocedural anal-
ysis, data-flow analysis, data dependence analysis, and array
region analysis.

28.1 The infrastructure

Its major components are the frontend for C/C++ (using
GCC) and Fortran 77/90 (using the CraySoft front-end and
libraries), Interprocedural analysis (IPA), loop nest opti-
mizer (LNO), global optimizer (WOPT), and code gener-
ator (CG). Despite being initially written for a single com-
puter architecture, Open64 has proven that it can generate
efficient code for CISC, RISC, and VLIW architectures,
including MIPS, x86, IA-64, ARM, and others.

28.2 Intermediate representation

A hierarchical intermediate representation (IR) with 5 main
levels is used in this compiler to serve as the common inter-
face among all the frontend and backend components. This
IR is named WHIRL.

28.3 Versions

The original version of Open64 that was released in 2002
was missing its very advanced software pipelining code gen-

erator, and had only a rudimentary code generator for Ita-
nium. The entire original MIPSPro compiler, with this code
generator, is available under a commercial license as the
Blackbird compiler from Reservoir Labs. The Showdown
Paper documents the code generator that was not included
in Open64. The very advanced compiler from Tilera, for
its 64-core TILE64 chip, is based on Blackbird.
Open64 exists in many forks, each of which has different
features and limitations. The “classic” Open64 branch is
the Open Research Compiler (ORC), which produces code
only for the Itanium (IA-64), and was funded by Intel. The
ORC effort ended in 2003, and the current official branch
(which originated from the Intel ORC project) is man-
aged by Hewlett Packard and the University of Delaware’s
Computer Architecture and Parallel Systems Laboratory
(CAPSL).
Other important branches include the compilers from
Tensilica and the AMD x86 Open64 Compiler Suite.[1]

Nvidia is also using an Open64 fork to optimize code in its
CUDA toolchain.[2]

28.3.1 Open64 releases

28.3.2 AMD x86 Open64 releases

28.4 Current development projects

Open64 is also used in a number of research projects,
such as the Unified Parallel C (UPC) and speculative
multithreading work at various universities. The 2010
Open64 Developers Forum describes projects done at
Absoft, AMD, Chinese Academy of Sciences, Fudan
University, HP, National Tsing Hua University, Nvidia,
Tensilica, Tsinghua University, and University of Hous-
ton.[3] The Chinese Academy of Sciences ported Open64
to the Loongson II platform.[4]

53

https://en.wikipedia.org/wiki/Free_software
https://en.wikipedia.org/wiki/Open_source
https://en.wikipedia.org/wiki/Compiler
https://en.wikipedia.org/wiki/Itanium
https://en.wikipedia.org/wiki/X86-64
https://en.wikipedia.org/wiki/Microprocessor
https://en.wikipedia.org/wiki/Silicon_Graphics
https://en.wikipedia.org/wiki/R10000
https://en.wikipedia.org/wiki/GNU_GPL
https://en.wikipedia.org/wiki/Computer_architecture
https://en.wikipedia.org/wiki/Computer_architecture
https://en.wikipedia.org/wiki/Fortran
https://en.wikipedia.org/wiki/Shared_memory_(interprocess_communication)
https://en.wikipedia.org/wiki/OpenMP
https://en.wikipedia.org/wiki/Interprocedural_optimization
https://en.wikipedia.org/wiki/Interprocedural_optimization
https://en.wikipedia.org/wiki/Data-flow_analysis
https://en.wikipedia.org/wiki/Dependence_analysis
https://en.wikipedia.org/wiki/Array_region_analysis
https://en.wikipedia.org/wiki/Array_region_analysis
https://en.wikipedia.org/wiki/Front_end_processor_(program)
https://en.wikipedia.org/wiki/GNU_Compiler_Collection
https://en.wikipedia.org/wiki/Interprocedural_optimization
https://en.wikipedia.org/wiki/Code_generator
https://en.wikipedia.org/wiki/Code_generator
https://en.wikipedia.org/wiki/Complex_instruction_set_computer
https://en.wikipedia.org/wiki/Reduced_instruction_set_computer
https://en.wikipedia.org/wiki/Very_long_instruction_word
https://en.wikipedia.org/wiki/MIPS_architecture
https://en.wikipedia.org/wiki/X86
https://en.wikipedia.org/wiki/Itanium
https://en.wikipedia.org/wiki/ARM_architecture
https://en.wikipedia.org/wiki/Intermediate_representation
https://en.wikipedia.org/wiki/Software_pipelining
http://portal.acm.org/citation.cfm?id=231385
http://portal.acm.org/citation.cfm?id=231385
https://en.wikipedia.org/wiki/Fork_(software_development)
https://en.wikipedia.org/wiki/Open_Research_Compiler
https://en.wikipedia.org/wiki/Intel
https://en.wikipedia.org/wiki/Hewlett_Packard
https://en.wikipedia.org/wiki/University_of_Delaware
https://en.wikipedia.org/wiki/Tensilica
https://en.wikipedia.org/wiki/AMD
https://en.wikipedia.org/wiki/Nvidia
https://en.wikipedia.org/wiki/CUDA
https://en.wikipedia.org/wiki/Unified_Parallel_C
https://en.wikipedia.org/wiki/Speculative_multithreading
https://en.wikipedia.org/wiki/Speculative_multithreading
https://en.wikipedia.org/wiki/Absoft_Fortran_Compilers
https://en.wikipedia.org/wiki/AMD
https://en.wikipedia.org/wiki/Chinese_Academy_of_Sciences
https://en.wikipedia.org/wiki/Fudan_University
https://en.wikipedia.org/wiki/Fudan_University
https://en.wikipedia.org/wiki/Hewlett-Packard
https://en.wikipedia.org/wiki/National_Tsing_Hua_University
https://en.wikipedia.org/wiki/Nvidia
https://en.wikipedia.org/wiki/Tensilica
https://en.wikipedia.org/wiki/Tsinghua_University
https://en.wikipedia.org/wiki/University_of_Houston
https://en.wikipedia.org/wiki/University_of_Houston
https://en.wikipedia.org/wiki/Chinese_Academy_of_Sciences
https://en.wikipedia.org/wiki/Loongson

54 CHAPTER 28. OPEN64

AMD has extended and productized Open64 with opti-
mizations designed for x86 multi-core processor advance-
ments and multi-threaded code development.[5] AMD sup-
ports Open64 as a complementary compiler to GCC.[6]

The University of Houston’s OpenUH project, which is
based on Open64, released a new version of its compiler
suite in November 2015. [7]

28.5 See also
• GNU Compiler Collection

• List of compilers

• GPGPU

28.6 References
[1] “x86 Open64 Compiler Suite”. AMD. Retrieved 12 Novem-

ber 2013.

[2] NVIDIA’s Experience with Open64

[3] 2010 Open64 Developers Forum, August 25, 2010

[4] Open64 on MIPS: porting and enhancing Open64 for
Loongson II

[5] Sweet Suite, blog posting by Nigel Dessau, AMD CMO,
June 22, 2009

[6] AMD Open64 download page

[7] OpenUH downloads page

28.7 External links
• Official website

• AMD Open64 page

• The Berkeley UPC-to-C translator

• OpenUH project at University of Houston

https://en.wikipedia.org/wiki/AMD
https://en.wikipedia.org/wiki/GNU_Compiler_Collection
https://en.wikipedia.org/wiki/GNU_Compiler_Collection
https://en.wikipedia.org/wiki/List_of_compilers
https://en.wikipedia.org/wiki/GPGPU
http://developer.amd.com/tools-and-sdks/cpu-development/x86-open64-compiler-suite/
https://en.wikipedia.org/wiki/AMD
http://www.capsl.udel.edu/conferences/open64/2008/Papers/101.doc
http://dynopt.ece.udel.edu/open64/program.shtml
http://www.capsl.udel.edu/conferences/open64/2009/Papers/102-Open64onMIPS2.pdf
http://www.capsl.udel.edu/conferences/open64/2009/Papers/102-Open64onMIPS2.pdf
http://blogs.amd.com/nigel-dessau/2009/06/22/sweet-suite/:
http://blogs.amd.com/nigel-dessau/2009/06/22/sweet-suite/:
http://developer.amd.com/tools/cpu-development/x86-open64-compiler-suite/
http://web.cs.uh.edu/~openuh/download/
http://www.open64.net/
http://developer.amd.com/tools/cpu-development/x86-open64-compiler-suite/
http://upc.nersc.gov/
http://www2.cs.uh.edu/~openuh/

Chapter 29

Oracle Developer Studio

Oracle Developer Studio, formerly namedOracle Solaris
Studio, Sun Studio, Sun WorkShop, Forte Developer,
and SunPro Compilers, is Oracle Corporation’s flagship
software development product for the Solaris and Linux
operating systems. It includes optimizing C, C++, and For-
tran compilers, libraries, and performance analysis and de-
bugging tools, for Solaris on SPARC and x86 platforms, and
Linux on x86/x64 platforms, including multi-core systems.
Oracle Developer Studio is downloadable and usable at no
charge; however, there are many security and functionality
patch updates which are only available with a support con-
tract from Oracle.[3]

Version 12.4 adds support for the C++11 language
standard.[4] All C++11 features are supported except for
concurrency and atomic operations, and user-defined liter-
als.

29.1 Languages

• C

• C++

• Fortran

29.2 Supported architectures

• SPARC

• i86pc (x86 and x86-64)

29.3 Components

The Oracle Developer software suite includes:

• C, C++, and Fortran compilers and support libraries

• dbx and frontends

• lint

• A NetBeans-based IDE

• Performance Analyzer[5]

• Thread analyzer

• Sun performance library

• Distributed make[6]

29.4 Compiler optimizations

A common optimizing backend is used for code generation.
A high-level intermediate representation called Sun IR is
used, and high-level optimizations done in the iropt (inter-
mediate representation optimizer) component are operated
at the Sun IR level. Major optimizations include:

• Copy propagation

• Constant folding and constant propagation

• Dead code elimination

• Interprocedural optimization analysis

• Loop optimizations

• Automatic parallelization

• Profile-guided optimization

• Scalar replacement

• Strength reduction

• Automatic vectorization, with -xvector=simd

55

https://en.wikipedia.org/wiki/Oracle_Corporation
https://en.wikipedia.org/wiki/Solaris_(operating_system)
https://en.wikipedia.org/wiki/Linux
https://en.wikipedia.org/wiki/Operating_system
https://en.wikipedia.org/wiki/Compiler
https://en.wikipedia.org/wiki/C++11
https://en.wikipedia.org/wiki/C_(programming_language)
https://en.wikipedia.org/wiki/C++
https://en.wikipedia.org/wiki/Fortran
https://en.wikipedia.org/wiki/SPARC
https://en.wikipedia.org/wiki/X86
https://en.wikipedia.org/wiki/X86-64
https://en.wikipedia.org/wiki/Dbx_(debugger)
https://en.wikipedia.org/wiki/Lint_(software)
https://en.wikipedia.org/wiki/NetBeans
https://en.wikipedia.org/wiki/Interactive_development_environment
https://en.wikipedia.org/wiki/Performance_Analyzer
https://en.wikipedia.org/wiki/Compiler_optimization
https://en.wikipedia.org/wiki/Sun_IR
https://en.wikipedia.org/wiki/Copy_propagation
https://en.wikipedia.org/wiki/Constant_folding
https://en.wikipedia.org/wiki/Dead_code_elimination
https://en.wikipedia.org/wiki/Interprocedural_optimization
https://en.wikipedia.org/wiki/Loop_optimization
https://en.wikipedia.org/wiki/Automatic_parallelization
https://en.wikipedia.org/wiki/Profile-guided_optimization
https://en.wikipedia.org/wiki/Scalar_replacement
https://en.wikipedia.org/wiki/Strength_reduction
https://en.wikipedia.org/wiki/Automatic_vectorization

56 CHAPTER 29. ORACLE DEVELOPER STUDIO

29.5 OpenMP

The OpenMP shared memory parallelization API is native
to all three compilers.

29.6 Code coverage

Main article: Tcov

Tcov, a source code coverage analysis and statement-by-
statement profiling tool, comes as a standard utility. Tcov
generates exact counts of the number of times each state-
ment in a program is executed and annotates source code to
add instrumentation.
The tcov utility gives information on how often a program
executes segments of code. It produces a copy of the source
file, annotated with execution frequencies. The code can be
annotated at the basic block level or the source line level. As
the statements in a basic block are executed the same num-
ber of times, a count of basic block executions equals the
number of times each statement in the block is executed.[7]
The tcov utility does not produce any time-based data.

29.7 GCCFSS

The GCC for SPARC Systems (GCCFSS) compiler uses
GNU Compiler Collection’s (GCC) front end with the Ora-
cle Developer Studio compiler’s code-generating back end.
Thus, GCCFSS is able to handle GCC-specific compiler
directives, while it is also able to take advantage of the
compiler optimizations in the compiler’s back end. This
greatly facilitates the porting of GCC-based applications to
SPARC systems.
GCCFSS 4.2 adds the ability to be used as a cross com-
piler; SPARC binaries can be generated on an x86 (or x64)
machine running Solaris.[8]

29.8 Research platform

Before its cancellation, the Rock would have been
the first general-purpose processor to support hardware
transactional memory (HTM). The Oracle Developer Stu-
dio compiler is used by a number of research projects,
including Hybrid Transactional Memory (HyTM)[9] and
Phased Transactional Memory (PhTM),[10] to investigate
support and possible HTM optimizations.

29.9 History

29.10 References
[1] Ikroop Dhillon (2016-06-29). “Announcing Oracle Devel-

oper Studio 12.5!”. Oracle Blogs. Oracle Corporation. Re-
trieved 2016-06-29.

[2] Oracle gooses Studio compilers for Solaris, Linux

[3] Oracle Solaris Studio downloads

[4] http://docs.oracle.com/cd/E37069_01/html/E37071/gncix.
html

[5] “Oracle Solaris Studio 12.2: Performance Analyzer”. Ora-
cle Corporation. Retrieved 2010-09-11.

[6] “Sun Studio 12: Distributed Make (dmake)”. Oracle Cor-
poration. Retrieved 2016-06-01.

[7] Basic block#Definition

[8] “Cool Tools – GCC for Sun Systems 4.2.0 as a Cross Com-
piler”. Sun Microsystems. Retrieved 2008-07-31.

[9] “Hybrid Transactional Memory” (PDF). Sun Microsystems.
Retrieved 2007-11-10.

[10] “PhTM: Phased Transactional Memory” (PDF). Sun Mi-
crosystems. Archived from the original (PDF) on 2012-02-
11. Retrieved 2016-06-01.

29.11 External links
• Product documentation

• Oracle Studio home page on Oracle Developer Net-
work

• Cool Tools – GCC for SPARC Systems

• Oracle Studio Forums

• Application Performance Tuning on Sun Platform
(archived Jan 29, 2008)

• downloads/index-jsp-141149.html Download Sun
Studio

• Oracle Solaris Studio Component Matrix

https://en.wikipedia.org/wiki/OpenMP
https://en.wikipedia.org/wiki/Tcov
https://en.wikipedia.org/wiki/Tcov
https://en.wikipedia.org/wiki/Code_coverage
https://en.wikipedia.org/wiki/Source_code
https://en.wikipedia.org/wiki/Computer_program
https://en.wikipedia.org/wiki/Basic_block
https://en.wikipedia.org/wiki/GNU_Compiler_Collection
https://en.wikipedia.org/wiki/Cross_compiler
https://en.wikipedia.org/wiki/Cross_compiler
https://en.wikipedia.org/wiki/Rock_(processor)
https://en.wikipedia.org/wiki/Transactional_memory
https://blogs.oracle.com//solaris/entry/oracle_developer_studio_12_5
https://blogs.oracle.com//solaris/entry/oracle_developer_studio_12_5
https://en.wikipedia.org/wiki/Oracle_Corporation
http://www.theregister.co.uk/2011/12/19/oracle_studio_compilers_tuxedo/
http://www.oracle.com/technetwork/server-storage/solarisstudio/downloads/
http://docs.oracle.com/cd/E37069_01/html/E37071/gncix.html
http://docs.oracle.com/cd/E37069_01/html/E37071/gncix.html
http://docs.oracle.com/cd/E19205-01/819-5264
http://docs.oracle.com/cd/E19205-01/819-5273/
https://en.wikipedia.org/wiki/Basic_block#Definition
http://cooltools.sunsource.net/gcc/4.2.0/crosscompile.html
http://cooltools.sunsource.net/gcc/4.2.0/crosscompile.html
http://labs.oracle.com/scalable/pubs/ASPLOS2006.pdf
https://web.archive.org/web/20120211131402/http://labs.oracle.com/scalable/pubs/TRANSACT2007-PhTM.pdf
http://labs.oracle.com/scalable/pubs/TRANSACT2007-PhTM.pdf
http://www.oracle.com/technetwork/server-storage/solarisstudio/documentation/
http://www.oracle.com/technetwork/server-storage/solarisstudio/overview/index.html
http://www.oracle.com/technetwork/server-storage/solarisstudio/overview/index.html
http://cooltools.sunsource.net/gcc/
https://forums.oracle.com/community/developer/english/development_tools/application_development_in_c__c%252B%252B__and_fortran
https://web.archive.org/web/20080129213345/http://wikis.sun.com/display/AppPerfTuning/Application+Performance+Tuning+Home
http://www.oracle.com/technetwork/server-storage/solarisstudio
http://www.oracle.com/technetwork/server-storage/solarisstudio
http://www.oracle.com/technetwork/server-storage/solarisstudio/training/index-jsp-141991.html

Chapter 30

PathScale

PathScale Inc. is a company that develops a highly opti-
mizing compiler for the x86-64 microprocessor architec-
tures. It derives from the SGI compilers for the MIPS
R10000 processor, called MIPSPro. PathScale was origi-
nally founded in 2001 asKeyResearch and its original mis-
sion was to develop clustered Linux server solutions based
on a low-cost 64-bit design. In late 2003 the company came
out of stealth mode and was called PathScale. The word
PathScale is descriptive of the company’s original design
goals for clusters. In early 2003 with the success of the
AMD Opteron, efforts at the company switched to other
products like high-performance 64-bit compilers.
The seeds of the company were sown over 20 years ago at
the Lawrence Livermore National Laboratory. Four of the
company’s seven founders all worked together building the
S1 supercomputer back in the early 1980s. The first Chief
technical officer at PathScale, Tom McWilliams, had the
initial idea for the company and incorporated in July 2001.
He added three of his LLNL colleagues (Jeff Rubin, Jeff
Broughton, Fred Chow) to the company shortly thereafter.
McWilliams had been a company founder at Valid Logic
Systems and Key Computer and worked at SGI, Sun Mi-
crosystems and Amdahl Corporation. Chow was formerly
chief scientist for compilers at SGI and MIPS.
PathScale Inc. was acquired and re-sold several times: by
QLogic in February 2006, by SiCortex in August 2007, and
by Cray in August 2009, when SiCortex was liquidated.
Cray owned the intellectual property until March 2012
when the new PathScale Inc. acquired all assets.[1]

On June 13, 2011, PathScale announced that the EKOPath
4 Compiler Suite will become open source software and li-
censed under the GPL.[2][3][4]

30.1 Contents of the PathScale
EKOPath Compiler Suite

• C, C++, and Fortran 77/90/95/2003 (partial) compil-
ers

• Complete support for OpenMP 2.5 (including
WORKSHARE)

• Complete support for 64-bit and 32-bit x86 compila-
tion

• Code generation for AMD64 ABI, AMD Opteron, and
Intel EM64T

• Optimized AMD Core Math Library

• Advanced multi-threaded debugger — PathDB

• Compatible with GNU/gcc tool chain and popular
third-party debuggers

• Supported on SUSE, Red Hat, and Ubuntu

30.2 See also

• List of compilers

• GPGPU

• OpenMP

• High-performance computing

30.3 References
[1] “PathScale Inc. acquires all PathScale Intellectual Property

and Assets from Cray”. PRNewswire. March 12, 2012.

[2] “EKOPath 4 Compiler Suite going open source with support
available”. PathScale Inc.

[3] https://www.phoronix.com/scan.php?page=article&item=
pathscale_ekopath4_open PathScale Open-Sources The
EKOPath 4 Compiler Suite

[4] https://www.phoronix.com/scan.php?page=news_item&
px=OTU2OA More Details From The EKOPath Open-
Source Launch

57

https://en.wikipedia.org/wiki/Compiler
https://en.wikipedia.org/wiki/X86-64
https://en.wikipedia.org/wiki/Microprocessor
https://en.wikipedia.org/wiki/Silicon_Graphics
https://en.wikipedia.org/wiki/MIPS_architecture
https://en.wikipedia.org/wiki/R10000
https://en.wikipedia.org/wiki/MIPSPro
https://en.wikipedia.org/wiki/Cluster_(computing)
https://en.wikipedia.org/wiki/Linux
https://en.wikipedia.org/wiki/AMD_Opteron
https://en.wikipedia.org/wiki/Compiler
https://en.wikipedia.org/wiki/Lawrence_Livermore_National_Laboratory
https://en.wikipedia.org/wiki/S1_(supercomputer)
https://en.wikipedia.org/wiki/Supercomputer
https://en.wikipedia.org/wiki/Chief_technical_officer
https://en.wikipedia.org/wiki/Chief_technical_officer
https://en.wikipedia.org/wiki/Valid_Logic_Systems
https://en.wikipedia.org/wiki/Valid_Logic_Systems
https://en.wikipedia.org/wiki/Sun_Microsystems
https://en.wikipedia.org/wiki/Sun_Microsystems
https://en.wikipedia.org/wiki/Amdahl_Corporation
https://en.wikipedia.org/wiki/QLogic
https://en.wikipedia.org/wiki/SiCortex
https://en.wikipedia.org/wiki/Cray
https://en.wikipedia.org/wiki/Liquidated
https://en.wikipedia.org/wiki/EKOPath
https://en.wikipedia.org/wiki/GPL
https://en.wikipedia.org/wiki/C_(programming_language)
https://en.wikipedia.org/wiki/C++
https://en.wikipedia.org/wiki/Fortran
https://en.wikipedia.org/wiki/OpenMP
https://en.wikipedia.org/wiki/Application_Binary_Interface
https://en.wikipedia.org/wiki/Multi-threaded_debugger
https://en.wikipedia.org/wiki/GNU
https://en.wikipedia.org/wiki/GNU_Compiler_Collection
https://en.wikipedia.org/wiki/Tool_chain
https://en.wikipedia.org/wiki/SUSE_Linux_distributions
https://en.wikipedia.org/wiki/Red_Hat
https://en.wikipedia.org/wiki/Ubuntu_(operating_system)
https://en.wikipedia.org/wiki/List_of_compilers
https://en.wikipedia.org/wiki/GPGPU
https://en.wikipedia.org/wiki/OpenMP
https://en.wikipedia.org/wiki/High-performance_computing
http://www.pathscale.com/pathscale_asset_acquisition
http://www.pathscale.com/pathscale_asset_acquisition
http://www.pathscale.com/ekopath4-open-source-announcement
http://www.pathscale.com/ekopath4-open-source-announcement
https://www.phoronix.com/scan.php?page=article&item=pathscale_ekopath4_open
https://www.phoronix.com/scan.php?page=article&item=pathscale_ekopath4_open
https://www.phoronix.com/scan.php?page=news_item&px=OTU2OA
https://www.phoronix.com/scan.php?page=news_item&px=OTU2OA

58 CHAPTER 30. PATHSCALE

30.4 Further reading
• PathScale CEO comments on company, Linux Clus-

tering

30.5 External links
• Official website

• Path64 page

http://www.tgc.com/hpcwire/hpcwireWWW/04/0521/107693.html
http://www.tgc.com/hpcwire/hpcwireWWW/04/0521/107693.html
http://www.pathscale.com/
http://www.path64.org/

Chapter 31

Pelles C

Pelles C is a lightweight freeware integrated development
environment for Microsoft Windows and Pocket PC pro-
gramming in the C language built and maintained by Pelle
Orinius, featuring:[1]

• Support for 32-bit Windows (X86), 64-bit Windows
(X64). (Support for Windows Mobile and the ARM
processor architecture has been discontinued as of
version 8.00.[2])

• Support for the C99 and C11 standards.
• Support for most SSE, SSE2, SSE3, SSSE3, SSE4.1,

SSE4.2, AES, and AVX(1) intrinsics (X64 only).
• Integrated source code editor with call tips and symbol

browsing.
• Integrated source-level debugger.
• Integrated sampling profiler.
• Project management.
• Inline assembler for X86 (and ARM, discontinued).
• Integrated resource editor.
• Integrated bitmap, icon and cursor editor.
• Integrated animated cursor and video editor.
• Integrated hex dump editor.
• Support for custom controls in the dialog editor.
• Support for custom project wizards.

The compiler is built on a modified version of LCC.[1] As
of version 5.00, Pelles C supports 64-bit. As of version 7.00
(RC1) Pelles C supports the C11 standard.

31.1 References
[1] Pelles C Overview

[2] Changelog version 8.00

31.2 External links
• Pelles C at smorgasbordet.

• (German)German mirror.

59

https://en.wikipedia.org/wiki/Freeware
https://en.wikipedia.org/wiki/Integrated_development_environment
https://en.wikipedia.org/wiki/Integrated_development_environment
https://en.wikipedia.org/wiki/Microsoft_Windows
https://en.wikipedia.org/wiki/Pocket_PC
https://en.wikipedia.org/wiki/C_(programming_language)
https://en.wikipedia.org/wiki/32-bit
https://en.wikipedia.org/wiki/64-bit
https://en.wikipedia.org/wiki/Windows_Mobile
https://en.wikipedia.org/wiki/ARM_architecture
https://en.wikipedia.org/wiki/ARM_architecture
https://en.wikipedia.org/wiki/C99
https://en.wikipedia.org/wiki/C11_(C_standard_revision)
https://en.wikipedia.org/wiki/Streaming_SIMD_Extensions
https://en.wikipedia.org/wiki/Advanced_Encryption_Standard
https://en.wikipedia.org/wiki/Advanced_Vector_Extensions
https://en.wikipedia.org/wiki/Debugger
https://en.wikipedia.org/wiki/Profiling_(computer_programming)
https://en.wikipedia.org/wiki/Inline_assembler
https://en.wikipedia.org/wiki/X86
https://en.wikipedia.org/wiki/ARM_architecture
https://en.wikipedia.org/wiki/Hex_dump
https://en.wikipedia.org/wiki/LCC_(compiler)
https://en.wikipedia.org/wiki/C11_(C_standard_revision)
http://www.smorgasbordet.com/pellesc/
http://www.pellesc.com/index.php?page=changelog&lang=en
http://www.smorgasbordet.com/pellesc/
http://www.christian-heffner.de/

Chapter 32

Portable C Compiler

The Portable C Compiler (also known as pcc or some-
times pccm – portable C compiler machine) is an early
compiler for the C programming language written by
Stephen C. Johnson of Bell Labs in the mid-1970s,[1] based
in part on ideas proposed by Alan Snyder in 1973,[2][3] and
“distributed as theC compiler by Bell Labs… with the bless-
ing of Dennis Ritchie.”[4]

One of the first compilers that could easily be adapted to
output code for different computer architectures, the com-
piler had a long life span. It debuted in Seventh Edi-
tion Unix and shipped with BSD Unix until the release of
4.4BSD in 1994, when it was replaced by the GNU C Com-
piler. It was very influential in its day, so much so that at
the beginning of the 1980s, the majority of C compilers
were based on it.[5] Anders Magnusson and Peter A Jons-
son restarted development of pcc in 2007, rewriting it ex-
tensively to support the C99 standard.[6]

32.1 Features

The keys to the success of pcc were its portability and
improved diagnostic capabilities. The compiler was de-
signed so that only a few of its source files were machine-
dependent. It was relatively robust to syntax errors and per-
formed more thorough validity checks than its contempo-
raries.
The first C compiler, written by Dennis Ritchie, used a
recursive descent parser, incorporated specific knowledge
about the PDP-11, and relied on an optional machine-
specific optimizer to improve the assembly language code
it generated. In contrast, Johnson’s pccm was based on a
yacc-generated parser and used a more general target ma-
chine model. Both compilers produced target-specific as-
sembly language code which they then assembled to pro-
duce linkable object modules.
Later versions of PCC, known within Bell Labs as “QCC”
and “RCC,” supported other target architecture models.

The language that PCC implemented was an extended ver-
sion of K&R C that Bjarne Stroustrup has called “Clas-
sic C”, incorporating the void return type (for functions
that don’t return any value), enumerations and structure
assignment.[4]

32.2 Current version

A new version of pcc, based on the original by Steve John-
son, is now maintained by Anders Magnusson.[6] The com-
piler is provided under the BSD licence and its development
is funded by a non-profit organization called BSD Fund.
According to Magnusson:

The big benefit of it (apart from that it’s
BSD licensed, for license geeks) is that it is fast,
5-10 times faster than gcc, while still producing
reasonable code. <...> [I]t is also quite simple to
port…
— Anders Magnusson[7]

This new version was added to the NetBSD pkgsrc and
OpenBSD source trees in September 2007,[8] and later into
the main NetBSD source tree.[9] There had been some spec-
ulation that it might eventually be used to supplant the GNU
C Compiler on BSD-based operating systems,[10] though
FreeBSD[11][12] and NetBSD[13] are both looking to Clang
as a potential replacement, and Theo de Raadt of OpenBSD
asserts that pcc is not ready yet to be a gcc replacement,
and the disposal of gcc is not top priority.[14] On December
29, 2009 pcc became capable of building a functional x86
OpenBSD kernel image.[15]

pcc version 1.0 was released on 1 April 2011.[16] As of this
release, the compiler supports x86 and x64 processor ar-
chitectures and runs on NetBSD, OpenBSD, FreeBSD, var-
ious Linux distributions, and Microsoft Windows.[17] Fur-
ther development, including support for more architectures,
and FORTRAN 77 and C++ front ends, is continuing.

60

https://en.wikipedia.org/wiki/Compiler
https://en.wikipedia.org/wiki/C_programming_language
https://en.wikipedia.org/wiki/Stephen_C._Johnson
https://en.wikipedia.org/wiki/Bell_Labs
https://en.wikipedia.org/wiki/Alan_Snyder_(computer_scientist)
https://en.wikipedia.org/wiki/Dennis_Ritchie
https://en.wikipedia.org/wiki/Seventh_Edition_Unix
https://en.wikipedia.org/wiki/Seventh_Edition_Unix
https://en.wikipedia.org/wiki/Berkeley_Software_Distribution
https://en.wikipedia.org/wiki/4.4BSD
https://en.wikipedia.org/wiki/GNU_C_Compiler
https://en.wikipedia.org/wiki/GNU_C_Compiler
https://en.wikipedia.org/wiki/C99
https://en.wikipedia.org/wiki/Porting
https://en.wikipedia.org/wiki/Compiler
https://en.wikipedia.org/wiki/Source_code
https://en.wikipedia.org/wiki/Computer_file
https://en.wikipedia.org/wiki/Machine-dependent
https://en.wikipedia.org/wiki/Machine-dependent
https://en.wikipedia.org/wiki/Syntax_error
https://en.wikipedia.org/wiki/Dennis_Ritchie
https://en.wikipedia.org/wiki/Recursive_descent_parser
https://en.wikipedia.org/wiki/PDP-11
https://en.wikipedia.org/wiki/Yacc
https://en.wikipedia.org/wiki/C_(programming_language)#K.26R_C
https://en.wikipedia.org/wiki/Bjarne_Stroustrup
https://en.wikipedia.org/wiki/BSD_licence
https://en.wikipedia.org/wiki/NetBSD
https://en.wikipedia.org/wiki/Pkgsrc
https://en.wikipedia.org/wiki/OpenBSD
https://en.wikipedia.org/wiki/NetBSD
https://en.wikipedia.org/wiki/FreeBSD
https://en.wikipedia.org/wiki/NetBSD
https://en.wikipedia.org/wiki/Clang
https://en.wikipedia.org/wiki/Theo_de_Raadt
https://en.wikipedia.org/wiki/OpenBSD
https://en.wikipedia.org/wiki/OpenBSD
https://en.wikipedia.org/wiki/X86
https://en.wikipedia.org/wiki/X64
https://en.wikipedia.org/wiki/NetBSD
https://en.wikipedia.org/wiki/OpenBSD
https://en.wikipedia.org/wiki/FreeBSD
https://en.wikipedia.org/wiki/Linux
https://en.wikipedia.org/wiki/Microsoft_Windows
https://en.wikipedia.org/wiki/FORTRAN_77
https://en.wikipedia.org/wiki/C++

32.5. EXTERNAL LINKS 61

PCC was removed from the OpenBSD source tree in
2012.[18] Development on it had stalled and no maintainer
had stepped up to develop it into something that could make
a practical alternative to GNU Compiler Collection.[19][20]

The latest version of pcc, namely 1.1.0, was released on 10
December 2014.[21]

32.3 See also
• Amsterdam Compiler Kit

• Clang

• Open Watcom

32.4 References
[1] Johnson, S.C. (1978). “A portable compiler: theory and

practice”. Proceedings of the 5th ACM SIGACT-SIGPLAN
symposium on Principles of programming languages. Tuc-
son, Arizona. pp. 97–104.

[2] Snyder, A. (1975). “A Portable Compiler for the Language
C”. Master’s Thesis. MIT, Cambridge, Mass.

[3] Johnson, S.C. (1981). “A Tour Through the Portable C
Compiler”. Unix Programmer’s Manual, 7th edition, Volume
2. ISBN 0-03-061743-X.

[4] Stroustrup, Bjarne (2002). Sibling rivalry: C and C++
(PDF) (Report). AT&T Labs.

[5] Ritchie, Dennis M. (1993). “The development of the C
language”. The second ACM SIGPLAN conference on His-
tory of programming languages. Cambridge, Massachusetts.
pp. 201–208. Retrieved 2008-12-30. At the start of the
decade, nearly every compiler was based on Johnson’s pcc;
by 1985 there were many independently-produced compiler
products.

[6] “pcc history”. pcc – portable c compiler. 2010-06-21. Re-
trieved 2012-06-26.

[7] Erdely, Mike (2007-09-15). “BSD Licensed PCC Compiler
Imported”. OpenBSD Journal. Retrieved 2011-12-17.

[8] Moerbeek, Otto (2007-09-15). “CVS: cvs.openbsd.org:
src”. openbsd-cvs (Mailing list).

[9] Brownlee, David (2007-09-20). “CVS commit:
src/dist/pcc”. source-changes (Mailing list).

[10] “GCC Compiler Finally Supplanted by PCC?”. /. 2007-09-
17.

[11] Larabel, Michael (12 May 2012). “FreeBSD 10 To Use
Clang Compiler, Deprecate GCC”. Phoronix. Archived
from the original on 10 April 2015. Retrieved 23 April
2015.

[12] Brooks, Davis (5 November 2012). “HEADS UP: Clang
now the default on x86” (Mailing list). Retrieved 23 April
2015.

[13] Joerg, Sonnenberger (17 October 2013). “Importing
LLVM/Clang” (Mailing list). Retrieved 23 April 2015.

[14] Matzan, Jem (2007-10-15). “More on OpenBSD’s new
compiler”. The Jem Report. Retrieved 2011-12-17. But
that’s never really been the agenda, see. Some people think
we hate GNU code. But the thing is we hate large code, and
buggy code that upstream does not maintain. That’s the real
problem… gcc gets about 5-6% slower every release, has
new bugs, generates crappy code, and drives us nuts. This is
just an attempt to see if something better can show up.

[15] de Weerd, Paul (2009-12-29). “Call for testing: pcc and the
OpenBSD kernel”. OpenBSD Journal. Retrieved 2011-12-
17.

[16] Magnusson, Anders (2011-04-01). “1.0 Release”. Portable
C Compiler. Retrieved 2011-12-17.

[17] “BSD Fund: pcc fund”. bsdfund.org. 2011-04-01. Re-
trieved 2012-06-26.

[18] Paul Irofti (2012-04-12). “CVS: cvs.openbsd.org: src”.

[19] Peter Hessler (2012-06-18). “Re: Story behind PCC’s re-
moval?”.

[20] Miod Vallat (2013-07-31). “Compilers in OpenBSD”.

[21] Magnusson, Anders (2014-12-10). “1.1.0 Release”.
Portable C Compiler. Retrieved 2014-12-10.

32.5 External links
• Official website

https://en.wikipedia.org/wiki/Source_tree
https://en.wikipedia.org/wiki/GNU_Compiler_Collection
https://en.wikipedia.org/wiki/Amsterdam_Compiler_Kit
https://en.wikipedia.org/wiki/Clang
https://en.wikipedia.org/wiki/Open_Watcom
https://en.wikipedia.org/wiki/Stephen_C._Johnson
http://doi.acm.org/10.1145/512760.512771
http://doi.acm.org/10.1145/512760.512771
https://en.wikipedia.org/wiki/Alan_Snyder_(computer_scientist)
http://www.lcs.mit.edu/publications/specpub.php?id=717
http://www.lcs.mit.edu/publications/specpub.php?id=717
https://en.wikipedia.org/wiki/Stephen_C._Johnson
http://citeseer.ist.psu.edu/johnson81tour.html
http://citeseer.ist.psu.edu/johnson81tour.html
https://en.wikipedia.org/wiki/International_Standard_Book_Number
https://en.wikipedia.org/wiki/Special:BookSources/0-03-061743-X
https://en.wikipedia.org/wiki/Bjarne_Stroustrup
http://stroustrup.com/sibling_rivalry.pdf
https://en.wikipedia.org/wiki/Dennis_Ritchie
http://plan9.bell-labs.com/who/dmr/chist.html
http://plan9.bell-labs.com/who/dmr/chist.html
http://pcc.ludd.ltu.se/pcc_history/
http://undeadly.org/cgi?action=article&sid=20070915195203&mode=expanded
http://undeadly.org/cgi?action=article&sid=20070915195203&mode=expanded
https://en.wikipedia.org/wiki/OpenBSD_Journal
http://marc.info/?l=openbsd-cvs&m=118988004013923&w=2
http://marc.info/?l=openbsd-cvs&m=118988004013923&w=2
http://mail-index.netbsd.org/source-changes/2007/09/20/0005.html
http://mail-index.netbsd.org/source-changes/2007/09/20/0005.html
http://developers.slashdot.org/article.pl?sid=07/09/17/1451239
https://en.wikipedia.org/wiki/Slashdot
https://www.phoronix.com/scan.php?page=news_item&px=MTEwMjI
https://www.phoronix.com/scan.php?page=news_item&px=MTEwMjI
https://en.wikipedia.org/wiki/Phoronix
https://web.archive.org/web/20150410143519/http://www.phoronix.com/scan.php?page=news_item&px=MTEwMjI
http://lists.freebsd.org/pipermail/freebsd-current/2012-November/037610.html
http://lists.freebsd.org/pipermail/freebsd-current/2012-November/037610.html
http://mail-index.netbsd.org/tech-toolchain/2013/10/17/msg002117.html
http://mail-index.netbsd.org/tech-toolchain/2013/10/17/msg002117.html
http://www.thejemreport.com/more-on-openbsds-new-compiler/
http://www.thejemreport.com/more-on-openbsds-new-compiler/
http://undeadly.org/cgi?action=article&sid=20091228231142
http://undeadly.org/cgi?action=article&sid=20091228231142
https://en.wikipedia.org/wiki/OpenBSD_Journal
http://pcc.ludd.ltu.se/1.0_release/
http://www.bsdfund.org/projects/pcc/
http://marc.info/?l=openbsd-cvs&m=133423160431049&w=2
http://marc.info/?l=openbsd-misc&m=134005622621532&w=2
http://marc.info/?l=openbsd-misc&m=134005622621532&w=2
http://marc.info/?l=openbsd-misc&m=137530560232232&w=2
ftp://pcc.ludd.ltu.se/pub/pcc-releases/
http://pcc.ludd.ltu.se/

Chapter 33

The Portland Group

The Portland Group, Inc. or PGI was a company that
produced a set of commercially available Fortran, C and
C++ compilers for high-performance computing systems.
On July 29, 2013, NVIDIA Corporation acquired The Port-
land Group, Inc. [1] The Portland Group (or PGI) name is
now known as a brand of software development tools pro-
duced by NVIDIA Corporation.

33.1 Company history

The Portland Group was founded as a privately held com-
pany in 1989, using compiler technology developed at and
acquired from Floating Point Systems, Inc. The first prod-
ucts, pipelining Fortran and C compilers, were released in
1991, targeting the Intel i860 processor. These compilers
were used on Intel supercomputers like the iPSC/860, the
Touchstone Delta, and the Paragon, and were the compilers
of choice for the majority of i860-based platforms.
In the early 1990s PGI was deeply involved in the devel-
opment of High Performance Fortran, or HPF, a data par-
allel language extension to Fortran 90 which provides a
portable programming interface for a wide variety of archi-
tectures. PGI produced an HPF compiler which continues
to be available today.
In 1996 PGI developed x86 compilers for the ASCI Red
Supercomputer at Sandia National Laboratories,[2] the first
computer system to sustain teraflop performance. In 1997
PGI released x86 compilers for general use on Linux work-
stations.
The Portland Group was acquired by STMicroelectronics
in December, 2000,[3] and operated as a wholly owned
subsidiary producing HPC compilers and tools for Linux,
Windows, and Mac OS. NVIDIA Corporation acquired
PGI from STMicroelectronics on July 29, 2013.[4] Today,
the same compilers and tools are made available through
NVIDIA under “The Portland Group Compilers and Tools”
brand name.[5]

PGI has been deeply involved in the expansion of the use
of GPGPUs for high-performance computing, develop-
ing CUDA Fortran [6] [7] with NVIDIA Corporation and
PGI Accelerator Fortran and C compilers [8] which use
programming directives. PGI has more recently partici-
pated in the specification of the new standard OpenACC
directives for GPU computing, and has released a compiler
for the OpenCL language on multi-core ARM processors.

33.2 Product and market history

33.2.1 Compilers

PGI compilers incorporate global optimization, vectoriza-
tion, software pipelining, and shared-memory paralleliza-
tion capabilities targeting both Intel and AMD processors.
PGI supports the following high-level languages:

• Fortran 77

• Fortran 90/95/2003

• Fortran 2008 (partial)

• High Performance Fortran (HPF)

• ANSI C99 with K&R extensions

• ANSI/ISO C++

• CUDA Fortran

• OpenCL

• OpenACC

• OpenMP

62

https://en.wikipedia.org/wiki/Fortran
https://en.wikipedia.org/wiki/C_(programming_language)
https://en.wikipedia.org/wiki/C++
https://en.wikipedia.org/wiki/Compilers
https://en.wikipedia.org/wiki/High-performance_computing
https://en.wikipedia.org/wiki/Nvidia
https://en.wikipedia.org/wiki/Nvidia
https://en.wikipedia.org/wiki/Floating_Point_Systems
https://en.wikipedia.org/wiki/Intel_i860
https://en.wikipedia.org/wiki/Intel_iPSC/860
https://en.wikipedia.org/wiki/Intel_Paragon
https://en.wikipedia.org/wiki/High_Performance_Fortran
https://en.wikipedia.org/wiki/X86
https://en.wikipedia.org/wiki/Teraflop
https://en.wikipedia.org/wiki/Linux
https://en.wikipedia.org/wiki/STMicroelectronics
https://en.wikipedia.org/wiki/Nvidia
https://en.wikipedia.org/wiki/STMicroelectronics
https://en.wikipedia.org/wiki/Nvidia
https://en.wikipedia.org/wiki/GPGPU
https://en.wikipedia.org/wiki/NVIDIA
https://en.wikipedia.org/wiki/Directive_(programming)
https://en.wikipedia.org/wiki/OpenACC
https://en.wikipedia.org/wiki/Arm_architecture

33.4. REFERENCES 63

33.2.2 Programming Tools

PGI also provides a parallel debugger, PGDBG, and a
performance profiler, PGPROF, both of which support
OpenMP and MPI parallelism on Linux, Windows, and
Mac OS. On Windows, the PGI Fortran compiler and de-
bugger have been fully integrated into Microsoft Visual Stu-
dio as a product called PGI Visual Fortran.

33.2.3 PGI Milestones
• 1989 – PGI founded
• 1991 – Pipelining i860 Compilers
• 1994 – Parallel i860 Compilers
• 1996 – ASCI Red TFLOPS Compilers
• 1997 – Linux/x86 Compilers
• 1998 – OpenMP for Linux/x86
• 1999 – SSE/SIMD Vectorization
• 2001 – VLIW ST100 Compilers
• 2003 – 64-bit Linux/x86 Compilers
• 2004 – ASCI Red Storm Compilers
• 2005 – PGI Unified Binary Technology
• 2006 – PGI Visual Fortran
• 2007 – 64-bit Mac OS Compilers
• 2008 – PGI Accelerator Compilers
• 2009 – CUDA Fortran Compiler[9]

• 2010 – CUDA X86 Compiler
• 2011 – AVX/FMA Vectorization
• 2012 – OpenACC standard directives for GPU com-

puting
• 2012 – PGI OpenCL compiler for Multi-core ARM

CPUs. Removed after NVIDIA bought PGI.

33.3 See also
• Fortran
• C
• C++
• Debugger
• Profiler
• IDE

33.4 References
[1] “Nvidia buys Portland Group for compiler smarts”

[2] “The ASCI Option Red Supercomputer”. Intel Corporation.
May 1996. Archived from the original on May 28, 2010.
Retrieved 25 March 2011.

[3] “STMicroelectronics Announces Acquisition of Portland
Group Inc.”. STMicroelectronics. 19 December 2000. Re-
trieved 25 March 2011.

[4] “NVIDIA Pushes Further Into High Performance Comput-
ing With Portland Group Acquisition”. NVIDIA. July 29,
2013.

[5] “PGI Products”. NVIDIA. 1 October 2015. Retrieved 1
October 2015.

[6] “PGI and NVIDIA Team To Deliver CUDA Fortran Com-
piler”. The Portland Group, Inc. 23 June 2009. Retrieved
29 June 2011.

[7] “PGI CUDA Fortran Now Available from The Portland
Group”. The Portland Group, Inc. 17 November 2009. Re-
trieved 29 June 2011.

[8] “New PGI 9.0 Compilers Simplify x64+GPU Program-
ming”. The Portland Group, Inc. 23 June 2009. Retrieved
29 June 2011.

[9] “Nvidia Announces CUDA Fortran Compiler Beta”.
eWeek. 29 Sep 2009. Retrieved 29 June 2011.

33.5 External links
• Official website

• PGI Visual Fortran in the Visual Studio Gallery

• OpenACC website

• OpenCL website

https://en.wikipedia.org/wiki/Visual_Studio
https://en.wikipedia.org/wiki/Visual_Studio
https://en.wikipedia.org/wiki/Pipelining
https://en.wikipedia.org/wiki/ASCI_Red
https://en.wikipedia.org/wiki/OpenMP
https://en.wikipedia.org/wiki/Streaming_SIMD_Extensions
https://en.wikipedia.org/wiki/SIMD
https://en.wikipedia.org/wiki/Automatic_parallelization
https://en.wikipedia.org/wiki/VLIW
https://en.wikipedia.org/wiki/Red_Storm_(computing)
https://en.wikipedia.org/wiki/Mac_OS
https://en.wikipedia.org/wiki/CUDA
https://en.wikipedia.org/wiki/Advanced_Vector_Extensions
https://en.wikipedia.org/wiki/FMA_instruction_set
https://en.wikipedia.org/wiki/OpenACC
https://en.wikipedia.org/wiki/OpenCL
https://en.wikipedia.org/wiki/ARM_architecture
https://en.wikipedia.org/wiki/Fortran
https://en.wikipedia.org/wiki/C_(programming_language)
https://en.wikipedia.org/wiki/C++
https://en.wikipedia.org/wiki/Debugger
https://en.wikipedia.org/wiki/Profiling_(computer_programming)
https://en.wikipedia.org/wiki/Integrated_development_environment
http://www.theregister.co.uk/2013/07/30/nvidia_buys_the_portland_group/
https://web.archive.org/web/20100528051556/http://www.sandia.gov/ASCI/Red/papers/Mattson/OVERVIEW.html
http://www.sandia.gov/ASCI/Red/papers/Mattson/OVERVIEW.html
http://investors.st.com/phoenix.zhtml?c=111941&p=irol-newsArticle&ID=1455084&highlight=
http://investors.st.com/phoenix.zhtml?c=111941&p=irol-newsArticle&ID=1455084&highlight=
http://blogs.nvidia.com/blog/2013/07/29/portland/
http://blogs.nvidia.com/blog/2013/07/29/portland/
http://www.pgroup.com/products/index.htm
http://www.pgroup.com/about/news.htm#34
http://www.pgroup.com/about/news.htm#34
http://www.pgroup.com/about/news.htm#37
http://www.pgroup.com/about/news.htm#37
http://www.pgroup.com/about/news.htm#33
http://www.pgroup.com/about/news.htm#33
http://www.eweek.com/c/a/Application-Development/NVIDIA-Announces-New-CUDA-Fortran-Compiler-Beta-225743/
http://www.pgroup.com/
http://visualstudiogallery.msdn.microsoft.com/420B5C3D-F5C4-4C62-A60F-7F8A50BC614F/
http://www.openacc.org/
http://www.khronos.org/opencl/

Chapter 34

QuickC

Microsoft QuickC was a commercial integrated develop-
ment environment (IDE) product engineered by Microsoft
for the C programming language, superseded by Visual
C++ Standard Edition.[2] Its main competitor was Borland
Turbo C.[3]

QuickC was one of three Microsoft programming lan-
guages with IDEs of this type marketed in the same period,
the other two being QuickBasic[4] and QuickPascal.[5][6]
QuickBasic later gave rise to Visual Basic as well as be-
ing included without a linker as QBasic in later versions
of MS-DOS, replacing GW Basic. QuickC is a lineal an-
cestor of Visual C++.[6][7][8][9][10] The three Quick lan-
guage implementations were designed for power users (as
opposed to professional developers, whom Microsoft sup-
plied with programming languages in the form of expensive
and more comprehensive implementations for the three lan-
guages in question as well as C++, Fortran, and Cobol) and
educational use; in all three cases their major competitor
was Borland with its Turbo compiler series.[11] Microsoft
Macro Assembler also competes with Borland’s Turbo As-
sembler[12]

34.1 Version history

• QuickC 1.0, released in October 1987.[13][14] It im-
plements the ANSI C standard and is Microsoft C 5.0
compatible.[15] CodeView is also supported.[16] The
release had known compatibility issues with WD HDD
controllers.[17]

• QuickC 1.01

• QuickC 2.0, released in January 1989.[18][19] New
features included: incremental compiling and linking,
improved compilation speed, built-in assembler and
support for all memory models.[20] It was Microsoft
C 5.1 compatible.[21]

• QuickC 2.01, released in June 1989.[22] Quick As-
sembler was included in this release.[23] It was Mi-

crosoft Source Profiler compatible.[24]

• QuickC 2.50, released in May 1990.[25]

• QuickC 2.51, released in 1990

• QuickC for Windows 1.0, released in September
1991.[1][26] It was the first Windows based IDE for
C[27] and was also available in a bundle with Microsoft
C 6.0 and Windows SDK.[28] The IDE made use of
some undocumented Windows API calls.[29][30]

34.2 See also

• QuickBASIC – similar development environment for
BASIC programming

34.3 References
[1] “Microsoft Readies Quick C for Windows for July Introduc-

tion”. InfoWorld. May 13, 1991. p. 113.

[2] “Visual C++ adds Windows support”. InfoWorld. February
22, 1993. p. 17.

[3] “Quick C vs Turbo C advertisement”. InfoWorld. Septem-
ber 7, 1987. p. 70.

[4] QuickBasic Programmers’ Toolbox

[5] Quick Language Essentials, pp i-xxvii

[6] QuickPascal Programmers’ Toolbox pp 3-6

[7] Gettfng Getting Started With Visual C++, intro

[8] Quick C Programmers’ Toolbox pp 3-6

[9] QuickBasic Programmers’ Toolbox pp 1-4

[10] Using MS-DOS 6 Appendix III

[11] Borland Turbo C

64

https://en.wikipedia.org/wiki/Integrated_development_environment
https://en.wikipedia.org/wiki/Integrated_development_environment
https://en.wikipedia.org/wiki/Microsoft
https://en.wikipedia.org/wiki/C_(programming_language)
https://en.wikipedia.org/wiki/Visual_C++
https://en.wikipedia.org/wiki/Visual_C++
https://en.wikipedia.org/wiki/Borland_Turbo_C
https://en.wikipedia.org/wiki/Borland_Turbo_C
https://en.wikipedia.org/wiki/QuickBasic
https://en.wikipedia.org/wiki/QuickPascal
https://en.wikipedia.org/wiki/Visual_Basic
https://en.wikipedia.org/wiki/QBasic
https://en.wikipedia.org/wiki/GW_Basic
https://en.wikipedia.org/wiki/Visual_C++
https://en.wikipedia.org/wiki/C++
https://en.wikipedia.org/wiki/Fortran
https://en.wikipedia.org/wiki/Cobol
https://en.wikipedia.org/wiki/Borland
https://en.wikipedia.org/wiki/Macro_Assembler
https://en.wikipedia.org/wiki/Turbo_Assembler
https://en.wikipedia.org/wiki/Turbo_Assembler
https://en.wikipedia.org/wiki/CodeView
https://en.wikipedia.org/wiki/Western_Digital
https://en.wikipedia.org/wiki/Microsoft_C
https://en.wikipedia.org/wiki/Microsoft_C
https://en.wikipedia.org/wiki/Windows_API
https://en.wikipedia.org/wiki/QuickBASIC
https://books.google.com/books?id=WVAEAAAAMBAJ
https://books.google.com/books?id=WVAEAAAAMBAJ
https://books.google.com/books?id=vjsEAAAAMBAJ
https://books.google.com/books?id=sTsEAAAAMBAJ

34.3. REFERENCES 65

[12] The Giant Black Book of Computer Viruses pp 16

[13] “Microsoft Releases C Program Wares, Provides Rebates”.
InfoWorld. November 9, 1987. p. 29.

[14] “Quick C advertisement”. InfoWorld. December 7, 1987.
p. 28.

[15] “Microsoft Quick C Battles for a Better C Benefit Novice
and Professional alike”. InfoWorld. May 23, 1988. p. 67.

[16] “User Group Greets Microsoft’s New C Products With En-
thusiasm”. InfoWorld. June 8, 1987. p. 73.

[17] “Microsoft Scrambles to Patch Quick C Bugs”. InfoWorld.
December 7, 1987. p. 3.

[18] “Early Users Pleased With Microsoft Quick C Update”. In-
foWorld. January 30, 1989. p. 15.

[19] “Quick C 2.0 advertisement”. InfoWorld. February 6, 1989.
p. 23.

[20] “Microsoft Offers Quick C Upgrade”. InfoWorld. January
16, 1989. p. 15.

[21] “Six C Compilers”. InfoWorld. May 22, 1989. p. 47.

[22] “Quick Assembler bundled with Microsoft’s Quick C”. In-
foWorld. June 12, 1989. p. 24.

[23] “Microsoft Debuts Quick Assembler”. InfoWorld. June 5,
1989. p. 3.

[24] “Microsoft’s Source Profiler Works With Languages Con-
forming to Open Tools”. InfoWorld. June 10, 1991. p. 22.

[25] “Microsoft Unveils C, Quick C Updates and Add-On Tools”.
InfoWorld. April 16, 1990. p. 13.

[26] “QuickC for Windows creates applications without using
SDK”. InfoWorld. September 2, 1991. p. 13.

[27] “QuickC is a one-stop development tool”. InfoWorld.
November 18, 1991. p. 113.

[28] “C languages: oceans apart”. InfoWorld. February 3, 1992.
p. 55.

[29] “Author disputes calls released by Microsoft”. InfoWorld.
September 14, 1992. p. 3.

[30] “Undocumented Windows calls”. InfoWorld. November 16,
1992. p. 98.

https://books.google.com/books?id=Sj0EAAAAMBAJ
https://books.google.com/books?id=Az8EAAAAMBAJ
https://books.google.com/books?id=4T4EAAAAMBAJ
https://books.google.com/books?id=4T4EAAAAMBAJ
https://books.google.com/books?id=0TAEAAAAMBAJ
https://books.google.com/books?id=0TAEAAAAMBAJ
https://books.google.com/books?id=Az8EAAAAMBAJ
https://books.google.com/books?id=MzoEAAAAMBAJ
https://books.google.com/books?id=OzoEAAAAMBAJ
https://books.google.com/books?id=rzsEAAAAMBAJ
https://books.google.com/books?id=mDAEAAAAMBAJ
https://books.google.com/books?id=jzAEAAAAMBAJ
https://books.google.com/books?id=kzAEAAAAMBAJ
https://books.google.com/books?id=RlAEAAAAMBAJ
https://books.google.com/books?id=RlAEAAAAMBAJ
https://books.google.com/books?id=JjsEAAAAMBAJ
https://books.google.com/books?id=gj0EAAAAMBAJ
https://books.google.com/books?id=gj0EAAAAMBAJ
https://books.google.com/books?id=Bj4EAAAAMBAJ
https://books.google.com/books?id=8T0EAAAAMBAJ
https://books.google.com/books?id=f1EEAAAAMBAJ
https://books.google.com/books?id=N1EEAAAAMBAJ

Chapter 35

ROSE (compiler framework)

The ROSE compiler framework, developed at Lawrence
Livermore National Laboratory (LLNL), is an open-source
software compiler infrastructure to generate source-to-
source analyzers and translators for multiple source lan-
guages including C (C89, C98, Unified Parallel C (UPC)),
C++ (C++98, C++11), Fortran (77, 95, 2003), OpenMP,
Java, Python, and PHP.
It also supports certain binary files, and auto-parallelizing
compilers by generating source code annotated with
OpenMP directives. Unlike most other research compilers,
ROSE is aimed at enabling non-experts to leverage com-
piler technologies to build their own custom software ana-
lyzers and optimizers.

35.1 The infrastructure

ROSE consists of multiple front-ends, a midend operating
on its internal intermediate representation (IR), and back-
ends regenerating (unparse) source code from IR. Option-
ally, vendor compilers can be used to compile the unparsed
source code into final executables.
To parse C and C++ applications, ROSE uses the Edison
Design Group’s C++ front-end.[1] Fortran support, includ-
ing F2003 and earlier 1977, 1990, and 1995 versions, is
based on the Open Fortran Parser (OFP) developed at Los
Alamos National Laboratory.[2]

The ROSE IR consists of an abstract syntax tree, symbol ta-
bles, control flow graph, etc. It is an object-oriented IR with
several levels of interfaces for quickly building source-to-
source translators. All information from the input source
code is carefully preserved in the ROSE IR, including C
preprocessor control structure, source comments, source
position information, and C++ template information, e.g.,
template arguments.
ROSE is released under a BSD-style license. It targets
Linux and OS X on both IA-32 and x86-64 platforms. Its
Edison Design Group (EDG) parts are proprietary and dis-

tributed in binary form. Source files of the EDG parts can
be obtained if users have a commercial or research license
from EDG.

35.2 Award

The ROSE compiler infrastructure received one of the 2009
R&D 100 Awards.[3] The R&D 100 Awards are presented
annually by R&D Magazine to recognize the 100 most sig-
nificant proven research and development advances intro-
duced over the past year. An independent expert panel se-
lects the winners.

35.3 References
[1] Edison Design Group’s C++ front-end

[2] Open Fortran Parser (OFP)

[3] “Free compiler aids novices, experts”. R&D Magazine. Ad-
vantage Business Media. 30 July 2009. Retrieved 18 March
2016.

35.4 External links
• Official website

• Development site

• rose on GitHub

66

https://en.wikipedia.org/wiki/Lawrence_Livermore_National_Laboratory
https://en.wikipedia.org/wiki/Lawrence_Livermore_National_Laboratory
https://en.wikipedia.org/wiki/Open-source_software
https://en.wikipedia.org/wiki/Open-source_software
https://en.wikipedia.org/wiki/Compiler
https://en.wikipedia.org/wiki/Source-to-source_compiler
https://en.wikipedia.org/wiki/Source-to-source_compiler
https://en.wikipedia.org/wiki/Translator_(computing)
https://en.wikipedia.org/wiki/C_(programming_language)
https://en.wikipedia.org/wiki/Unified_Parallel_C
https://en.wikipedia.org/wiki/C++
https://en.wikipedia.org/wiki/Fortran
https://en.wikipedia.org/wiki/OpenMP
https://en.wikipedia.org/wiki/Java_(programming_language)
https://en.wikipedia.org/wiki/Python_(programming_language)
https://en.wikipedia.org/wiki/PHP
https://en.wikipedia.org/wiki/Automatic_parallelization
https://en.wikipedia.org/wiki/Intermediate_representation
https://en.wikipedia.org/wiki/Los_Alamos_National_Laboratory
https://en.wikipedia.org/wiki/Los_Alamos_National_Laboratory
https://en.wikipedia.org/wiki/Abstract_syntax_tree
https://en.wikipedia.org/wiki/Object-oriented
https://en.wikipedia.org/wiki/C++_template
https://en.wikipedia.org/wiki/BSD_licenses
https://en.wikipedia.org/wiki/Linux
https://en.wikipedia.org/wiki/OS_X
https://en.wikipedia.org/wiki/IA-32
https://en.wikipedia.org/wiki/X86-64
https://en.wikipedia.org/wiki/Edison_Design_Group
https://en.wikipedia.org/wiki/Proprietary_software
https://en.wikipedia.org/wiki/Research_and_development
http://www.edg.com/index.php?location=c_frontend
http://fortran-parser.sourceforge.net/
http://www.rdmag.com/award-winners/2009/07/free-compiler-aids-novices-experts
http://www.rosecompiler.org/
https://outreach.scidac.gov/projects/rose/
https://github.com/rose-compiler/rose
https://en.wikipedia.org/wiki/GitHub

Chapter 36

Small Device C Compiler

The Small Device C Compiler (SDCC) is a free-software,
partially retargetable[1] C compiler for microcontrollers.
It is distributed under the GNU General Public Li-
cense. The package also contains a linker, assembler,
simulator and debugger. As of March 2007, SDCC is
the only open-source C compiler for Intel 8051-compatible
microcontrollers.[2][3][4] In 2011 the compiler was down-
loaded on average more than 200 times per day.[5]

The SDCC compiler was used by the FreeRTOS project to
port its real-time operating system to the 8051-based Silabs
(formerly Cygnal) series of microcontrollers.

36.1 Supported target architectures

• Intel 8051 and its derivatives.

• Zilog Z80 and binary compatible derivatives such as
the eZ80.

• Zilog Z180.

• Rabbit 2000 and the binary compatible derivative
Rabbit 3000.

• Rabbit 3000A and binary compatible derivatives such
as the Rabbit 4000.

• Sharp LR35902 (the CPU used in the Game Boy).

• Freescale (Motorola) HC08.

• Freescale S08.

• STMicroelectronics STM8.

• Toshiba TLCS-90.

Work is in progress on:

• Microchip PIC16 and PIC18.[6]

36.2 See also

• Retargetable compiler

• Microcontroller

• Z88DK

36.3 References
[1] Rainer Leupers, Peter Marwedel: “Retargetable Compiler

Technology for Embedded Systems: Tools and Applica-
tions”, page 126. Springer, 2001

[2] According to a Google search for: 8051 open source C com-
piler

[3] Lewin Edwards “Open-Source Robotics and Process Con-
trol Cookbook: Designing and Building Robust, Dependable
Real-time Systems”. 2011. p. 15.

[4] De-Shuang Huang, Phalguni Gupta, Xiang Zhang, Prashan
Premaratne. “Emerging Intelligent Computing Technology
and Applications”. 2012. p. 383.

[5] SourceForge. “Usage Statistics For Small Device C Com-
piler”. Retrieved 2010-02-16.

[6] “SDCC – Small Device C Compiler”. Retrieved 2013-01-
20.

36.4 External links

• SDCC homepage

• Sandeep Dutta – Anatomy of a Compiler. A Re-
targetable ANSI-C Compiler. “Circuit Cellar”, issue
121, August 2000, page 35

• SDCC Open Knowledge Resource

• FOSDEM 2015 presentation on SDCC

67

https://en.wikipedia.org/wiki/Free-software
https://en.wikipedia.org/wiki/Retargetable_compiler
https://en.wikipedia.org/wiki/C_(programming_language)
https://en.wikipedia.org/wiki/Compiler
https://en.wikipedia.org/wiki/Microcontroller
https://en.wikipedia.org/wiki/GNU_General_Public_License
https://en.wikipedia.org/wiki/GNU_General_Public_License
https://en.wikipedia.org/wiki/Linker_(computing)
https://en.wikipedia.org/wiki/Assembly_language
https://en.wikipedia.org/wiki/Simulator
https://en.wikipedia.org/wiki/Debugger
https://en.wikipedia.org/wiki/Intel_8051
https://en.wikipedia.org/wiki/Compiler
https://en.wikipedia.org/wiki/FreeRTOS
https://en.wikipedia.org/wiki/Silicon_Laboratories
https://en.wikipedia.org/wiki/Cygnal
https://en.wikipedia.org/wiki/Microcontrollers
https://en.wikipedia.org/wiki/Intel_8051
https://en.wikipedia.org/wiki/Zilog
https://en.wikipedia.org/wiki/Z80
https://en.wikipedia.org/wiki/EZ80
https://en.wikipedia.org/wiki/Z180
https://en.wikipedia.org/wiki/Rabbit_2000
https://en.wikipedia.org/wiki/Sharp_Corporation
https://en.wikipedia.org/wiki/Game_Boy
https://en.wikipedia.org/wiki/Freescale
https://en.wikipedia.org/wiki/Motorola
https://en.wikipedia.org/wiki/Freescale_68HC08
https://en.wikipedia.org/wiki/Freescale
https://en.wikipedia.org/wiki/Freescale_S08
https://en.wikipedia.org/wiki/STMicroelectronics
https://en.wikipedia.org/wiki/STM8
https://en.wikipedia.org/wiki/Toshiba
https://en.wikipedia.org/wiki/TLCS-90
https://en.wikipedia.org/wiki/Microchip_Technology
https://en.wikipedia.org/wiki/PIC16
https://en.wikipedia.org/wiki/PIC18
https://en.wikipedia.org/wiki/Retargetable_compiler
https://en.wikipedia.org/wiki/Microcontroller
https://en.wikipedia.org/wiki/Z88DK
https://en.wikipedia.org/wiki/Google
http://www.google.com/search?hl=en&safe=off&q=8051+open+source+C+compiler&btnG=Search
http://www.google.com/search?hl=en&safe=off&q=8051+open+source+C+compiler&btnG=Search
https://books.google.com/books?id=OlfXVIclwnAC
https://books.google.com/books?id=OlfXVIclwnAC
https://books.google.com/books?id=OlfXVIclwnAC
https://books.google.com/books?id=OYa5BQAAQBAJ
https://books.google.com/books?id=OYa5BQAAQBAJ
http://sourceforge.net/project/stats/?group_id=599&ugn=sdcc&type=&mode=alltime
http://sourceforge.net/project/stats/?group_id=599&ugn=sdcc&type=&mode=alltime
http://sdcc.sourceforge.net/
http://sdcc.sourceforge.net/
https://web.archive.org/web/20090617011643/http://www.circuitcellar.com/SA/Articles2/Dutta-121.pdf
https://web.archive.org/web/20090617011643/http://www.circuitcellar.com/SA/Articles2/Dutta-121.pdf
https://web.archive.org/web/20090617011643/http://www.circuitcellar.com/SA/Articles2/Dutta-121.pdf
http://sdccokr.dl9sec.de/resources.htm

68 CHAPTER 36. SMALL DEVICE C COMPILER

• A port of FreeRTOS to 8051

• Using SDCC on the AT89C52 (8051 derivative)

• Using SDCC for PIC on Windows with MPLABX

http://www.freertos.org/portcygn.html
http://www.8052.com/users/robotics/sdcc.phtml
https://sites.google.com/site/rmaalmeida/mplabx-sdcc-toolchain

Chapter 37

Small-C

Small-C is both a subset of the C programming lan-
guage, suitable for resource-limited microcomputers and
embedded systems, and an implementation of that subset.
Originally valuable as an early compiler for microcomputer
systems available during the late 1970s and early 1980s, the
implementation has also been useful as an example simple
enough for teaching purposes.
The original compiler, written in Small-C for the Intel 8080
by Ron Cain, appeared in the May 1980 issue ofDr. Dobb’s
Journal of Computer Calisthenics & Orthodontia. James E.
Hendrix improved and extended the original compiler, and
wrote The Small-C Handbook. Ron bootstrapped Small-C
on the SRI International PDP 11/45 Unix system with an
account provided by John Bass for Small C development.
The provided source code was released with management
permission into the public domain. Small-C was impor-
tant for tiny computers in a manner somewhat analogous to
the importance of GCC for larger computers. Just like its
Unix counterparts, the compiler generates assembler code,
which then must be translated to machine code by an avail-
able assembler.
Small-C is a retargetable compiler. Porting Small-C re-
quires only that the back-end code generator be rewritten
for the target processor.

37.1 See also

• Z88DK – Small-C implementation for Z80 based mi-
crocomputers

• Tiny C – a C compiler for slow computers having little
disk space

• cc65 – Another Small-C implementation for 6502
computers

37.2 References
• Ron Cain, “A Small C Compiler for the 8080’s”, Dr.
Dobb’s Journal, April–May 1980, pp. 5–19

• James E. Hendrix, The Small-C Handbook, Reston
1984, ISBN 0-8359-7012-4

• James E. Hendrix, A Small C Compiler: Language, Us-
age, Theory, and Design, M & T Books 1988, ISBN
0-934375-88-7

• James E. Hendrix, Small C Compiler, M & T Books
1990, ISBN 1-55851-124-5

37.3 External links
• Comments by Ron Cain himself on creation of Small-

C

• Several implementations of Small-C

• A Small-C compiler for Game Boy

• NASM Project -fbin: Cain’s Small-C Project

• Motorola DSP56800 support

• Small-C-Resource CD-ROM

• Native compiler for the BBC Computer

69

https://en.wikipedia.org/wiki/C_(programming_language)
https://en.wikipedia.org/wiki/C_(programming_language)
https://en.wikipedia.org/wiki/Microcomputer
https://en.wikipedia.org/wiki/Embedded_system
https://en.wikipedia.org/wiki/Compiler
https://en.wikipedia.org/wiki/Intel_8080
https://en.wikipedia.org/wiki/Dr._Dobb%2527s_Journal
https://en.wikipedia.org/wiki/Dr._Dobb%2527s_Journal
https://en.wikipedia.org/wiki/Bootstrapping_(compilers)
https://en.wikipedia.org/wiki/SRI_International
https://en.wikipedia.org/wiki/PDP_11
https://en.wikipedia.org/wiki/Unix
https://en.wikipedia.org/wiki/Source_code
https://en.wikipedia.org/wiki/Public_domain
https://en.wikipedia.org/wiki/GNU_Compiler_Collection
https://en.wikipedia.org/wiki/Unix-like
https://en.wikipedia.org/wiki/Assembly_language
https://en.wikipedia.org/wiki/Machine_code
https://en.wikipedia.org/wiki/Assembly_language#Assembler
https://en.wikipedia.org/wiki/Retargetable_compiler
https://en.wikipedia.org/wiki/Code_generation_(compiler)
https://en.wikipedia.org/wiki/Z88DK
https://en.wikipedia.org/wiki/Tiny_C_Compiler
https://en.wikipedia.org/wiki/Cc65
https://en.wikipedia.org/wiki/Special:BookSources/0835970124
https://en.wikipedia.org/wiki/Special:BookSources/0934375887
https://en.wikipedia.org/wiki/Special:BookSources/0934375887
https://en.wikipedia.org/wiki/Special:BookSources/1558511245
http://www.svipx.com/pcc/PCCminipages/zc9b6ec9e.html
http://www.svipx.com/pcc/PCCminipages/zc9b6ec9e.html
http://www.cpm.z80.de/small_c.html
http://www.bebits.com/app/2678
http://www.project-fbin.hostoi.com/index.htm
http://drdobbs.com/cpp/184405595
https://store.drdobbs.com/product/8/Small-C-Resource
http://mdfs.net/System/C/BBC/

Chapter 38

Softune

Softune is an Integrated development environment from
Fujitsu for the Fujitsu FR, FR-V and F²MC processor fam-
ilies. It provides an REALOS µITRON realtime kernel.
It is for example used for Nikon DSLRs (see Nikon EX-
PEED) and some Pentax K mount[1] cameras.

38.1 See also
• ITRON project

• FR-V

38.2 External links
• Fujitsu: SOFTUNE WORKBENCH V6 32 bit De-

velopment Environment: Features, Documentation,
Software: Downloads

38.3 References
[1] Pentax hack: Hardware info

70

https://en.wikipedia.org/wiki/Integrated_development_environment
https://en.wikipedia.org/wiki/Fujitsu
https://en.wikipedia.org/wiki/Fujitsu_FR
https://en.wikipedia.org/wiki/FR-V
https://en.wikipedia.org/wiki/%CE%9CITRON
https://en.wikipedia.org/wiki/Real-time_operating_system
https://en.wikipedia.org/wiki/Kernel_(computing)
https://en.wikipedia.org/wiki/Nikon_DSLR
https://en.wikipedia.org/wiki/EXPEED
https://en.wikipedia.org/wiki/EXPEED
https://en.wikipedia.org/wiki/Pentax_K_mount
https://en.wikipedia.org/wiki/ITRON_project
https://en.wikipedia.org/wiki/FR-V
http://mcu.emea.fujitsu.com/mcu_tool/detail/SWB_(FR)_V6.htm
http://mcu.emea.fujitsu.com/mcu_tool/detail/SWB_(FR)_V6.htm
http://mcu.emea.fujitsu.com/mcu_tool/detail/SWB_(FR)_V6.htm
http://www.pentax-hack.info/documents/hardware.html

Chapter 39

TenDRA Compiler

“Tendra” redirects here. For the battle near the spit, see
Battle of Tendra.

The TenDRA Compiler is a C/C++ compiler for POSIX-
compatible operating systems available under the terms of
the BSD license.
It was originally developed by the Defence Evaluation and
Research Agency (DERA) in the United Kingdom. In the
beginning of 2002 TenDRA was actively developed again
by Jeroen Ruigrok van der Werven and offered as a BSD-
licensed open source project through the website tendra.org.
In the third quarter of 2002 the one-man effort was ex-
panded to a small team.
The TDF technology behind TenDRA has an academic his-
tory dating back to work on algebraic code validation in the
1970s. “Academic Papers”.
In August 2003 TenDRA split into two projects, Ten-
DRA.org and Ten15.org. Both projects petered out around
2006–2007.[1] [2]

The goals of TenDRA.org were:

• to continuously produce correct code,

• to ensure code correctness through various means, and

• to continuously improve the performance of the com-
piler and resulting code, unless it would jeopardize the
points above.

The goals of Ten15.org added:

• to be a friendly competitor to GCC in order to get a
best-of-breed compiler.

Features of both compilers include good error reporting
with respect to standards compliance and a smaller code
size than the same programs compiled on gcc. C++ support
never got as developed as C support, and there was no STL
supporting release. TenDRA uses the Architecture Neutral

Distribution Format (ANDF), a specification created by the
Open Group, as its intermediate language.
At a point, most of the Alpha OSF/1 kernel could be built
with TenDRA C and afterwards there was also a similar
effort to port the FreeBSD kernel.

39.1 Documentation

TenDRA.org has a comprehensive set of documentation
available online at http://www.tendra.org/docs
Manual pages for references to programs and file formats
are available at http://www.tendra.org/man

39.2 See also

• TenDRA Distribution Format

39.3 References
[1] The TenDRA project news, archived from the original on De-

cember 13, 2007

[2] root/trunk/tendra/NEWS

39.4 External links

• About – tendra.org at the Wayback Machine (archived
December 22, 2007)

• bitbucket copy of the TenDRA src repository

• ten15.org at the Wayback Machine (archived May 15,
2011)

• TenDRA in the FreeBSD ports collection

71

https://en.wikipedia.org/wiki/Spit_(landform)
https://en.wikipedia.org/wiki/Battle_of_Tendra
https://en.wikipedia.org/wiki/Compiler
https://en.wikipedia.org/wiki/POSIX
https://en.wikipedia.org/wiki/Operating_system
https://en.wikipedia.org/wiki/BSD_license
https://en.wikipedia.org/wiki/Defence_Evaluation_and_Research_Agency
https://en.wikipedia.org/wiki/Defence_Evaluation_and_Research_Agency
https://en.wikipedia.org/wiki/United_Kingdom
https://en.wikipedia.org/wiki/TenDRA_Distribution_Format
http://www.tendra.org/papers/
https://en.wikipedia.org/wiki/GNU_Compiler_Collection
https://en.wikipedia.org/wiki/Architecture_Neutral_Distribution_Format
https://en.wikipedia.org/wiki/Architecture_Neutral_Distribution_Format
https://en.wikipedia.org/wiki/Open_Group
https://en.wikipedia.org/wiki/Intermediate_language
https://en.wikipedia.org/wiki/OSF/1
https://en.wikipedia.org/wiki/FreeBSD
http://www.tendra.org/docs
http://www.tendra.org/man
https://en.wikipedia.org/wiki/TenDRA_Distribution_Format
https://web.archive.org/web/20071213212755/www.tendra.org/status/news/index.html
https://www.tendra.org/status/news/index.html
http://www.ten15.org/browser/trunk/tendra/NEWS
https://web.archive.org/web/20071222090240/http://www.tendra.org/about/
https://en.wikipedia.org/wiki/Wayback_Machine
https://bitbucket.org/asmodai/tendra
https://web.archive.org/web/20110515122552/http://www.ten15.org/
https://en.wikipedia.org/wiki/Wayback_Machine
http://www.freshports.org/lang/TenDRA

72 CHAPTER 39. TENDRA COMPILER

• TenDRA in Debian

• mirror of the original TenDRA web page from DERA

http://packages.debian.org/stable/devel/tendra
http://www.cse.unsw.edu.au/~disy/Sulima/TenDRA/

Chapter 40

THINK C

THINK C was an extension of ANSI C for the classic Mac
OS developed by THINK Technologies; although named
Lightspeed C in the original mid-1986 release, it was later
renamed THINK C. THINK Technologies was later ac-
quired by Symantec Corporation and the product contin-
ued to be developed by the original author, Michael Kahl.
Version 3 and subsequent versions were essentially a subset
of C++ and supported basic object oriented programming
concepts such as single inheritance as well as extensions to
the C standard that conformed more closely to the require-
ments of Mac OS programming. After version 6, the OOP
facilities were expanded to a full C++ implementation, and
the product was rebranded Symantec C++ for versions 7
and 8, now under development by different authors.
THINK C (and later, Symantec C++) featured a class li-
brary and framework for Mac programming called the
Think Class Library (TCL), which was used extensively for
Macintosh application development.
The Lightspeed/THINK C IDE was quite influential, though
considered not as advanced as that belonging to THINK
Pascal, its sister language product; it was considered the
standard environment when MPW was considered an over-
priced niche product, and most Macintosh products were
developed in it for many years. With the transition of
the Mac from 68K to PowerPC, however, Symantec was
widely seen as having dropped the ball, and competitor
Metrowerks’s product CodeWarrior took control of the
marketplace.
Despite the decline in popularity of their IDE, Symantec
was eventually chosen by Apple to provide next-generation
C/C++ compilers for MPW in the form of Sc/Scpp for 68K
alongside MrC/MrCpp for PowerPC. These remained Ap-
ple’s standard compilers until the arrival of Mac OS X re-
placed them with GCC. Symantec subsequently exited the
developer tool business.

40.1 References

40.2 External links
• 1989 review of THINK C 4.0, MacTech magazine

• 1986 overview of C on Macintosh with Lightspeed C,
MacTech magazine

• Mention of Lightspeed C introduction, July 1986
MacTech Magazine

73

https://en.wikipedia.org/wiki/ANSI_C
https://en.wikipedia.org/wiki/Classic_Mac_OS
https://en.wikipedia.org/wiki/Classic_Mac_OS
https://en.wikipedia.org/wiki/Symantec_Corporation
https://en.wikipedia.org/wiki/Michael_Kahl
https://en.wikipedia.org/wiki/C++
https://en.wikipedia.org/wiki/Object_oriented_programming
https://en.wikipedia.org/wiki/Single_inheritance
https://en.wikipedia.org/wiki/Symantec_C++
https://en.wikipedia.org/wiki/Class_library
https://en.wikipedia.org/wiki/Class_library
https://en.wikipedia.org/wiki/Integrated_development_environment
https://en.wikipedia.org/wiki/THINK_Pascal
https://en.wikipedia.org/wiki/THINK_Pascal
https://en.wikipedia.org/wiki/Macintosh_Programmer%2527s_Workshop
https://en.wikipedia.org/wiki/Motorola_68000
https://en.wikipedia.org/wiki/PowerPC
https://en.wikipedia.org/wiki/Metrowerks
https://en.wikipedia.org/wiki/CodeWarrior
https://en.wikipedia.org/wiki/Mac_OS_X
http://www.mactech.com/articles/mactech/Vol.05/05.10/ThinkCTutor/
https://en.wikipedia.org/wiki/MacTech
http://www.mactech.com/articles/mactech/Vol.02/02.08/Menus,Windows/index.html
http://www.mactech.com/articles/mactech/Vol.02/02.07/ChooserwithATalk/index.html

Chapter 41

Tiny C Compiler

TheTinyCCompiler (aka TCC, tCc, or TinyCC) is an x86
and ARM processor C compiler created by Fabrice Bellard.
It is designed to work for slow computers with little disk
space (e.g. on rescue disks). Windows operating system
support was added in version 0.9.23 (17 Jun 2005). TCC is
distributed under the GNU Lesser General Public License
(LGPL).
TCC claims to implement all of ANSI C (C89/C90),[1]
much of the C99 ISO standard,[2] and many GNU C ex-
tensions including inline assembly.

41.1 Features

TCC has a number of features which differentiate it from
other current C compilers:

• Its small file size (about 100 KB for the x86 TCC ex-
ecutable) and memory footprint allow it to be used di-
rectly from a single 1.44 M floppy disk, such as a res-
cue disk.

• TCC is intended to produce native x86, x86-64 and
ARM code very quickly; according to Bellard, it com-
piles, assembles and links about nine times faster than
GCC does.[3]

• TCC has a number of compiler-specific language fea-
tures intended to improve its practicality, such as an
optional memory and bound checker, for improved
code stability.

• TCC allows programs to be run automatically at com-
pile time using a command-line switch. This allows
programs to be run as a shell script under Unix-like
systems which support the shebang interpreter direc-
tive syntax.

41.2 Compiled program perfor-
mance

Although the TCC compiler itself is exceptionally fast, there
is an inherent trade off between this size of the compiler and
the performance of the code which TCC produces.
TCC does perform a few optimizations, such as constant
propagation for all operations, multiplications and divisions
are optimized to shifts when appropriate, and compari-
son operators are specially optimized (by maintaining a
special cache for the processor flags). It also does some
simple register allocation, which prevents many extraneous
save/load pairs inside a single statement.
But in general, TCC’s implementation emphasizes small-
ness instead of optimally-performing results. TCC gener-
ates code in a single pass, and does not perform most of the
optimizations performed by other compilers such as GCC.
TCC compiles every statement on its own, and at the end of
each statement register values are written back to the stack
and must be re-read even if the next line uses the values in
registers (creating extraneous save/load pairs between state-
ments). TCC uses only some of the available registers (e.g.,
on x86 it never uses ebx, esi, or edi because they need to be
preserved across function calls).[4]

Here are two benchmark examples:

• Rough benchmarks of a recursive Fibonacci algorithm
on a 1.8 GHz Intel Centrino laptop with 512 MB RAM
yields a noticeable difference in results between Mi-
crosoft Visual C++ compiler 13.10.3052 and TCC. To
calculate the 49th Fibonacci number, it took a MS Vi-
sual C++ program approximately 18% longer than the
TCC compiled program.

• With a tcc modified to compile GCC, running cc1 (the
GCC C compiler) on itself required 518 seconds when
compiled using GCC 3.4.2, 558 seconds using GCC
2.95.3, 545 using Microsoft C compiler, and 1145 sec-
onds using tcc. The level of optimization in each com-

74

https://en.wikipedia.org/wiki/X86
https://en.wikipedia.org/wiki/ARM_processor
https://en.wikipedia.org/wiki/C_(programming_language)
https://en.wikipedia.org/wiki/Compiler
https://en.wikipedia.org/wiki/Fabrice_Bellard
https://en.wikipedia.org/wiki/Microsoft_Windows
https://en.wikipedia.org/wiki/GNU_Lesser_General_Public_License
https://en.wikipedia.org/wiki/ANSI_C
https://en.wikipedia.org/wiki/C99
https://en.wikipedia.org/wiki/Assembly_language
https://en.wikipedia.org/wiki/Floppy_disk
https://en.wikipedia.org/wiki/GNU_Compiler_Collection
https://en.wikipedia.org/wiki/Shebang_(Unix)
https://en.wikipedia.org/wiki/Interpreter_directive
https://en.wikipedia.org/wiki/Interpreter_directive
https://en.wikipedia.org/wiki/Compiler_optimization
https://en.wikipedia.org/wiki/Constant_folding
https://en.wikipedia.org/wiki/Constant_folding
https://en.wikipedia.org/wiki/Arithmetic_shift
https://en.wikipedia.org/wiki/Register_allocation
https://en.wikipedia.org/wiki/Statement_(computer_science)
https://en.wikipedia.org/wiki/GNU_Compiler_Collection
https://en.wikipedia.org/wiki/Random-access_memory

41.6. SEE ALSO 75

piler was -O1 or similar.[5]

41.3 Uses

Well-known uses of tcc include:

• TCCBOOT,[6] a hack where TCC loads and boots a
Linux kernel from source in about 10 seconds. That is
to say, it is a “boot loader” which reads Linux kernel
source code from disk, writes executable instructions
to memory, and begins running it. This did require
changes to the Linux build process.

• TCC was used to demonstrate a defense against the
trust attack.[7]

• TCC has been used to compile GCC, though various
patches were required to make this work.[8]

• Cinpy[9] is a Python library that allows you to imple-
ment functions with C in Python modules. The func-
tions are compiled with TCC at runtime. The results
are made callable in Python through the ctypes library.

• Comes installed on JavaScript Linux[10] (also by Bel-
lard).

• Has been used as a reference for the compiled version
of the super micro-max chess program source.[11]

41.4 History

TCC has its origins in the Obfuscated Tiny C Compiler
(OTCC), a program Bellard wrote to win the International
Obfuscated C Code Contest (IOCCC) in 2001. Since that
time, Bellard expanded and un-obfuscated the program to
produce tcc.[12]

41.5 Current status

TCC has an active mailing list, and Fabrice Bellard’s current
version is available through Git. However, official tcc de-
velopment slowed due to Bellard’s work on other projects.[3]

Rob Landley created a fork of tcc[13] that incorporated var-
ious patches from others, using the Mercurial SCM; Land-
ley’s Mercurial branch[14] showed its current status while
the project was active. The project was discontinued on
October 4, 2007 and recontinued as a fork on October 27,
2007 [13] then discontinued again[15] on September 5, 2008.
Since then, TCC has received two updates; one on 20 May
2009, and 15 Feb 2013.

Various others have distributed patches or download sites
of various improved versions of tcc, such as Dave Dodge’s
collection of unofficial tcc patches,[16] Debian and kfreebsd
downstream patches,[17] and grischka’s gcc patches.[5]
grischka’s Public Git Hosting [18] contains a mob branch[19]
with recent contributions, including a shared build, cross-
compilers, and SELinux compatibility.

41.6 See also
• Portable C Compiler (PCC)

• Small-C

• LCC (compiler)

41.7 References
[1] Tiny C Compiler Reference Documentation accessed on

2008-08-07

[2] According to the project’s TODO list complex types are the
only missing C99 feature. Variable Length Arrays have been
added in TCC 0.9.26

[3] Tiny C Compiler homepage

[4] Glöckner, Daniel. Re: Tinycc-devel (no subject), September
8, 2006.

[5] grischka, GCC by TCC (some fixes), 29 Sep 2005

[6] TCCBOOT

[7] Wheeler, David A. Countering Trusting Trust through Di-
verse Double-Compiling. ACSAC.

[8] tinycc-devel (thread)

[9] Cinpy

[10] JavaScript Linux

[11] Super Micro-Max Chess Engine

[12] Bellard, Fabrice. Obfuscated Tiny C Compiler

[13] Rob Landley’s TCC fork that went inactive

[14] Landley’s Mercurial branch

[15] tinycc-devel (message)

[16] Dave Dodge’s collection of unofficial tcc patches

[17] Debian and kfreebsd downstream patches

[18] grischka, Public Git Hosting for tcc

[19] grischka, mob branch for tcc

https://en.wikipedia.org/wiki/Hack_(technology_slang)
https://en.wikipedia.org/wiki/Linux_kernel
https://en.wikipedia.org/wiki/Backdoor_(computing)#Countermeasures
https://en.wikipedia.org/wiki/International_Obfuscated_C_Code_Contest
https://en.wikipedia.org/wiki/International_Obfuscated_C_Code_Contest
https://en.wikipedia.org/wiki/Git_(software)
https://en.wikipedia.org/wiki/Portable_C_Compiler
https://en.wikipedia.org/wiki/Small-C
https://en.wikipedia.org/wiki/LCC_(compiler)
http://bellard.org/tcc/tcc-doc.html#SEC6
http://repo.or.cz/w/tinycc.git/blob/HEAD:/TODO
http://bellard.org/tcc/
http://lists.gnu.org/archive/html/tinycc-devel/2006-09/msg00028.html
http://lists.gnu.org/archive/html/tinycc-devel/2005-09/msg00054.html
http://bellard.org/tcc/tccboot.html
http://www.dwheeler.com/trusting-trust
http://www.dwheeler.com/trusting-trust
http://lists.gnu.org/archive/html/tinycc-devel/2005-09/threads.html
http://www.cs.tut.fi/~ask/cinpy/
http://bellard.org/jslinux/
http://sourceforge.net/projects/smmax/
http://bellard.org/otcc/
http://landley.net/code/tinycc/
http://www.landley.net/hg/tinycc
http://lists.gnu.org/archive/html/tinycc-devel/2008-09/msg00013.html
http://www.dododge.net/tcc/patches.html
http://packages.debian.org/unstable/devel/tcc
http://repo.or.cz/w/tinycc.git
http://repo.or.cz/w/tinycc.git/shortlog/refs/heads/mob

76 CHAPTER 41. TINY C COMPILER

41.8 External links
• Official website

• TCC’s active mailing list

• Source code repository

http://bellard.org/tcc/
http://lists.nongnu.org/mailman/listinfo/tinycc-devel
http://repo.or.cz/w/tinycc.git

Chapter 42

vbcc

vbcc is the name of a portable and retargetable ISO/ANSI
C compiler. It supports ISO C according to ISO/IEC
9899:1989 and a subset of the new standard ISO/IEC
9899:1999.
It is divided into two parts. One is target-independent and
the other is target-dependent. vbcc provides complete ab-
straction of host-arithmetic and target-arithmetic. It fully
supports cross-compiling for 8-bit, 16-bit, 32-bit and 64-
bit architectures.
Embedded systems are supported by features like different
pointer-sizes, ROM-able code, inline-assembly, bit-types,
interrupt-handlers, section-attributes, stack-calculation and
many others (depending on the backend).

42.1 Optimizations

The compiler provides a large set of high-level optimiza-
tions as well as target-specific optimizations to produce
faster or smaller code. It is also able to optimize across
functions and modules. Target-independent optimizations
includes:

• cross-module function-inlining

• partial inlining of recursive functions

• inter-procedural data-flow analysis

• inter-procedural register-allocation

• register-allocation for global variables

• global common-subexpression-elimination

• global constant-propagation

• global copy-propagation

• dead-code-elimination

• alias-analysis

• loop-unrolling

• induction-variable elimination

• loop-invariant code-motion

• loop-reversal

Currently backends (with different degree of maturity) exist
68k, Coldfire, PowerPC, 80×86 (386 and above), Alpha,
C16x/ST10, 68HC12, z-machine architectures.
All common operating systems can be supported as host
systems, including Windows and Unix/Linux systems.

42.2 External links
• Dr. Volker Barthelmann´s Compiler Page

• vbcc – ISO/ANSI-C Compiler

• Mac OS X

• Atari cross development
• Amiga cross development

77

https://en.wikipedia.org/wiki/International_Organization_for_Standardization
https://en.wikipedia.org/wiki/ANSI_C
https://en.wikipedia.org/wiki/ANSI_C
https://en.wikipedia.org/wiki/C99
https://en.wikipedia.org/wiki/C99
https://en.wikipedia.org/wiki/8-bit
https://en.wikipedia.org/wiki/16-bit
https://en.wikipedia.org/wiki/32-bit
https://en.wikipedia.org/wiki/64-bit
https://en.wikipedia.org/wiki/64-bit
https://en.wikipedia.org/wiki/680×0
https://en.wikipedia.org/wiki/Freescale_ColdFire
https://en.wikipedia.org/wiki/PowerPC
https://en.wikipedia.org/wiki/80×86
https://en.wikipedia.org/wiki/DEC_Alpha
https://en.wikipedia.org/wiki/C166_family
https://en.wikipedia.org/wiki/68HC12
https://en.wikipedia.org/wiki/Z-machine
https://en.wikipedia.org/wiki/Microsoft_Windows
https://en.wikipedia.org/wiki/Unix
https://en.wikipedia.org/wiki/Linux
http://www.compilers.de/vbcc.html
http://sun.hasenbraten.de/vbcc/
http://dhs.nu/vbcc/

vbcc 0.9b: An Amiga Cross Compiler for Mac OS X

78 CHAPTER 42. VBCC

vc

vbccppc

vasmppc_std

vlink

Chapter 43

Visual C++

Microsoft Visual C++ (often abbreviated as MSVC or
VC++) is an integrated development environment (IDE)
product from Microsoft for the C, C++, and C++/CLI
programming languages. MSVC is proprietary software;
it was originally a standalone product but later became a
part of Visual Studio and made available in both trialware
and freeware forms. It features tools for developing and
debugging C++ code, especially code written for Windows
API, DirectX and .NET Framework.
Many applications require redistributable Visual C++ pack-
ages to function correctly. These packages are often in-
stalled independently of applications, allowing multiple ap-
plications to make use of the package while only having to
install it once. These Visual C++ redistributable and run-
time packages are mostly installed for standard libraries that
many applications use.[3]

43.1 History

The predecessor to Visual C++ was called Microsoft
C/C++. There was also a Microsoft QuickC 2.5 and a Mi-
crosoft QuickC for Windows 1.0. The Visual C++ compiler
is still known as Microsoft C/C++ and as of the release of
Visual C++ 2015 Update 2, is on version 19.00.23918.

43.1.1 16-bit versions

• Microsoft C 1.0, based on Lattice C, was Microsoft’s
first C product in 1983. It was not K&R C.

• C 2.0 added large model support.

• C 3.0 was the first version developed inside Microsoft.
This version intended compatibility with K&R and the
later ANSI standard. It was being used inside Mi-
crosoft (for Windows and Xenix development) in early
1984. It shipped as a product in 1985.

• C 4.0 added optimizations and CodeView, a source
level debugger.

• C 5.0 added loop optimizations and Huge Model
(arrays bigger than 64k) support. Microsoft Fortran
and the first 32 bit compiler for 80386 were also part
of this project.

• C 5.1 released in 1988 allowed compiling programs
for OS/2 1.x.

• C 6.0 released in 1989. It added global flow analysis, a
source browser, and a new debugger, and included an
optional C++ front end.[4]

• C/C++ 7.0 was released in 1992. Added built-in sup-
port for C++ and MFC (Microsoft Foundation Class
Library) 1.0.[5]

• Visual C++ 1.0, which included MFC 2.0, was the
first version of Visual C++, released in February 1993.
It was Cfront 2.1 compliant[6] and available in two
editions:[1]

• Standard – replaced QuickC for Windows.
• Professional – replaced C/C++ 7.0. Included the

ability to build both DOS and Windows applica-
tions, an optimizing compiler, a source profiler,
and the Windows 3.1 SDK.[6] The Phar Lap 286
DOS Extender Lite was also included.[7]

• Visual C++ 1.5 was released in December 1993, in-
cluded MFC 2.5, and added OLE 2.0 and ODBC sup-
port to MFC.[8] It was the first version of Visual C++
that came only on CD-ROM.

• Visual C++ 1.51 and 1.52 were available as
part of a subscription service.

• Visual C++ 1.52b is similar to 1.52, but does
not include the Control Development Kit.

• Visual C++ 1.52c was a patched version of 1.5.
It is the last, and arguably most popular, develop-
ment platform for Microsoft Windows 3.x. It is
available through Microsoft Developer Network.

79

https://en.wikipedia.org/wiki/Integrated_development_environment
https://en.wikipedia.org/wiki/Microsoft
https://en.wikipedia.org/wiki/C_(programming_language)
https://en.wikipedia.org/wiki/C++
https://en.wikipedia.org/wiki/C++/CLI
https://en.wikipedia.org/wiki/Programming_language
https://en.wikipedia.org/wiki/Proprietary_software
https://en.wikipedia.org/wiki/Microsoft_Visual_Studio
https://en.wikipedia.org/wiki/Trialware
https://en.wikipedia.org/wiki/Freeware
https://en.wikipedia.org/wiki/Software_development
https://en.wikipedia.org/wiki/Debugging
https://en.wikipedia.org/wiki/Windows_API
https://en.wikipedia.org/wiki/Windows_API
https://en.wikipedia.org/wiki/DirectX
https://en.wikipedia.org/wiki/.NET_Framework
https://en.wikipedia.org/wiki/Application_software
https://en.wikipedia.org/wiki/Redistributable
https://en.wikipedia.org/wiki/Library_(computing)
https://en.wikipedia.org/wiki/QuickC
https://en.wikipedia.org/wiki/Compiler
https://en.wikipedia.org/wiki/Lattice_C
https://en.wikipedia.org/wiki/The_C_Programming_Language
https://en.wikipedia.org/wiki/Microsoft_Windows
https://en.wikipedia.org/wiki/Xenix
https://en.wikipedia.org/wiki/CodeView
https://en.wikipedia.org/wiki/Array_data_structure
https://en.wikipedia.org/wiki/Fortran
https://en.wikipedia.org/wiki/Microsoft_Foundation_Class_Library
https://en.wikipedia.org/wiki/Cfront
https://en.wikipedia.org/wiki/Phar_Lap_(company)
https://en.wikipedia.org/wiki/Object_Linking_and_Embedding
https://en.wikipedia.org/wiki/Open_Database_Connectivity
https://en.wikipedia.org/wiki/CD-ROM
https://en.wikipedia.org/wiki/Microsoft_Windows
https://en.wikipedia.org/wiki/Microsoft_Developer_Network

80 CHAPTER 43. VISUAL C++

43.1.2 Strictly 32-bit versions

• Visual C++ 1.0 (original name: Visual C++
32-bit Edition) was the first version for 32-bit
development.[9] Although released when 16-bit 1.5
was available, it did not include support for OLE2
and ODBC. It was also available in a bundle called
Visual C++ 16/32-bit Suite, which included Visual
C++ 1.5.[10]

• Visual C++ 2.0, which included MFC 3.0, was the
first version to be 32-bit only. In many ways, this
version was ahead of its time, since Windows 95,
then codenamed “Chicago”, was not yet released, and
Windows NT had only a small market share. As a re-
sult, this release was almost a “lost generation”. Mi-
crosoft included and updated Visual C++ 1.5 as part of
the 2.x releases up to 2.1, which included Visual C++
1.52, and both 16-bit and 32-bit version of the Control
Development Kit (CDK) were included. Visual C++
2.x also supported Win32s development. It is available
through Microsoft Developer Network. There was a
Visual C++ 2.0 RISC Edition for MIPS and Alpha
processors, as well as a cross-platform edition for the
Macintosh (68000 instruction set).[11]

• Visual C++ 2.1 and 2.2 were updates for 2.0
available through subscription.

• Visual C++ 4.0, released on 1995-12-11[12] in-
troduced the Developer Studio IDE. Its then-novel
tiled layout of non-overlapping panels — naviga-
tion panel, combination editor/source level debug-
ger panel, and console output panel[13]— continues
through the Visual Studio product line (as of 2013).
Visual C++ 4.0 included MFC 4.0, was designed for
Windows 95 and Windows NT. To allow support of
legacy (Windows 3.x/DOS) projects, 4.0 came bun-
dled with the Visual C++ 1.52 installation CD. Up-
dates available through subscription included Visual
C++ 4.1, which came with the Microsoft Game SDK
(later released separately as the DirectX SDK), and
Visual C++ 4.2. Version number 3.0 was skipped to
achieve version number parity between Visual C++
4.0 and MFC 4.0.[14]

• Visual C++ 4.2 did not support Windows 3.x
(Win32s) development.[15] This was the final version
with a cross-platform edition for the Macintosh avail-
able and it differed from the 2.x version in that it also
allowed compilation for the PowerPC instruction set.

• Visual C++ 5.0, which included MFC 4.21 and
was released 1997-04-28,[12] was a major upgrade
from 4.2.[16] Available in four editions: Learning,[17]
Professional,[18] Enterprise,[19] and RISC.[20]

• Visual C++ 6.0 (commonly known as VC6), which
included MFC 6.0, was released in 1998.[21] The re-
lease was somewhat controversial since it did not in-
clude an expected update to MFC. Visual C++ 6.0 is
still quite popular and often used to maintain legacy
projects. There are, however, issues with this version
under Windows XP, especially under the debugging
mode (for example, the values of static variables do
not display). The debugging issues can be solved with
a patch called the “Visual C++ 6.0 Processor Pack”.[22]
Version number: 12.00.8804

• Visual C++ .NET 2002 (also known as Visual C++
7.0), which included MFC 7.0, was released in 2002
with support for link time code generation and debug-
ging runtime checks, .NET 1.0, and Visual C# and
Managed C++. The new user interface used many of
the hot keys and conventions of Visual Basic, which
accounted for some of its unpopularity among C++
developers. Version number: 13.00.9466

• Visual C++ .NET 2003 (also known as Visual C++
7.1), which included MFC 7.1, was released in 2003
along with .NET 1.1 and was a major upgrade to Vi-
sual C++ .NET 2002. It was considered a patch to Vi-
sual C++ .NET 2002. Accordingly, the English lan-
guage upgrade version of Visual Studio .NET 2003
shipped for minimal cost to owners of the English-
language version of Visual Studio .NET 2002. This
was the last version to support Windows 95 and NT
4.0 as a target. Version number: 13.10.3077

• eMbedded Visual C++[23] in various versions was
used to develop for some versions of the Windows
CE operating system. Initially it replaced a develop-
ment environment consisting of tools added onto Vi-
sual C++ 6.0. eMbedded Visual C++ was replaced
as a separate development environment by Microsoft
Visual Studio 2005.

43.1.3 32-bit and 64-bit versions

• Visual C++ 2005 (also known as Visual C++ 8.0),
which included MFC 8.0, was released in November
2005. This version supports .NET 2.0 and includes a
new version of C++ targeted to the .NET framework
(C++/CLI) with the purpose of replacing the previ-
ous version (Managed C++). Managed C++ for CLI is
still available via compiler options, though. It also in-
troduced OpenMP. With Visual C++ 2005, Microsoft
also introduced Team Foundation Server. Visual C++
8.0 has problems compiling MFC AppWizard projects
that were created using Visual Studio 6.0, so main-
tenance of legacy projects can be continued with the

https://en.wikipedia.org/wiki/Windows_95
https://en.wikipedia.org/wiki/Windows_NT
https://en.wikipedia.org/wiki/Win32s
https://en.wikipedia.org/wiki/Microsoft_Developer_Network
https://en.wikipedia.org/wiki/MIPS_architecture
https://en.wikipedia.org/wiki/DEC_Alpha
https://en.wikipedia.org/wiki/Macintosh
https://en.wikipedia.org/wiki/68000
https://en.wikipedia.org/wiki/Microsoft_Visual_Studio
https://en.wikipedia.org/wiki/Win32s
https://en.wikipedia.org/wiki/Macintosh
https://en.wikipedia.org/wiki/PowerPC
https://en.wikipedia.org/wiki/C_Sharp_(programming_language)
https://en.wikipedia.org/wiki/Managed_Extensions_for_C++
https://en.wikipedia.org/wiki/Visual_Basic
https://en.wikipedia.org/wiki/Windows_CE
https://en.wikipedia.org/wiki/Windows_CE
https://en.wikipedia.org/wiki/Microsoft_Visual_Studio
https://en.wikipedia.org/wiki/Microsoft_Visual_Studio
https://en.wikipedia.org/wiki/C++/CLI
https://en.wikipedia.org/wiki/Managed_C++
https://en.wikipedia.org/wiki/OpenMP
https://en.wikipedia.org/wiki/Team_Foundation_Server

43.2. COMPATIBILITY 81

original IDE if rewriting is not feasible. Visual C++
2005 is the last version able to target Windows 98 and
Windows Me.[24][25] SP1 version (14.00.50727.762)
is also available in Microsoft Windows SDK Update
for Windows Vista.

• Visual C++ 2008 (also known as Visual C++ 9.0)
was released in November 2007. This version sup-
ports .NET 3.5. Managed C++ for CLI is still available
via compiler options. By default, all applications com-
piled against the Visual C++ 2008 Runtimes (static
and dynamic linking) will only work under Windows
2000 and later.[26][27] A feature pack released for VC9,
later included in SP1, added support for C++ TR1
library extensions. SP1 version (15.00.30729.01) is
also available in Microsoft Windows SDK for Win-
dows 7.

• Visual C++ 2010 (also known as Visual C++ 10.0)
was released on April 12, 2010. It uses a SQL Server
Compact database to store information about the
source code, including IntelliSense information, for
better IntelliSense and code-completion support.[28]
However, Visual C++ 2010 does not support Intel-
lisense for C++/CLI.[29] This version adds a C++ par-
allel computing library called the Parallel Patterns Li-
brary, partial support for C++11, significantly im-
proved IntelliSense based on the Edison Design Group
front end,[30] and performance improvements to both
the compiler and generated code.[31] This version is
built on .NET 4.0, but supports compiling to machine
code. The partial C++11 support mainly consists of
six compiler features:[32] lambdas, rvalue references,
auto, decltype, static_assert, and nullptr. C++11 also
supports library features (e.g., moving the TR1 com-
ponents from std::tr1 namespace directly to std names-
pace). Variadic templates were also considered, but
delayed until some future version due to having a lower
priority, which stemmed from the fact that — unlike
other costly-to-implement features (lambda, rvalue
references) — variadic templates would benefit only
a minority of library writers rather than the majority
of compiler end users.[33] By default, all applications
compiled against Visual C++ 2010 Runtimes only
work on Windows XP SP2 and later. The RTM ver-
sion (16.00.30319) is also available in Windows SDK
for Windows 7 and .NET Framework 4 (WinSDK
v7.1).[34] SP1 version (16.00.40219) is available as
part of Visual Studio 2010 Service Pack 1 or through
the Microsoft Visual C++ 2010 Service Pack 1 Com-
piler Update for the Windows SDK 7.1.[35]

• Visual C++ 2012 (also known as Visual C++ 11.0)
was released on August 15, 2012. It features improved
C++11 support, and support for Windows Runtime

development.[36]

• Visual C++ 2013 (also known as Visual C++ 12.0)
was released on October 17, 2013. It features fur-
ther C++11 and C99 support, and introduces a REST
SDK.[37]

• Visual C++ 2015 (also known as Visual C++ 14.0)
was released on July 20, 2015.[38] It features improved
C++11/14/17 support.[39]

43.2 Compatibility

43.2.1 ABI

The Visual C++ compiler ABI have historically changed
between major compiler releases.[40] This is especially the
case for STL containers, where container sizes have varied a
lot between compiler releases.[41] Microsoft therefore rec-
ommends against using C++ interfaces at module bound-
aries when one wants to enable client code compiled using
a different compiler version. Instead of C++, Microsoft
recommends using C[42] or COM[43] interfaces, which are
designed to have a stable ABI between compiler releases.

43.2.2 C runtime libraries

Visual C++ ships with different versions of C runtime
libraries.[44] This means users can compile their code with
any of the available libraries. However, this can cause some
problems when using different components (DLLs, EXEs)
in the same program. A typical example is a program using
different libraries. The user should use the same C Run-
Time for all the program’s components unless the impli-
cations are understood. Microsoft recommends using the
multithreaded, dynamic link library (/MD or /MDd com-
piler option) to avoid possible problems.[44]

43.2.3 C99

Although the product originated as an IDE for the C pro-
gramming language, for many years the compiler’s support
for that language conformed only to the original edition of
the C standard, dating from 1989. The later revisions of the
standard, C99 and C11, were not supported at all[45] until
Visual C++ 2012, which added support for various C99 fea-
tures in its C mode (including designated initializers, com-
pound literals, and the _Bool type). Visual C++ 2013 sig-
nificantly improved the C99 support, though it is still not
complete.[46] Visual C++ 2015 further improves the C99

https://en.wikipedia.org/wiki/Windows_98
https://en.wikipedia.org/wiki/Windows_Me
https://en.wikipedia.org/wiki/Microsoft_Windows_SDK
https://en.wikipedia.org/wiki/Microsoft_Windows_SDK
https://en.wikipedia.org/wiki/C++_Technical_Report_1
https://en.wikipedia.org/wiki/Microsoft_Windows_SDK
https://en.wikipedia.org/wiki/Microsoft_Windows_SDK
https://en.wikipedia.org/wiki/SQL_Server_Compact
https://en.wikipedia.org/wiki/SQL_Server_Compact
https://en.wikipedia.org/wiki/IntelliSense
https://en.wikipedia.org/wiki/Parallel_Patterns_Library
https://en.wikipedia.org/wiki/Parallel_Patterns_Library
https://en.wikipedia.org/wiki/C++11
https://en.wikipedia.org/wiki/Edison_Design_Group
https://en.wikipedia.org/wiki/Machine_code
https://en.wikipedia.org/wiki/Machine_code
https://en.wikipedia.org/wiki/Variadic_template
https://en.wikipedia.org/wiki/Microsoft_Windows_SDK
https://en.wikipedia.org/wiki/Microsoft_Windows_SDK
https://en.wikipedia.org/wiki/Windows_Runtime
https://en.wikipedia.org/wiki/C99
https://en.wikipedia.org/wiki/Representational_state_transfer
https://en.wikipedia.org/wiki/Application_binary_interface
https://en.wikipedia.org/wiki/C_(programming_language)
https://en.wikipedia.org/wiki/Component_Object_Model
https://en.wikipedia.org/wiki/Dynamic-link_library
https://en.wikipedia.org/wiki/EXE
https://en.wikipedia.org/wiki/Library_(computing)
https://en.wikipedia.org/wiki/C_standard_library
https://en.wikipedia.org/wiki/C_standard_library
https://en.wikipedia.org/wiki/Thread_(computer_science)
https://en.wikipedia.org/wiki/C_(programming_language)
https://en.wikipedia.org/wiki/ANSI_C
https://en.wikipedia.org/wiki/C99
https://en.wikipedia.org/wiki/C11_(C_standard_revision)

82 CHAPTER 43. VISUAL C++

support, with full support of the C99 Standard Library, ex-
cept for features that require C99 language features not yet
supported by the compiler.[47]

43.3 Common MSVC version

The predefined macro _MSC_VER indicates the major and
minor version numbers of the Visual C++ compiler. The
macro’s value is an integer literal in which the last two digits
indicate the minor version number and the preceding digits
indicate the major version number.
Here are values of _MSC_VER for various versions of the
Visual C++ compiler:
MSVC++ 5.0 _MSC_VER == 1100 MSVC++ 6.0
_MSC_VER == 1200 MSVC++ 7.0 _MSC_VER == 1300
MSVC++ 7.1 _MSC_VER == 1310 (Visual Studio 2003)
MSVC++ 8.0 _MSC_VER == 1400 (Visual Studio 2005)
MSVC++ 9.0 _MSC_VER == 1500 (Visual Studio 2008)
MSVC++ 10.0 _MSC_VER == 1600 (Visual Studio 2010)
MSVC++ 11.0 _MSC_VER == 1700 (Visual Studio 2012)
MSVC++ 12.0 _MSC_VER == 1800 (Visual Studio 2013)
MSVC++ 14.0 _MSC_VER == 1900 (Visual Studio 2015)

These version numbers refer to the major version number of
Visual Studio, which can be seen inside the Visual Studio
“About” box. It does not refer to the year in the name. A
thorough list is available.[48]

43.4 Controversy

Without any announcement from Microsoft, Visual Stu-
dio 2015 Update 2 started generating telemetry calls in
compiled binaries. After some users contacted Microsoft
about this problem, Microsoft said they would remove these
telemetry calls when compiling with the future Visual Stu-
dio 2015 Update 3.[49][50] The function in question was re-
moved from the Visual C++ CRT static libraries in Visual
Studio 2015 Update 3.

43.5 See also

• Microsoft Visual Studio

43.6 References
[1] “Visual C++ adds Windows support”. InfoWorld. February

22, 1993. p. 17.

[2] Lextrait, Vincent (January 2010). “The Programming Lan-
guages Beacon, v10.0”. Retrieved 14 March 2010.

[3] “Do I need these Microsoft Visual C++ redistributables?”.
Ask Leo!. Retrieved 2012-11-18.

[4] Ladd, Scott Robert (August 1, 1990). “Optimizing With
Microsoft C 6.0”.

[5] Retrieved from http://support.microsoft.com/kb/196831.

[6] “Visual C++ is a strong development tool”. InfoWorld. June
21, 1993. p. 94.

[7] “Rival DOS Extenders debut at show”. InfoWorld. March 1,
1993. p. 18.

[8] “Visual C++ 1.5 integrates OLE, ODBC”. InfoWorld.
November 8, 1993. p. 5.

[9] “Microsoft set to prerelease 32-bit Visual C++”. InfoWorld.
July 19, 1993. p. 12.

[10] “C++ IDEs evolve”. InfoWorld. April 4, 1994. p. 79.

[11] “Microsoft Visual C++ Strategy”.

[12] “Obsolete Products”.

[13] Toth, Viktor (1996). “1”. Visual C++ 4.0 unleashed. In-
dianapolis: SAMS Publishing. ISBN 9780672308741. Re-
trieved 26 July 2013.

[14] “History of Visual Studio (Part 3)”.

[15] “Major Changes from Visual C++ 4.0 to 4.2”.

[16] “Major Changes from Visual C++ 4.2 to 5.0”.

[17] “Microsoft Visual C++ 5.0 Learning Edition”. Archived
from the original on April 27, 1999.

[18] “Microsoft Visual C++ 5.0 Professional Edition”. Archived
from the original on April 27, 1999.

[19] “Microsoft Visual C++ 5.0 Enterprise Edition”. Archived
from the original on April 17, 1999.

[20] “Microsoft Visual C++ 5.0 RISC Edition”. Archived from
the original on April 29, 1999.

[21] “Major Changes from Visual C++ 5.0 to 6.0”.

[22] This page stresses that Users must also be running Windows
98, Windows NT 4.0, or Windows 2000. Retrieved from
http://msdn2.microsoft.com/en-us/vstudio/aa718349.aspx.

[23] Douglas Boling :Programming Microsoft Windows CE .NET,
Third Edition Microsoft Press; 3rd edition (June 25,
2003) Paperback: 1264 pages ISBN 978-0735618848 –
Companion CD with Microsoft eMbedded Visual C++ 4.0
Service Pack 2

[24] How to: Modify WINVER and _WIN32_WINNT

[25] Breaking Changes

https://en.wikipedia.org/wiki/Microsoft_Visual_Studio
https://books.google.com/books?id=vjsEAAAAMBAJ
http://www.lextrait.com/Vincent/implementations.html
http://www.lextrait.com/Vincent/implementations.html
http://ask-leo.com/do_i_need_these_microsoft_visual_c_redistributables.html
http://www.drdobbs.com/windows/optimizing-with-microsoft-c-60/184408398
http://www.drdobbs.com/windows/optimizing-with-microsoft-c-60/184408398
http://support.microsoft.com/kb/196831
https://books.google.com/books?id=OjsEAAAAMBAJ
https://books.google.com/books?id=fzwEAAAAMBAJ
https://books.google.com/books?id=8ToEAAAAMBAJ
https://books.google.com/books?id=mTsEAAAAMBAJ
https://books.google.com/books?id=FTsEAAAAMBAJ
http://accu.org/index.php/journals/1771
http://support.microsoft.com/gp/lifeobsoleteproducts
http://doc.sumy.ua/prog/unleash4/vcu01fi.htm
https://books.google.com/books?id=93o_AQAAIAAJ&q=visual+c%252B%252B+4.0+unleashed&dq=visual+c%252B%252B+4.0+unleashed&hl=en&sa=X&ei=jyjzUdyFGaSbygGnjIHgBQ&ved=0CGUQ6AEwCQ
https://en.wikipedia.org/wiki/SAMS_Publishing
https://en.wikipedia.org/wiki/International_Standard_Book_Number
https://en.wikipedia.org/wiki/Special:BookSources/9780672308741
http://blogs.msdn.com/ricom/archive/2009/10/07/my-history-of-visual-studio-part-3.aspx
http://msdn.microsoft.com/en-us/library/aa697418(VS.71).aspx
http://msdn.microsoft.com/en-us/library/aa697419(VS.71).aspx
https://web.archive.org/web/19990427114135/http://www.microsoft.com/products/prodref/199_ov.htm
http://www.microsoft.com/products/prodref/199_ov.htm
https://web.archive.org/web/19990427101205/http://www.microsoft.com/products/prodref/197_ov.htm
http://www.microsoft.com/products/prodref/197_ov.htm
https://web.archive.org/web/19990417134138/http://www.microsoft.com/products/prodref/198_ov.htm
http://www.microsoft.com/products/prodref/198_ov.htm
https://web.archive.org/web/19990429121236/http://www.microsoft.com/products/prodref/501_ov.htm
http://www.microsoft.com/products/prodref/501_ov.htm
http://msdn.microsoft.com/en-us/library/aa729389(VS.71).aspx
http://msdn2.microsoft.com/en-us/vstudio/aa718349.aspx
https://en.wikipedia.org/wiki/Special:BookSources/9780735618848
http://examples.oreilly.de/english_examples/9780735618848/cd_contents/Readme.txt
http://examples.oreilly.de/english_examples/9780735618848/cd_contents/Readme.txt
http://msdn.microsoft.com/en-us/library/6sehtctf(v=VS.90).aspx
http://msdn.microsoft.com/en-us/library/bb531344(v=VS.90).aspx

43.7. EXTERNAL LINKS 83

[26] Windows Platforms (CRT)

[27] “Visual C++ 2008 Breaking Changes”.

[28] Visual C++ Team Blog. “IntelliSense, part 2: The Future”.
Retrieved March 12, 2008.

[29] “Why IntelliSense is not supported for C++/CLI in Visual
Studio 2010”. Retrieved March 13, 2011.

[30] Visual C++ Team Blog. “Rebuilding Intellisense”.

[31] Visual C++ Team Blog. “Visual C++ Code Generation in
Visual Studio 2010”.

[32] “C++0x Core Language Features In VC10: The Table”.

[33] “Stephan T. Lavavej: Everything you ever wanted to know
about nullptr”.

[34] Microsoft Windows SDK Blog. “Released: Windows SDK
for Windows 7 and .NET Framework 4”.

[35] FIX: Visual C++ compilers are removed when you upgrade
Visual Studio 2010 Professional or Visual Studio 2010 Ex-
press to Visual Studio 2010 SP1 if Windows SDK v7.1 is
installed

[36] “What’s New for Visual C++ in Visual Studio 2012”.
Microsoft Developer Network. Microsoft. Retrieved
September 20, 2015.

[37] “What’s New for Visual C++ in Visual Studio 2013”.
Microsoft Developer Network. Miicrosoft. Retrieved
September 20, 2015.

[38] Eric Battalio (July 20, 2015). “Visual Studio 2015 RTM
Now Available”. Visual C++ Team Blog. Microsoft.

[39] Stephan T. Lavavej (June 19, 2015). “C++11/14/17 Fea-
tures In VS 2015 RTM”. Visual C++TeamBlog. Microsoft.

[40] Microsoft MSDN: Breaking Changes in Visual C++

[41] Microsoft MSDN: Containers (Modern C++)

[42] Microsoft MSDN: Portability At ABI Boundaries (Modern
C++)

[43] Microsoft forum: Binary compatibility across Visual C++
versions

[44] C Run-Time Libraries

[45] “C99 support”. Microsoft Connect.

[46] Pat Brenner (July 19, 2013). “C99 library support in Visual
Studio 2013”. Visual C++ Team Blog. Microsoft.

[47] “What’s New for Visual C++ in Visual Studio 2015”. Mi-
crosoft Developer Network. Microsoft.

[48] “Pre-defined Compiler Macros / Wiki / Compilers”. source-
forge.net. Retrieved 2016-02-11.

[49] Reviewing Microsoft’s Automatic Insertion of Telemetry
into C++ Binaries

[50] “Visual Studio adding telemetry function calls to binary? •
/r/cpp”. reddit. Retrieved 2016-08-17.

43.7 External links
• Microsoft’s Visual C++ Developer Center

• Building Win32 Applications Using Visual C++ 2005
Express

• Visual C++ Tools and Templates in Visual Studio Edi-
tions

• Visual C++ standalone build tools

• Microsoft’s ‘Going Native’ Channel Nine show

• Rejuvenating the Microsoft C/C++ Compiler,
September 2015

http://msdn.microsoft.com/en-us/library/ws0swas0(VS.100).aspx
http://msdn.microsoft.com/en-us/library/bb531344.aspx?ppud=4
http://blogs.msdn.com/vcblog/archive/2008/02/29/intellisense-part-2-the-future.aspx
http://blogs.msdn.com/b/vcblog/archive/2011/03/03/10136696.aspx
http://blogs.msdn.com/b/vcblog/archive/2011/03/03/10136696.aspx
http://blogs.msdn.com/b/vcblog/archive/2009/05/27/rebuilding-intellisense.aspx
http://blogs.msdn.com/vcblog/archive/2009/11/02/visual-c-code-generation-in-visual-studio-2010.aspx
http://blogs.msdn.com/vcblog/archive/2009/11/02/visual-c-code-generation-in-visual-studio-2010.aspx
http://blogs.msdn.com/vcblog/archive/2010/04/06/c-0x-core-language-features-in-vc10-the-table.aspx
http://channel9.msdn.com/shows/Going+Deep/Stephan-T-Lavavej-Everything-you-ever-wanted-to-know-about-nullptr/
http://channel9.msdn.com/shows/Going+Deep/Stephan-T-Lavavej-Everything-you-ever-wanted-to-know-about-nullptr/
http://blogs.msdn.com/b/windowssdk/archive/2010/05/25/released-windows-sdk-for-windows-7-and-net-framework-4.aspx
http://blogs.msdn.com/b/windowssdk/archive/2010/05/25/released-windows-sdk-for-windows-7-and-net-framework-4.aspx
http://support.microsoft.com/kb/2519277/en-us
http://support.microsoft.com/kb/2519277/en-us
http://support.microsoft.com/kb/2519277/en-us
http://support.microsoft.com/kb/2519277/en-us
https://msdn.microsoft.com/en-us/library/vstudio/hh409293(v=vs.110).aspx
https://en.wikipedia.org/wiki/Microsoft_Developer_Network
https://msdn.microsoft.com/en-us/library/vstudio/hh409293(v=vs.120).aspx
https://en.wikipedia.org/wiki/Microsoft_Developer_Network
http://blogs.msdn.com/b/vcblog/archive/2015/07/20/visual-studio-2015-rtm-now-available.aspx
http://blogs.msdn.com/b/vcblog/archive/2015/07/20/visual-studio-2015-rtm-now-available.aspx
http://blogs.msdn.com/b/vcblog/archive/2015/06/19/c-11-14-17-features-in-vs-2015-rtm.aspx
http://blogs.msdn.com/b/vcblog/archive/2015/06/19/c-11-14-17-features-in-vs-2015-rtm.aspx
http://msdn.microsoft.com/en-us/library/bb531344.aspx
http://msdn.microsoft.com/en-us/library/vstudio/hh438470.aspx
http://msdn.microsoft.com/en-us/library/vstudio/hh438475.aspx
http://msdn.microsoft.com/en-us/library/vstudio/hh438475.aspx
http://social.msdn.microsoft.com/Forums/en/vcgeneral/thread/86eda6a7-4d90-4e19-a9d4-6cbe22b661f4
http://social.msdn.microsoft.com/Forums/en/vcgeneral/thread/86eda6a7-4d90-4e19-a9d4-6cbe22b661f4
http://msdn.microsoft.com/en-us/library/abx4dbyh.aspx
https://connect.microsoft.com/VisualStudio/feedback/details/653336/c99-support
http://blogs.msdn.com/b/vcblog/archive/2013/07/19/c99-library-support-in-visual-studio-2013.aspx
http://blogs.msdn.com/b/vcblog/archive/2013/07/19/c99-library-support-in-visual-studio-2013.aspx
https://msdn.microsoft.com/en-us/library/hh409293(v=vs.140).aspx
https://sourceforge.net/p/predef/wiki/Compilers/#microsoft-visual-c
https://www.infoq.com/news/2016/06/visual-cpp-telemetry
https://www.infoq.com/news/2016/06/visual-cpp-telemetry

http://msdn.microsoft.com/en-us/vstudio/hh386302.aspx
http://blogs.msdn.com/brianjo/archive/2004/08/08/211085.aspx
http://blogs.msdn.com/brianjo/archive/2004/08/08/211085.aspx
http://msdn2.microsoft.com/en-us/library/hs24szh9.aspx
http://msdn2.microsoft.com/en-us/library/hs24szh9.aspx
http://landinghub.visualstudio.com/visual-cpp-build-tools
http://channel9.msdn.com/Shows/C9-GoingNative
http://blogs.msdn.com/b/vcblog/archive/2015/09/25/rejuvenating-the-microsoft-c-c-compiler.aspx

Chapter 44

IBM VisualAge

VisualAgewas the name of a family of computer integrated
development environments from IBM, which included sup-
port for multiple programming languages. VisualAge was
first released in the 1980s and was still available in 2011.
VisualAge was also marketed as “VisualAge Smalltalk”.
IBM has stated that XL C/C++ is the ‘follow-on’ product
to VisualAge.[1]

44.1 Early history

VisualAge was born in the IBM development lab in Cary,
North Carolina, which was established in 1984 and had re-
sponsibility for application development tools. The EZ-VU
dialog manager product, a personal computer derivative of
the user interface elements of the ISPF 327x product was
one of the first products in this family. The lab also had
a group which was one of the early adopters of object-
oriented programming technologies within IBM using an
internally developed language called ClassC to develop ap-
plications with more sophisticated graphical user interfaces
which were just starting to be widely available.
Eventually, the availability of usable implementations of
Smalltalk for IBM PC-AT class machines allowed IBM ad-
vanced technology projects to experiment with Smalltalk.
At about the same time, visual interface construction tools
were coming up on the radar screens. Smalltalk research
projects such as InterCons by David N. Smith of IBM, and
Fabrik by a team at Apple led by Dan Ingalls were build-
ing interactive graphical applications built from composi-
tion of graphical primitives. Higher level construction of
user interfaces was evidenced by other tools such as Jean-
Marie Hullot’s interface builder first done in Lisp and then
evolved to become the Interface Builder tool in NeXTStep,
and later Mac OS X, which allowed for building user in-
terfaces by WYSIWYG composition of UI widgets which
could be “wired” to each other and to application logic writ-
ten in Objective-C.
The original prototype which led to VisualAge was an

attempt “to make something like the NeXT interface
builder”[2] within the Smalltalk/V development environ-
ment. By the time VisualAge was released as a product,
much more emphasis was placed on visual construction of
application logic as well as of the user interface. This em-
phasis was in part due to the “positioning” for “strategic”
reasons of Smalltalk as a generator rather than a language
within IBM’s Systems Application Architecture.

44.1.1 Name brand

The name VisualAge was the result of a contest between
the members of the development team. After the initial re-
lease of VisualAge/Smalltalk the name VisualAge became
a brand of its own and VisualAges were produced for sev-
eral different combinations of languages and platforms.
Languages (not every language is available on every plat-
form listed):

• BASIC

• COBOL

• C

• C++

• EGL

• Fortran

• Java

• Pacbase

• PL/I

• IBM RPG

• Smalltalk

Platforms:

84

https://en.wikipedia.org/wiki/Integrated_development_environment
https://en.wikipedia.org/wiki/Integrated_development_environment
https://en.wikipedia.org/wiki/IBM
https://en.wikipedia.org/wiki/Programming_languages
https://en.wikipedia.org/wiki/IBM_XL_C++
https://en.wikipedia.org/wiki/Cary,_North_Carolina
https://en.wikipedia.org/wiki/Cary,_North_Carolina
https://en.wikipedia.org/wiki/Programming_tool
https://en.wikipedia.org/wiki/EZ-VU
https://en.wikipedia.org/wiki/ISPF
https://en.wikipedia.org/wiki/IBM_3270
https://en.wikipedia.org/wiki/Object-oriented_programming
https://en.wikipedia.org/wiki/Object-oriented_programming
https://en.wikipedia.org/wiki/ClassC
https://en.wikipedia.org/wiki/Graphical_user_interface
https://en.wikipedia.org/wiki/Smalltalk
https://en.wikipedia.org/wiki/IBM_PC
https://en.wikipedia.org/wiki/InterCons
https://en.wikipedia.org/wiki/David_N._Smith
https://en.wikipedia.org/wiki/Fabrik_(software)
https://en.wikipedia.org/wiki/Dan_Ingalls
https://en.wikipedia.org/wiki/Jean-Marie_Hullot
https://en.wikipedia.org/wiki/Jean-Marie_Hullot
https://en.wikipedia.org/wiki/Lisp_(programming_language)
https://en.wikipedia.org/wiki/Interface_Builder
https://en.wikipedia.org/wiki/NeXTStep
https://en.wikipedia.org/wiki/Mac_OS_X
https://en.wikipedia.org/wiki/WYSIWYG
https://en.wikipedia.org/wiki/Objective-C
https://en.wikipedia.org/wiki/Interface_Builder
https://en.wikipedia.org/wiki/Interface_Builder
https://en.wikipedia.org/wiki/Smalltalk/V
https://en.wikipedia.org/wiki/Systems_Application_Architecture
https://en.wikipedia.org/wiki/BASIC
https://en.wikipedia.org/wiki/COBOL
https://en.wikipedia.org/wiki/C_(programming_language)
https://en.wikipedia.org/wiki/C++
https://en.wikipedia.org/wiki/EGL_(programming_language)
https://en.wikipedia.org/wiki/Fortran
https://en.wikipedia.org/wiki/Java_(programming_language)
https://en.wikipedia.org/wiki/Pacbase
https://en.wikipedia.org/wiki/PL/I
https://en.wikipedia.org/wiki/IBM_RPG
https://en.wikipedia.org/wiki/Smalltalk

44.3. REFERENCES 85

• IBM AIX

• OS/2

• i5/OS (formerly named OS/400)

• Linux

• Mac OS X

• Microsoft Windows

• TPF

• z/VM

• z/OS (formerly named OS/390, MVS)

• z/VSE

44.1.2 Evolution

Most of the members of the VisualAge family were written
in Smalltalk no matter which language they supported for
development. The IBM implementation of Smalltalk was
produced by Object Technology International which was
acquired by IBM and run as a wholly owned subsidiary for
several years before being absorbed into the overall IBM
organization.
VisualAge for Java was based on an extended Smalltalk
virtual machine which executed both Smalltalk and Java
byte codes. Java natives were actually implemented in
Smalltalk.
VisualAge Micro Edition, which supported development of
embedded Java applications and cross system development,
was a re-implementation of the IDE in Java. This version
of VisualAge morphed into the Eclipse Framework.
Various members of the family have been replaced by prod-
ucts in the WebSphere Studio family of products. As
of 2009, the original VisualAge product continues to be
promoted by IBM as “VisualAge Smalltalk”.[3] In 2005,
Smalltalk specialist Instantiations, Inc.[4] acquired a world-
wide license to VisualAge Smalltalk, and offers an “en-
hanced product” VA Smalltalk.[5][6] The C, C++ and For-
tran compiler on AIX, Linux and z/OS are renamed as XL
C/C++ series.

44.2 See also

• IBM Cross System Product (CSP): an article which
discusses IBM VisualAge Generator

• Source Code in Database

44.3 References

[1] “Visualage c++”. IBM. Retrieved Jan 26, 2011.

[2] http://talklikeaduck.denhaven2.com/articles/2008/10/15/
will-it-go-round-in-circles IBM, Smalltalk and VisualAge

[3] “Product Overview”. IBM. Retrieved May 19, 2009.

[4] VisualAge Smalltalk Transition FAQ

[5] “Smalltalk Products Home”. Instantiations. Retrieved May
19, 2009.

[6] “Instantiations History”. Instantiations. Retrieved May 19,
2009.

Notes

VisualAge – Smalltalk

• IBM Corp., IBM, (1994). “IBM VisualAge (printed
paper bound retail hardboard box)”. . IBM Corp.
Part Number 14H0969 and lid Part Number 30H2314
Product Number 17H7495 Bar code: 087944096085

• IBM Corp., IBM, (Spring 1995). “Smalltalk resource
catalogue”. . IBM Corp. (96 pages) Product Number
G325-0813-01 Part Number 30H2238

• IBM Corp., IBM, (October 1994). “Development
guide”. 1st edition. (250 pages) Product Number
SC34-4495-00 Part Number 14H0295

• IBM Corp., IBM, (October 1994). “Program-
mer’s reference”. 2nd edition. IBM Corp. (458
pages) Product Number SC34-4493-01 Part Number
14H0297

• IBM Corp., IBM, (October 1994). “IBM Smalltalk”.
2nd edition. IBM Corp. (172 pages) Product Number
SC34-4491-01 Part Number 14H0296

• IBM Corp., IBM, (October 1994). “Installation guide
booklet”. 2nd edition. IBM Corp. (48 pages) Part
Number 14H1071

• IBM Corp., IBM, (October 1994). “Programmer’s
guide to building”. 2nd edition. IBM Corp. (149
pages) Product Number SC34-4496-00 Part Number
14H1070

• IBM Corp., IBM, (October 1994). “User’s Guide
and Reference”. 2nd edition. IBM Corp. (642
pages) Product Number SC34-4490-01 Part Number
14H0922;

https://en.wikipedia.org/wiki/IBM_AIX
https://en.wikipedia.org/wiki/OS/2
https://en.wikipedia.org/wiki/I5/OS
https://en.wikipedia.org/wiki/OS/400
https://en.wikipedia.org/wiki/Linux
https://en.wikipedia.org/wiki/Mac_OS_X
https://en.wikipedia.org/wiki/Microsoft_Windows
https://en.wikipedia.org/wiki/Transaction_Processing_Facility
https://en.wikipedia.org/wiki/Z/VM
https://en.wikipedia.org/wiki/Z/OS
https://en.wikipedia.org/wiki/OS/390
https://en.wikipedia.org/wiki/MVS
https://en.wikipedia.org/wiki/Z/VSE
https://en.wikipedia.org/wiki/Object_Technology_International
https://en.wikipedia.org/wiki/Virtual_machine
https://en.wikipedia.org/wiki/Byte_code
https://en.wikipedia.org/wiki/Eclipse_(computing)
https://en.wikipedia.org/wiki/WebSphere
https://en.wikipedia.org/wiki/IBM_XL_C++
https://en.wikipedia.org/wiki/IBM_XL_C++
https://en.wikipedia.org/wiki/IBM_Cross_System_Product_(CSP)
https://en.wikipedia.org/wiki/Source_Code_in_Database
http://www.ibm.com/software/awdtools/vacpp
http://talklikeaduck.denhaven2.com/articles/2008/10/15/will-it-go-round-in-circles
http://talklikeaduck.denhaven2.com/articles/2008/10/15/will-it-go-round-in-circles
http://www.ibm.com/software/ad/smalltalk/
https://en.wikipedia.org/wiki/IBM
http://www.instantiations.com/company/ibm-transition.html
http://www.instantiations.com/products/vasmalltalk/index.html
http://www.instantiations.com/company/history.html

86 CHAPTER 44. IBM VISUALAGE

IBM VisualAge for COBOL Standard is “Year 2000 ready”
and Requires: Warp Version 4.0 plus FixPak 1 or Windows
NT 4.0 plus Service Pack 3

• IBM Corp., IBM, (1997). “IBM VisualAge for
COBOL Standard (printed retail card box)”. Ver-
sion 2.1. IBM Corp. Product Number P4301938 Bar
Code: 1264301938000104 Part Number 4301978

• IBM Corp., IBM, (1997). “IBM VisualAge for
COBOL Getting Started on Windows Manual”. IBM
Corp. (130 pages) Product number GC26-8944-01
Bar Code: GC26-8944-01 Part No. 4301981

• IBM Corp., IBM, (September 1997). “IBM Visu-
alAge for COBOL Getting Started on OS/2 Manual”.
IBM Corp. 2nd Edition. (156 pages) Document Num-
ber GC26-9051-01

• IBM Corp., IBM, (April 1997). “Resource Cata-
logue for IBM COBOL Family V 1”. Release 4. (44
pages) Product Number GC26-8488-03 Part Number
4226010

44.4 External links
• Description from Portland Pattern Repository

• VisualAge Enterprise Suite

• VA Smalltalk at Instantiations

• VisualAge for Java Tips and Tricks

http://c2.com/cgi/wiki?VisualAge
http://www-306.ibm.com/software/awdtools/vaes/
http://www.instantiations.com/products/vasmalltalk/index.html
http://www.javadude.com/vaj/

Chapter 45

Watcom C/C++

Watcom C/C++ (currently Open Watcom C/C++) is a
compiler for C, C++ and Fortran. It was developed by
Watcom International Corporation.

45.1 History

Though no longer sold commercially by Sybase, the Wat-
com C/C++ compiler and the Watcom Fortran compiler
have been made available free of charge – for non com-
mercial usage, as the Open Watcom package.
The Open Watcom C/C++ version 1.4 release on Decem-
ber 2005 introduced Linux x86 as an experimental target,
supported from NT or OS/2 host platforms. There is code
for an abandoned QNX version, but libraries necessary for
it to be compiled could not be released as open source.
Stable version 1.9 was released in June 2010.[1]

A forked version 2.0 beta was released that supports 64-
bit hosts (Window and Linux), built-in text editor, 2-phase
build system, and the DOS version supports long filenames
(LFN).[2]

45.1.1 Release history

The Open Watcom Wiki has a comprehensive history.[3]

45.2 License

The Open Source Initiative has approved the license as open
source, but Debian, Fedora and the Free Software Founda-
tion have rejected it because “It requires you to publish the
source code publicly whenever you “Deploy” the covered
software, and “Deploy” is defined to include many kinds of
private use.”[4]

45.3 Design

The compiler can be operated from, and generate exe-
cutable code for, the DOS (MS-DOS, FreeDOS), OS/2,
Windows, Linux operating systems. It also supports NLM
targets for Novell NetWare. There is ongoing work to
extend the targeting to Linux[5] and modern BSD (e.g.,
FreeBSD) operating systems, running on x86, PowerPC,
and other processors.
The code is portable and, like many other open source com-
piler projects such as GCC or LCC the compiler backend
(code generator) is retargetable.

45.4 Uses

In the mid-1990s some of the most technically ambitious
MS-DOS computer games such as Doom,[3] Descent,[3]
Duke Nukem 3D,[3] and Rise of the Triad[6] were built using
Watcom C/C++, some such as ROTT using the DOS/4GW
protected mode extender with the Watcom compiler.
It was used to port the game Retro City Rampage to MS-
DOS in 2015.[7]

45.5 Variants

There is an unofficial fork[8] of Open Watcom V2 on
GitHub.[9] A variant of the 16bit DOS CRT library startup
was created with WASM.[10]

45.6 Compatibility

Open Watcom’s syntax supports many conventions in-
troduced by other compilers, such as Microsoft’s and
Borland’s, including differing conventions regarding (for in-
stance) the number of leading underscores on the “asm” tag.

87

https://en.wikipedia.org/wiki/Compiler
https://en.wikipedia.org/wiki/C_(programming_language)
https://en.wikipedia.org/wiki/C++
https://en.wikipedia.org/wiki/Fortran
https://en.wikipedia.org/wiki/Watcom_International_Corporation
https://en.wikipedia.org/wiki/Sybase
https://en.wikipedia.org/wiki/Fortran
https://en.wikipedia.org/wiki/QNX
https://en.wikipedia.org/wiki/Open_Source_Initiative
https://en.wikipedia.org/wiki/Open_source
https://en.wikipedia.org/wiki/Open_source
https://en.wikipedia.org/wiki/Debian
https://en.wikipedia.org/wiki/Fedora_(operating_system)
https://en.wikipedia.org/wiki/Free_Software_Foundation
https://en.wikipedia.org/wiki/Free_Software_Foundation
https://en.wikipedia.org/wiki/MS-DOS
https://en.wikipedia.org/wiki/FreeDOS
https://en.wikipedia.org/wiki/OS/2
https://en.wikipedia.org/wiki/Microsoft_Windows
https://en.wikipedia.org/wiki/Operating_systems
https://en.wikipedia.org/wiki/NetWare_Loadable_Module
https://en.wikipedia.org/wiki/Novell_NetWare
https://en.wikipedia.org/wiki/Linux
https://en.wikipedia.org/wiki/BSD
https://en.wikipedia.org/wiki/FreeBSD
https://en.wikipedia.org/wiki/X86
https://en.wikipedia.org/wiki/PowerPC
https://en.wikipedia.org/wiki/GNU_Compiler_Collection
https://en.wikipedia.org/wiki/LCC_(compiler)
https://en.wikipedia.org/wiki/MS-DOS
https://en.wikipedia.org/wiki/Computer_game
https://en.wikipedia.org/wiki/Doom_(1993_video_game)
https://en.wikipedia.org/wiki/Descent_(video_game)
https://en.wikipedia.org/wiki/Duke_Nukem_3D
https://en.wikipedia.org/wiki/Rise_of_the_Triad
https://en.wikipedia.org/wiki/DOS/4GW
https://en.wikipedia.org/wiki/Protected_mode
https://en.wikipedia.org/wiki/Retro_City_Rampage
https://en.wikipedia.org/wiki/MS-DOS
https://en.wikipedia.org/wiki/MS-DOS
https://en.wikipedia.org/wiki/Fork_(software_development)
https://en.wikipedia.org/wiki/GitHub
https://en.wikipedia.org/wiki/Open_Watcom_Assembler
https://en.wikipedia.org/wiki/Microsoft
https://en.wikipedia.org/wiki/Borland_Software_Corporation

88 CHAPTER 45. WATCOM C/C++

Code written specifically for another compiler rather than
standard-compliant C or C++ will often compile with the
Watcom compiler.
The compiler supports C89/C90 standards by default.
Open Watcom supports partial compatibility with the C99
standard. It implements the most commonly used parts of
the standard. However, they are enabled only through the
undocumented command-line switch “-za99”. Three C99
features have been bundled as C90 Extension since pre-
v1.0: C++ style comments (//), flexible array members,
trailing comma allowed in enum declaration.[11]

The compiler currently doesn’t support any new major C11
features, though the C library does include “Safe C” func-
tions. It is specified in ISO/IEC TR 24731-1[12][13] and
known as “Bounds-checking interfaces (Annex K)” in C11.
Some function name examples are strcpy_s(), memcpy_s(),
printf_s().[14] This library was released along with Open
Watcom 1.5 in April 2006.

45.7 See also
• Open Watcom Assembler

45.8 References
[1] “Latest Release (June 2010) – Open Watcom”. OpenWat-

com.org wiki.

[2] List of main differences of v1.9 to v2.0 Beta.

[3] History – Open Watcom. OpenWatcom.com wiki.

[4] Free Software Foundation. “Various Licenses and Com-
ments about Them”. GNU Operating System. Retrieved Dec
23, 2014.

[5] Installing Open Watcom on Linux – Open Watcom. Open-
Watcom.org wiki.

[6] “RotT was written in Watcom C++ v10.0 with the Rational
Systems DOS/4GW extender.”

[7] “How 5 years of burning ambition brought Retro City Ram-
page to DOS”. Gamasutra.

[8] “Open Watcom V2 Fork”.

[9] “Open Watcom V2 Fork Project on GitHub”.

[10] “pcdosasm.zip archive”. 2010-07-27. Retrieved 2014-
02-10. Modified Open Watcom C/C++ DOS 16-bit
..\STARTUP\DOS\CSTRT086.ASM code

[11] “C99 compliance in Open Watcom”. Archived from the
original on May 3, 2015. Retrieved 25 September 2015.

[12] ISO/IEC TR 24731-1; Extension to the C Library, Part 1:
Bounds-checking interfaces.

[13] WG14 N1969 — “Updated Field Experience With Annex
K — Bounds Checking Interfaces”, Carlos O’Donell, Martin
Sebor

[14] Open Watcom Safer C Library

45.9 External links
• Open Watcom, official website, (Archived March 17,

2015, at the Wayback Machine.)

• Open Watcom V1.9 binary downloads

• Open Watcom V2 Fork on GitHub

• Open Watcom V2 Fork binary downloads

• Paul Hsieh. (May 8, 2005). “The WATCOM C/C++
Programmer’s FAQ”. Retrieved Oct 7, 2008.

• Rick Grehan (October 1994). “Watcom C/C++ Gets
a New Face”. BYTE. 19 (10): 111. Archived from the
original on 1997-07-12. Retrieved 2011-05-14.

https://en.wikipedia.org/wiki/C99
https://en.wikipedia.org/wiki/ANSI_C#C90
https://en.wikipedia.org/wiki/C11_(C_standard_revision)
https://en.wikipedia.org/wiki/Open_Watcom_Assembler
http://www.openwatcom.org/index.php/Main_Page#Latest_Release_.28June_2010.29
https://open-watcom.github.io/open-watcom/
http://openwatcom.com/index.php/History
https://www.gnu.org/licenses/license-list.html#Watcom
https://www.gnu.org/licenses/license-list.html#Watcom
https://web.archive.org/web/20150506003855/http://openwatcom.org/index.php/Installing_Open_Watcom_on_Linux
http://www.gamasutra.com/view/news/248019/How_5_years_of_burning_ambition_brought_Retro_City_Rampage_to_DOS.php
http://www.gamasutra.com/view/news/248019/How_5_years_of_burning_ambition_brought_Retro_City_Rampage_to_DOS.php
http://open-watcom.github.io/open-watcom/
https://github.com/open-watcom
http://purl.net/xyzzy/dos/pcdosasm.htm#td
https://web.archive.org/web/20150503232909/http://openwatcom.org/index.php/C99_Compliance
http://openwatcom.org/index.php/C99_Compliance
http://openwatcom.org/index.php/C99_Compliance
http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1225.pdf
http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1225.pdf
http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1969.htm
http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1969.htm
http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1969.htm
https://web.archive.org/web/20150503192244/http://openwatcom.org/index.php/Safer_C_Library
http://openwatcom.org/
https://web.archive.org/web/20150317091931/http://www.openwatcom.org/index.php/Main_Page
https://en.wikipedia.org/wiki/Wayback_Machine
ftp://ftp.openwatcom.org/pub/
https://github.com/open-watcom/open-watcom-v2
https://en.wikipedia.org/wiki/GitHub
http://sourceforge.net/projects/openwatcom/files/current-build/
http://www.azillionmonkeys.com/qed/watfaq.shtml
http://www.azillionmonkeys.com/qed/watfaq.shtml
https://web.archive.org/web/19970712221411/http://www.byte.com/art/9410/sec12/art5.htm
https://web.archive.org/web/19970712221411/http://www.byte.com/art/9410/sec12/art5.htm
http://byte.com/art/9410/sec12/art5.htm
http://byte.com/art/9410/sec12/art5.htm

Chapter 46

Z88DK

Z88DK is a Small-C-derived cross compiler for a long list
of Z80 based computers. The name derives from the fact
that it was originally developed to target the Cambridge
Z88. Z88DK is much developed from Small-C and it ac-
cepts many features of ANSI C with the notable exception
of multi-dimensional arrays and prototyped function point-
ers.
It has been used for many software and hardware projects,
notably the REX DK (targeted to the REX 6000 platform)
and the S1 SDK (targeted to the S1 MP3 Player) teams.
The compiler is highly portable, and is known to be run
on AmigaOS, BeOS, HP-UX 9, Linux, BSD, Mac OS X,
Solaris, Win64, Win32, Win16 and MS-DOS.

46.1 Supported target platforms

As of the time of writing Z88DK supports the following
target platforms:

• Amstrad CPC

• Amstrad NC100

• Amstrad NC200

• Cambridge Z88

• Camputers Lynx

• Canon X-07

• CCE MC-1000

• Commodore 128 (in Z80 mode)

• CP/M based machines

• EACA Colour Genie EG2000

• Enterprise 64 and 128

• Epson PX-4

• Epson PX-8

• Exidy Sorcerer

• Galaksija

• Grundy NewBrain

• Jupiter Ace

• Lambda 8300

• Luxor ABC 80

• Luxor ABC 800

• Mattel Aquarius

• Memotech MTX

• MSX

• Nascom 1 and 2

• NEC PC-6001

• Pac-Man arcade cabinet hardware

• Philips P2000

• Philips VG5000

• C7420 module for the Philips Videopac + G7400

• Rabbit 2000/3000/4000 platform

• SAM Coupé

• Sega Master System

• Sega SC-3000

• Sharp MZ series

• Sharp OZ/QZ 700 family palmtop organizers

• Sharp X1

• Sinclair ZX80

89

https://en.wikipedia.org/wiki/Small-C
https://en.wikipedia.org/wiki/Cross_compiler
https://en.wikipedia.org/wiki/Zilog_Z80
https://en.wikipedia.org/wiki/Cambridge_Z88
https://en.wikipedia.org/wiki/Cambridge_Z88
https://en.wikipedia.org/wiki/ANSI_C
https://en.wikipedia.org/wiki/Array_data_structure
https://en.wikipedia.org/wiki/Function_pointer
https://en.wikipedia.org/wiki/Function_pointer
https://en.wikipedia.org/wiki/S1_MP3_Player
https://en.wikipedia.org/wiki/AmigaOS
https://en.wikipedia.org/wiki/BeOS
https://en.wikipedia.org/wiki/HP-UX
https://en.wikipedia.org/wiki/Linux
https://en.wikipedia.org/wiki/BSD
https://en.wikipedia.org/wiki/Mac_OS_X
https://en.wikipedia.org/wiki/Solaris_(operating_system)
https://en.wikipedia.org/wiki/Win64
https://en.wikipedia.org/wiki/Win32
https://en.wikipedia.org/wiki/Win16
https://en.wikipedia.org/wiki/MS-DOS
https://en.wikipedia.org/wiki/Amstrad_CPC
https://en.wikipedia.org/wiki/Amstrad_NC100
https://en.wikipedia.org/wiki/Amstrad_NC200
https://en.wikipedia.org/wiki/Cambridge_Z88
https://en.wikipedia.org/wiki/Camputers_Lynx
https://en.wikipedia.org/wiki/Canon_X-07
https://en.wikipedia.org/wiki/CCE_MC-1000
https://en.wikipedia.org/wiki/Commodore_128
https://en.wikipedia.org/wiki/CP/M
https://en.wikipedia.org/wiki/Colour_Genie
https://en.wikipedia.org/wiki/Enterprise_(computer)
https://en.wikipedia.org/wiki/Epson_PX-4
https://en.wikipedia.org/wiki/Epson_PX-8
https://en.wikipedia.org/wiki/Exidy_Sorcerer
https://en.wikipedia.org/wiki/Galaksija_(computer)
https://en.wikipedia.org/wiki/Grundy_NewBrain
https://en.wikipedia.org/wiki/Jupiter_Ace
https://en.wikipedia.org/wiki/Lambda_8300
https://en.wikipedia.org/wiki/ABC_80
https://en.wikipedia.org/wiki/ABC_800
https://en.wikipedia.org/wiki/Mattel_Aquarius
https://en.wikipedia.org/wiki/Memotech_MTX
https://en.wikipedia.org/wiki/MSX
https://en.wikipedia.org/wiki/Nascom
https://en.wikipedia.org/wiki/NEC_PC-6001
https://en.wikipedia.org/wiki/Pac-Man
https://en.wikipedia.org/wiki/Philips_P2000
https://en.wikipedia.org/wiki/Philips_VG5000
https://en.wikipedia.org/wiki/Philips_Videopac_+_G7400
https://en.wikipedia.org/wiki/Rabbit_Semiconductor
https://en.wikipedia.org/wiki/Rabbit_2000
https://en.wikipedia.org/wiki/SAM_Coup%C3%A9
https://en.wikipedia.org/wiki/Sega_Master_System
https://en.wikipedia.org/wiki/Sega_SC-3000
https://en.wikipedia.org/wiki/Sharp_MZ
https://en.wikipedia.org/wiki/Sharp_Wizard
https://en.wikipedia.org/wiki/Sharp_X1
https://en.wikipedia.org/wiki/Sinclair_ZX80

90 CHAPTER 46. Z88DK

• Sinclair ZX81

• Sinclair ZX Spectrum

• Sord M5

• S-OS

• Spectravideo SVI

• Peters Plus Sprinter

• Tatung Einstein

• TI calculators (TI-82, TI-83 series, TI-84 Plus series,
TI-85, TI-86)

• Timex Sinclair 2068

• TRS-80 (Tandy Radio Shack and clones)

• VTech VZ200/300 (also known as Laser 200)

• Xircom REX 6000 (also known as DataSlim)

46.2 See also
• Retargetable compiler

• Microcontroller

• SDCC

46.3 External links
• Z88DK Main website

• Z88DK Documentation

https://en.wikipedia.org/wiki/Sinclair_ZX81
https://en.wikipedia.org/wiki/ZX_Spectrum
https://en.wikipedia.org/wiki/Sord_M5
https://en.wikipedia.org/wiki/S-OS
https://en.wikipedia.org/wiki/Spectravideo
https://en.wikipedia.org/wiki/Sprinter_(computer)
https://en.wikipedia.org/wiki/Tatung_Einstein
https://en.wikipedia.org/wiki/Texas_Instruments
https://en.wikipedia.org/wiki/TI-82
https://en.wikipedia.org/wiki/TI-83_series
https://en.wikipedia.org/wiki/TI-84_Plus_series
https://en.wikipedia.org/wiki/TI-85
https://en.wikipedia.org/wiki/TI-86
https://en.wikipedia.org/wiki/Timex_Sinclair_2068
https://en.wikipedia.org/wiki/TRS_80
https://en.wikipedia.org/wiki/VTech
https://en.wikipedia.org/wiki/Laser_200
https://en.wikipedia.org/wiki/Xircom
https://en.wikipedia.org/wiki/REX_6000
https://en.wikipedia.org/wiki/Retargetable_compiler
https://en.wikipedia.org/wiki/Microcontroller
https://en.wikipedia.org/wiki/Small_Device_C_Compiler
http://www.z88dk.org/
http://www.z88dk.org/wiki/

Chapter 47

Borland C++

Borland C++ is a C and C++ programming environment
(that is, an integrated development environment) for MS-
DOS and Microsoft Windows. It was the successor to
Turbo C++, and included a better debugger, the Turbo De-
bugger, which was written in protected mode DOS.

47.1 Libraries

Object Windows Library (OWL): A set of C++ classes
to make it easier to develop professional graphical Windows
applications.
Turbo Vision: A set of C++ classes to create profes-
sional applications in DOS. Those classes mimics some of
the aspects of a Windows application like: dialog boxes,
messages pumps, menus, accelerators, etc.
Borland Graphics Interface: A library of functions for
doing simple, presentation-style 2D graphics. Drivers were
included for generic CGA, EGA and VGA capability, with
support for a limited number of video-modes, but more ad-
vanced, third-party drivers were also available.

47.2 Add-ons

Borland Power Pack for DOS: Used to create 16- and
32-bit protected mode DOS applications, which can access
a limited scope of the Windows API and call functions in
any Windows DLL.
Borland CodeGuard: Once installed and integrated
within the IDE, CodeGuard can insert instrumentalization
code in the final executables that can be used to monitor:
pointer usage, API calls, how many times some function is
called, and other features. If some error is found, a pop-up
window appears, the debugger can stop, or a log is written
to disk. Delivered for 16- and 32-bit applications.

47.3 Version history

• Borland C++ 2.0 – (1991, MS-DOS)

• Borland C++ 3.0 – (1991) New compiler support to
build Microsoft Windows applications.

• Borland C++ 3.1 – (1992) Introduction of Windows-
based IDE and application frameworks (OWL 1.0,
Turbovision 1.0)

• Borland C++ 4.0 – (1993, Windows 3.x) MS-DOS
IDE supported no longer, included OWL 2.0.

• Borland C++ 1.0 – (1992, OS/2)

• Borland C++ 1.5 – (1992, OS/2)

• Borland C++ 2.0 – (1993, OS/2) Support for 2.1 and
Warp 3. OWL 2.0. Included IBM SMART Toolset for
automatic migration of Windows applications to OS/2.
Last version.

• Borland C++ 4.01

• Borland C++ 4.02 – (1994)

• Borland C++ 4.5

• Borland C++ 4.51

• Borland C++ 4.52 – (1995) Official support for Win-
dows 95, OWL 2.5

• Borland C++ 4.53

• Borland C++ 5.0 – (1996, Windows 95) Released in
March 1996. Works on Windows 95 and Windows
NT 3.51. It does not (officially) work on Windows NT
4.0 (which was still in development at that time). 3rd
party tests exhibited some problems on NT 4.0. It does
not work in Windows 3.x or DOS. Despite that, it can
produce either Win32, Win16 or DOS programs.

• Borland C++ 5.01

91

https://en.wikipedia.org/wiki/C_(programming_language)
https://en.wikipedia.org/wiki/C++
https://en.wikipedia.org/wiki/Integrated_development_environment
https://en.wikipedia.org/wiki/MS-DOS
https://en.wikipedia.org/wiki/MS-DOS
https://en.wikipedia.org/wiki/Microsoft_Windows
https://en.wikipedia.org/wiki/Turbo_C++
https://en.wikipedia.org/wiki/Turbo_Debugger
https://en.wikipedia.org/wiki/Turbo_Debugger
https://en.wikipedia.org/wiki/Protected_mode
https://en.wikipedia.org/wiki/Object_Windows_Library
https://en.wikipedia.org/wiki/Turbo_Vision
https://en.wikipedia.org/wiki/Dialog_box
https://en.wikipedia.org/wiki/Message_passing
https://en.wikipedia.org/wiki/Menu_(computing)
https://en.wikipedia.org/wiki/Borland_Graphics_Interface
https://en.wikipedia.org/wiki/Color_Graphics_Adapter
https://en.wikipedia.org/wiki/Enhanced_Graphics_Adapter
https://en.wikipedia.org/wiki/Video_Graphics_Array
https://en.wikipedia.org/wiki/Protected_mode
https://en.wikipedia.org/wiki/Pointer_(computer_programming)
https://en.wikipedia.org/wiki/API
https://en.wikipedia.org/wiki/Debugger
https://en.wikipedia.org/wiki/MS-DOS
https://en.wikipedia.org/wiki/Integrated_development_environment
https://en.wikipedia.org/wiki/OS/2
https://en.wikipedia.org/wiki/OS/2
https://en.wikipedia.org/wiki/OS/2

92 CHAPTER 47. BORLAND C++

• Borland C++ 5.02 – (1997) Final independent release
of the Borland C++ IDE (subsequently replaced up by
the C++Builder series), final release to support com-
pilation to (real-mode) MS-DOS target. Windows NT
4.0 officially supported.

• Borland C++ Builder 4.0 + Borland C++ 5.02 –
(1999) Bundle combination to facilitate the migration
to C++Builder.

• Borland C++ 5.5 – Command-line compiler only (not
with IDE). It was later made available as a free down-
load.

47.4 Evolution of Borland C++

Borland C++ evolved in a number of steps:

Turbo C++ → Borland C++ → Borland
C++Builder → CodeGear C++Builder →
Embarcadero C++Builder

47.5 See also
• Turbo C

• Turbo C++

• Visual C++

47.6 External links
• Borland C++ Compiler (BCC32) Download

https://en.wikipedia.org/wiki/C++Builder
https://en.wikipedia.org/wiki/Turbo_C++
https://en.wikipedia.org/wiki/Embarcadero_Technologies
https://en.wikipedia.org/wiki/C++Builder
https://en.wikipedia.org/wiki/Turbo_C
https://en.wikipedia.org/wiki/Turbo_C++
https://en.wikipedia.org/wiki/Visual_C++
http://forms.embarcadero.com/forms/BCC32CompilerDownload

Chapter 48

C++/CX

C++/CX (component extensions) is a language extension
for C++ compilers from Microsoft that enables C++ pro-
grammers to write programs for the new Windows Runtime
platform, or WinRT.
The language extensions borrow syntax from C++/CLI but
target the Windows Runtime and native code instead of the
Common Language Runtime and managed code. It brings
a set of syntax and library abstractions that interface with
the COM-based WinRT programming model in a way that
is natural to native C++ programmers.
It is possible to call the Windows Runtime from Stan-
dard C++ via the Windows Runtime C++ Template Library
(WRL).

48.1 Extension syntax

C++/CX introduces syntax extensions for programming for
the Windows Runtime. The overall non platform-specific
syntax is compatible with the C++11 standard.

48.1.1 Objects

WinRT objects are created, or activated, using ref new and
assigned to variables declared with the ^ (hat) notation in-
herited from C++/CLI.
Foo^ foo = ref new Foo();

A WinRT variable is simply a pair of a pointer to virtual
method table and pointer to the object’s internal data.

Reference counting

A WinRT object is reference counted and thus handles sim-
ilarly to ordinary C++ objects enclosed in shared_ptrs. An
object will be deleted when there are no remaining refer-
ences that lead to it.

There is no garbage collection involved. Nevertheless, the
keyword gcnew has been reserved for possible future use.

Classes

Runtime classes There are special kinds of runtime
classes that may contain component extension constructs.
These are simply referred to as ref classes because they are
declared using ref class.
public ref class MyClass { };

Partial classes C++/CX introduces the concept of
partial classes. The feature allows a single class to be split
across multiple files, mainly to enable the XAML graphical
user interface design tools to auto-generate code in a sepa-
rate file in order not to break the logic written by the devel-
oper. The parts are later merged at compilation.
.NET languages like C# have had this feature for many
years. Partial classes have not yet made it into the C++
standard and cannot therefore be used in pure C++11.
A file that is generated and updated by the GUI-designer,
and thus should not be modified by the programmer. Note
the keyword partial.
// foo.private.h #pragma once partial ref class foo { private:
int id_; Platform::String^ name_; };

The file where the programmer writes user-interface logic.
The header in which the compiler-generated part of the
class is defined is imported. Note that the keyword partial
is not necessary.
// foo.public.h #pragma once #include “foo.private.h”
ref class foo { public: int GetId(); Platform::String^
GetName(); };

This is the file in which the members of the partial class are
implemented.

93

https://en.wikipedia.org/wiki/C++
https://en.wikipedia.org/wiki/Compiler
https://en.wikipedia.org/wiki/Microsoft
https://en.wikipedia.org/wiki/Windows_Runtime
https://en.wikipedia.org/wiki/C++/CLI
https://en.wikipedia.org/wiki/Native_code
https://en.wikipedia.org/wiki/Common_Language_Runtime
https://en.wikipedia.org/wiki/Managed_code
https://en.wikipedia.org/wiki/Component_Object_Model
https://en.wikipedia.org/wiki/Programming_model
https://en.wikipedia.org/wiki/C++
https://msdn.microsoft.com/en-us/library/hh438466.aspx
https://en.wikipedia.org/wiki/C++11
https://en.wikipedia.org/wiki/Virtual_method_table
https://en.wikipedia.org/wiki/Virtual_method_table
https://en.wikipedia.org/wiki/Opaque_pointer
https://en.wikipedia.org/wiki/Reference_counting
https://en.wikipedia.org/wiki/Smart_pointer#shared_ptr_and_weak_ptr
https://en.wikipedia.org/wiki/Garbage_collection_(computer_science)
https://en.wikipedia.org/wiki/Partial_classes
https://en.wikipedia.org/wiki/XAML
https://en.wikipedia.org/wiki/Graphical_user_interface
https://en.wikipedia.org/wiki/Graphical_user_interface
https://en.wikipedia.org/wiki/.NET_language
https://en.wikipedia.org/wiki/C_Sharp_(programming_language)
https://en.wikipedia.org/wiki/C++

94 CHAPTER 48. C++/CX

// foo.cpp #include “pch.h” #include “foo.public.h” int
foo::GetId() {return id_;} Platform::String^ foo::GetName
{return name_;}

Generics

Windows Runtime and thus C++/CX supports runtime-
based generics. Generic type information is contained in
the metadata and instantiated at runtime, unlike C++ tem-
plates which are compile-time constructs. Both are sup-
ported by the compiler and can be combined.
generic public ref class bag { property T
Item; };

48.2 Metadata

See also: Metadata (CLI)

All WinRT programs expose their declared classes and
members through metadata. The format is the same that
was standardized as part of the Common Language Infras-
tructure (CLI), the standard created from the .NET Frame-
work. Because of this, code can be shared across C++/CX,
CLI languages and Javascript that target Windows Runtime.

48.3 Runtime library

The C++/CX has a set of libraries that target the Windows
Runtime. These help bridge the functionality of the C++
Standard Library and WinRT.

48.4 Preprocessor-based detection

You can detect if C++/CX extension is turned on by testing
existence of __cplusplus_winrt preprocessor symbol.
#ifdef __cplusplus_winrt // C++/CX specific code goes
here… #endif

48.5 See also

• Windows Runtime

48.6 External links
• Inside the C++/CX Design – Visual C++ Team Blog

• GoingNative 3: The C++/CX Episode with Marian
Luparu – Channel 9

• WinRT and winmd Files – Marius Bancila’s Blog

• Visual C++ Language Reference (C++/CX)

https://en.wikipedia.org/wiki/Generic_programming
https://en.wikipedia.org/wiki/C++_template
https://en.wikipedia.org/wiki/C++_template
https://en.wikipedia.org/wiki/Metadata_(CLI)
https://en.wikipedia.org/wiki/Metadata
https://en.wikipedia.org/wiki/Common_Language_Infrastructure
https://en.wikipedia.org/wiki/Common_Language_Infrastructure
https://en.wikipedia.org/wiki/.NET_Framework
https://en.wikipedia.org/wiki/.NET_Framework
https://en.wikipedia.org/wiki/List_of_CLI_languages
https://en.wikipedia.org/wiki/C++_Standard_Library
https://en.wikipedia.org/wiki/C++_Standard_Library
https://en.wikipedia.org/wiki/Windows_Runtime
http://blogs.msdn.com/b/vcblog/archive/2011/10/20/10228473.aspx
http://channel9.msdn.com/Shows/C9-GoingNative/GoingNative-3-The-CCX-Episode-with-Marian-Luparu
http://channel9.msdn.com/Shows/C9-GoingNative/GoingNative-3-The-CCX-Episode-with-Marian-Luparu
http://mariusbancila.ro/blog/tag/ccx/
http://msdn.microsoft.com/en-us/library/windows/apps/hh699871(v=vs.110).aspx

Chapter 49

C++Builder

C++Builder is a rapid application development (RAD) en-
vironment, originally developed by Borland and as of 2009
owned by Embarcadero Technologies, for writing programs
in the C++ programming language targeting Windows NT
(IA-32 and x64), OS X, iOS and Android. C++Builder
combines the Visual Component Library and IDE written
in Delphi with a C++ compiler. Most components devel-
oped in Delphi can be used in C++Builder with no or little
modification, although the reverse is not true.
C++Builder includes tools that allow drag-and-drop visual
development, making programming easier by incorporating
a WYSIWYG graphical user interface builder.

49.1 Technology

C++Builder uses the same IDE as Delphi, and shares
many core libraries. Notable shared Delphi (Object Pas-
cal code) and C++ Builder routines include the FastMM4
memory manager, which was developed as a community
effort within the FastCode project, the entire UI frame-
work known as the VCL, which is written in Object Pas-
cal, as well as base system routines, many of which have
been optimised for both Delphi and C++Builder through
the FastCode project.
C++Builder projects can include Delphi code. The Delphi
compiler emits C++ headers, allowing C++ code to link to
Delphi classes and methods as though they were written in
C++. The reverse (C++ code being used by Delphi) is not
possible.

49.2 History

49.2.1 Borland C++Builder

C++Builder originally targeted only the Microsoft Win-
dows platform. Later versions incorporated Borland CLX,
a cross-platform development visual component library

based on Qt, that supports Windows and Linux, however
CLX is now abandoned. A cross-platform version for Linux
and OS X is reportedly planned.
Traditionally, the release cycle was such that Delphi got
major enhancements first, with C++Builder following,[2]
though recent versions have been released at the same time
as their Delphi equivalents.[3]

1.0

Original Borland C++Builder editions include
Client/Server Suite, Professional, Standard.[4]

Borland C++Builder 4

New features include:[5]

• Integrated Inprise Corporation’s VisiBroker 3.3 with
event and naming services

• New multi-standard flexible C++ compiler

• Support for the latest ANSI/ISO C++ language spec-
ifications, including a host of compiler enhancements
including Dynamic Compilation and Adaptive Com-
piler Technology (ACT), which radically speed com-
piler build processes; full ANSI/ISO template imple-
mentation; full ANSI/ISO STL (standard template li-
brary) support; and a high-performance 32-bit ANSI
C++ native code compiler.

• Fully customizable AppBrowser IDE

• Latest support for Windows 98, 95, and NT including
multiple monitors, common controls, docking forms
and toolbars, and more.

• New Code and Parameter completion, and the new
ClassExplorer live structured class view and member
creation wizards.

95

https://en.wikipedia.org/wiki/Rapid_application_development
https://en.wikipedia.org/wiki/Borland
https://en.wikipedia.org/wiki/Embarcadero_Technologies
https://en.wikipedia.org/wiki/C++
https://en.wikipedia.org/wiki/Windows_NT
https://en.wikipedia.org/wiki/IA-32
https://en.wikipedia.org/wiki/X64
https://en.wikipedia.org/wiki/OS_X
https://en.wikipedia.org/wiki/IOS
https://en.wikipedia.org/wiki/Android_(operating_system)
https://en.wikipedia.org/wiki/Visual_Component_Library
https://en.wikipedia.org/wiki/Integrated_development_environment
https://en.wikipedia.org/wiki/Embarcadero_Delphi
https://en.wikipedia.org/wiki/WYSIWYG
https://en.wikipedia.org/wiki/Graphical_user_interface_builder
https://en.wikipedia.org/wiki/Embarcadero_Delphi
https://en.wikipedia.org/wiki/Memory_management
https://en.wikipedia.org/wiki/FastCode
https://en.wikipedia.org/wiki/Visual_Component_Library
https://en.wikipedia.org/wiki/FastCode
https://en.wikipedia.org/wiki/Microsoft_Windows
https://en.wikipedia.org/wiki/Microsoft_Windows
https://en.wikipedia.org/wiki/Component_Library_for_Cross_Platform
https://en.wikipedia.org/wiki/Qt_(toolkit)

96 CHAPTER 49. C++BUILDER

• Exclusive C++ debugging tools, including remote
debugging for distributed development (COM and
CORBA); multi-process and cross-process debugging
with debug inspectors, dynamic watch windows, and
debug tooltips.

• Internet tools, including ActiveForms for building
Web browser C++ applications and WebBroker for
building CGI, WinCGI, ISAPI, and NSAPI C++ ap-
plications and over 25 Internet protocol components
for instantly adding HTTP, FTP, SMTP, POP, NNTP,
HTML, and TCP/IP support to any C++ application.

• Multi-Tier Database Development Services (MIDAS)
Development Kit, including MIDAS 2.

• Support for industry standards, including Oracle Cor-
poration’s Oracle8i database server; Microsoft Cor-
poration’s Microsoft Foundation Classes (MFC), Mi-
crosoft Active Template Library (ATL), Microsoft
SQL Server 7 and MTS (Microsoft Transaction
Server); and Inprise Corporation’s Object Win-
dows Library (OWL) and Visual Component Library
(VCL).

• EZ-COM, which simplifies C++ COM client devel-
opment and One-Step ActiveX Control creation with
new Data Binding support.

Borland C++Builder 5

It was launched in 2000.

Borland C++Builder 6

Launched in 2001.

Borland C++BuilderX

In Sep 15, 2003, Borland Software Corporation announced
the release of Borland C++BuilderX (CBX), which was
also included as part of the latest Borland Enterprise Studio
for Mobile.[6] CBX was written using the same framework
as JBuilder and bore little resemblance to either C++Builder
or Delphi. This product was aimed at developing large pro-
grams for enterprises, but did not sell well.
In Sep 22, 2003, Borland Software Corporation and Palm-
Source, Inc. announced Borland has licensed the Palm-
Source software development kits (SDKs) and will support
Palm OS development in the Borland C++BuilderX Inte-
grated Development Environment (IDE) and latest Borland
Application Lifecycle Management (ALM) solutions for
C++.[7]

At the end of 2004 Borland announced that it would con-
tinue to develop the earlier C++Builder and bundle it with
the Delphi development suite, abandoning C++BuilderX.

C++ Builder 2006

In Oct 10, 2005, Borland Software Corporation announced
the release of Borland C++Builder (previously codenamed
“DeXter”).[8]

About a year after the announcement Borland released
Borland Developer Studio 2006 which includes Borland
C++Builder 2006 that provides improved configuration
management and bug fixes. Borland Developer Studio 2006
is a single package containing Delphi, C++Builder, and
C#Builder.
In 2006 Borland’s Developer Tools Group, developers of
C++Builder, was transferred to a wholly owned subsidiary,
CodeGear.

49.2.2 CodeGear Borland C++Builder

In 2007 CodeGear released C++Builder 2007, providing
full API support for Microsoft Vista, increased ANSI C++
conformance, up to 500% faster in-IDE build performance,
support for MSBuild, DBX4 database architecture, and
“VCL for the Web” which supports Ajax. The API support
for Microsoft Vista includes themed applications and seam-
less VCL support for Aero and Vista Desktop. CodeGear
RAD Studio 2007 incorporates C++Builder 2007 and Del-
phi. Also in 2007 Borland revived the “Turbo” brand and
released two “Turbo” editions of C++Builder: Turbo C++
Professional, and Turbo C++ Explorer (no longer available
from CodeGear), based on Borland C++Builder 2006.
In 2008 CodeGear was purchased by Embarcadero Tech-
nologies, who continued development.

49.2.3 Embarcadero C++Builder

C++Builder 2009 was released in August 2008, with the
most notable improvements being full Unicode support
throughout VCL and RTL, early adoption of the C++0x
standard, full ITE (Integrated Translation Environment)
support, native Ribbon components and the inclusion of the
Boost library. C++Builder 2010 then followed in August
2009, adding in particular the touch and gesture support
newly introduced to the VCL and a C++ specific class ex-
plorer. C++Builder XE was released in August 2010.
Embarcadero moved to a different versioning scheme in
2010. Rather than using numbers, they use XE. “C++
Builder XE” was released in August 2010, “C++Builder

https://en.wikipedia.org/wiki/JBuilder
https://en.wikipedia.org/wiki/Borland_Delphi
https://en.wikipedia.org/wiki/CodeGear
https://en.wikipedia.org/wiki/MSBuild
https://en.wikipedia.org/wiki/Ajax_(programming)
https://en.wikipedia.org/wiki/C++0x
https://en.wikipedia.org/wiki/Ribbon_(computing)
https://en.wikipedia.org/wiki/Boost_C++_Libraries

49.3. OS X SUPPORT 97

XE2” was released in August 2011, “C++ Builder XE3”
was released in August 2012. No notable major changes
were included in those three years except for bug fixes and
the inclusion of ‘FireMonkey’ for creating cross-platform
GUIs.
In April 2013, “C++ Builder XE4” was released, which in-
cluded a 64-bit Windows compiler based on Clang 3.1. The
32-bit compiler is still based on Embarcadero’s older tech-
nology.

XE5 (19)

Changes to C++Builder XE5 include:

• Time Picker control for Windows and OS X

• Built-in search filtering for TListView on Windows
and OS X

• FM Platform performance optimizations

• Professional edition includes expanded FireDAC sup-
port for local databases, including Microsoft Access
database, SQLite database, InterBase ToGo / IBLite,
InterBase on localhost, MySQL Embedded, MySQL
Server on localhost, Advantage Database local engine,
PostgreSQL on localhost, Firebird Embedded, and
Firebird on localhost

• FireDAC integrated into the C++Builder install for
Professional, Enterprise, Ultimate and Architect edi-
tions

• REST Client support for simplified invocation of
REST services

• Authorization support including Basic Authentication,
Plan Authentication, OAuth1, OAuth2

• TRestClient, TRestRequest, and TRestResponse com-
ponents

• REST Debugger tool for testing REST calls and their
parameters

C++Builder XE5 Starter Edition includes:

• Develop 32-bit Windows application using the
C++Builder VCL and FireMonkey application
platform

• IDE and visual development environment

• Hundreds of included components

• License for use until user’s individual revenue from
C++Builder applications or company revenue reaches
$1,000 US or development team expands to more than
five developers

Available editions include Architect, Ultimate, Enterprise,
Professional, Starter.[9]

RAD Studio XE5 also includes C++Builder XE5.[10]

XE6 to 8

• Include changes for stability of the IDE, updated FMX
and VCL libraries

10 Seattle

Released in late August 2015 Seattle updates the C++ com-
piler suite to CLANG 3.3 with the following exceptions:

• OS X compiler is still proprietary Borland

• iOS 64 bit compiler is Clang 3.5

• Changes to the IDE and compiler can be found here:
www .embarcadero .com /products /cbuilder /whats-new

10.1 Berlin

Released in late April 2016.[11]

• FireUI App Previews – Lets you preview your Fire-
Monkey application on iOS, Android, OS X and Win-
dows as you are designing the app.

• Address Book for iOS and Android – Supports the
TAddressBook component which lets your applica-
tions access the device’s Address Book.

49.3 OS X support

C++Builder XE2 was released in August 2011, introducing
OS X support to the compiler for the first time. This al-
lows the creation of cross-platform executables from a sin-
gle source using the included FireMonkey libraries, how-
ever the IDE is only compatible with Microsoft Windows.
C++Builder XE3 was released in August 2012 containing
further OS X support and an upgraded version of FireMon-
key.
C++Builder XE4 was released in April 2013 containing fur-
ther OS X support and FireMonkey version 3.

https://en.wikipedia.org/wiki/Clang
http://www.embarcadero.com/products/cbuilder/whats-new
https://en.wikipedia.org/wiki/FireMonkey

98 CHAPTER 49. C++BUILDER

49.4 Version history

The following is a rough outline of product release infor-
mation.

49.5 Editions

C++ Builder is available in four editions with increasing fea-
tures and price:

• Starter – only compiles 32-bit Windows applications
and has a limited commercial-use license.

• Professional – adds 64-bit Windows applications,
cross-platform compilation for macOS, iOS and An-
droid, library source code, code formatting, local
database connectivity and a full commercial license.

• Enterprise – adds client/server database connectivity,
Enterprise Mobility Services, and DataSnap multi-tier
SDK.

• Architect – adds data modeling tools.

49.6 See also

• Embarcadero Delphi

• Visual Component Library

• Comparison of integrated development environments

49.7 References

[1] http://www.embarcadero.com/products/cbuilder/faq

[2] Borland C++Builder 5.0 – PC Magazine

[3] Borland Compiler Release Dates – Delphi Programming

[4] Borland® Delphi® 2006 and C++Builder® 2006 Deliver
Key New Features to Speed Microsoft® Windows® and
.NET Application Delivery – Enhanced development envi-
ronments offered as part of Borland Developer Studio, Bor-
land’s multi-language developer environment for Microsoft
Windows and .NET

[5] INPRISE CORPORATION LAUNCHES BOR-
LAND.COM WITH ANNOUNCEMENT OF BORLAND
C++BUILDER 4 – Developers Switch from Visual C++ to
Gain Interoperability and Tenfold Productivity Boost

[6] Mobile Industry Welcomes the Launch of Borland®
C++BuilderX™ – Borland Enhances Mobile Development
Offerings. C++BuilderX to Address Increased Business De-
mand for Enterprise Mobile Applications.

[7] Borland and PalmSource Advance Enterprise C++ Devel-
opment for Palm OS® Mobile Applications – Borland®
C++BuilderX™ and Application Lifecycle Management
Solutions for C++ to Assist End-to-End Development for
Palm Powered™ Mobile Devices

[8] Borland® Delphi® 2006 and C++Builder® 2006 Deliver
Key New Features to Speed Microsoft® Windows® and
.NET Application Delivery – Enhanced development envi-
ronments offered as part of Borland Developer Studio, Bor-
land’s multi-language developer environment for Microsoft
Windows and .NET

[9] C++Builder XE5 Feature Matrix

[10] Embarcadero Launches RAD Studio XE5 with True Native
Android and iOS Support, Allowing Developers to Reach
the Largest Addressable Mobile Markets

[11] “C++Builder 10.1 Berlin released”. ComponentSource.
April 25, 2016. Retrieved September 29, 2016.

49.8 External links
• Embarcadero Technologies, Inc. C++Builder current

version product pages: Full version, Starter edition

• C++Builder current version downloads

• Embarcadero Technologies, Inc. C++Builder
archived pages for prior versions: 2009, 2010, XE,
XE2, XE3, XE4

• CodeGear from Borland (Borland Software Corpora-
tion) C++Builder pages: 2006, 2007, 2007 R2

• Borland Software Corporation C++Builder pages: 5,
6, 6 Studio, 2006, C++BuilderX

• Inprise Corporation Borland C++Builder pages: 4, 5

• Borland International, Inc. C++Builder pages: 1, 3

• Download selection of 2010, v5.5, and other versions

• CodePedia C++ Builder page

• C++Builder Developer’s Journal

https://en.wikipedia.org/wiki/Embarcadero_Delphi
https://en.wikipedia.org/wiki/Visual_Component_Library
https://en.wikipedia.org/wiki/Comparison_of_integrated_development_environments
http://www.embarcadero.com/products/cbuilder/faq
http://www.pcmag.co.uk/personal-computer-world/software/2043341/borland-c-builder
http://delphi.wikia.com/wiki/Borland_Compiler_Release_Dates
https://web.archive.org/web/20090226200336/http://www.borland.com/us/company/news/press_releases/2005/10_10_05_borland_delphi_and_cpp_builder_2006_deliver_key_new_features.html
https://web.archive.org/web/20090226200336/http://www.borland.com/us/company/news/press_releases/2005/10_10_05_borland_delphi_and_cpp_builder_2006_deliver_key_new_features.html
https://web.archive.org/web/20090226200336/http://www.borland.com/us/company/news/press_releases/2005/10_10_05_borland_delphi_and_cpp_builder_2006_deliver_key_new_features.html
https://web.archive.org/web/20090226200336/http://www.borland.com/us/company/news/press_releases/2005/10_10_05_borland_delphi_and_cpp_builder_2006_deliver_key_new_features.html
https://web.archive.org/web/20090226200336/http://www.borland.com/us/company/news/press_releases/2005/10_10_05_borland_delphi_and_cpp_builder_2006_deliver_key_new_features.html
https://web.archive.org/web/20090226200336/http://www.borland.com/us/company/news/press_releases/2005/10_10_05_borland_delphi_and_cpp_builder_2006_deliver_key_new_features.html
https://web.archive.org/web/20011030070137/http://www.borland.com/about/press/1999/bcb4.html
https://web.archive.org/web/20011030070137/http://www.borland.com/about/press/1999/bcb4.html
https://web.archive.org/web/20011030070137/http://www.borland.com/about/press/1999/bcb4.html
https://web.archive.org/web/20011030070137/http://www.borland.com/about/press/1999/bcb4.html
https://web.archive.org/web/20090615203456/http://www.borland.com/us/company/news/press_releases/2003/09_15_03_mobile_industry_welcomes_cbx.html
https://web.archive.org/web/20090615203456/http://www.borland.com/us/company/news/press_releases/2003/09_15_03_mobile_industry_welcomes_cbx.html
https://web.archive.org/web/20090615203456/http://www.borland.com/us/company/news/press_releases/2003/09_15_03_mobile_industry_welcomes_cbx.html
https://web.archive.org/web/20090615203456/http://www.borland.com/us/company/news/press_releases/2003/09_15_03_mobile_industry_welcomes_cbx.html
https://web.archive.org/web/20090223055516/http://www.borland.com/us/company/news/press_releases/2003/09_22_03_borland_and_palmsource_advance_cpp_development.html
https://web.archive.org/web/20090223055516/http://www.borland.com/us/company/news/press_releases/2003/09_22_03_borland_and_palmsource_advance_cpp_development.html
https://web.archive.org/web/20090223055516/http://www.borland.com/us/company/news/press_releases/2003/09_22_03_borland_and_palmsource_advance_cpp_development.html
https://web.archive.org/web/20090223055516/http://www.borland.com/us/company/news/press_releases/2003/09_22_03_borland_and_palmsource_advance_cpp_development.html
https://web.archive.org/web/20090223055516/http://www.borland.com/us/company/news/press_releases/2003/09_22_03_borland_and_palmsource_advance_cpp_development.html
https://web.archive.org/web/20090226200336/http://www.borland.com/us/company/news/press_releases/2005/10_10_05_borland_delphi_and_cpp_builder_2006_deliver_key_new_features.html
https://web.archive.org/web/20090226200336/http://www.borland.com/us/company/news/press_releases/2005/10_10_05_borland_delphi_and_cpp_builder_2006_deliver_key_new_features.html
https://web.archive.org/web/20090226200336/http://www.borland.com/us/company/news/press_releases/2005/10_10_05_borland_delphi_and_cpp_builder_2006_deliver_key_new_features.html
https://web.archive.org/web/20090226200336/http://www.borland.com/us/company/news/press_releases/2005/10_10_05_borland_delphi_and_cpp_builder_2006_deliver_key_new_features.html
https://web.archive.org/web/20090226200336/http://www.borland.com/us/company/news/press_releases/2005/10_10_05_borland_delphi_and_cpp_builder_2006_deliver_key_new_features.html
https://web.archive.org/web/20090226200336/http://www.borland.com/us/company/news/press_releases/2005/10_10_05_borland_delphi_and_cpp_builder_2006_deliver_key_new_features.html
http://www.embarcadero.com/products/cbuilder/cbuilder-feature-matrix.pdf
http://www.embarcadero.com/press-releases/embarcadero-launches-rad-studio-xe5-with-android-and-ios-support
http://www.embarcadero.com/press-releases/embarcadero-launches-rad-studio-xe5-with-android-and-ios-support
http://www.embarcadero.com/press-releases/embarcadero-launches-rad-studio-xe5-with-android-and-ios-support
https://www.componentsource.com/news/feature-releases/2016/04/26/cbuilder-architect
http://www.embarcadero.com/products/cbuilder/
http://www.embarcadero.com/products/cbuilder/starter
http://www.embarcadero.com/products/cbuilder/downloads
https://web.archive.org/web/20090812143557/http://www.embarcadero.com/products/cbuilder
https://web.archive.org/web/20100725104247/http://www.embarcadero.com/products/cbuilder
https://web.archive.org/web/20110807193119/http://www.embarcadero.com/products/cbuilder
https://web.archive.org/web/20120817031600/http://www.embarcadero.com/kr/products/cbuilder
https://web.archive.org/web/20130403195914/http://www.embarcadero.com/products/cbuilder
https://web.archive.org/web/20130509225940/https://www.embarcadero.com/products/cbuilder
https://web.archive.org/web/20070103090454/http://www.codegear.com/Default.aspx?tabid=123
https://web.archive.org/web/20070831220654/http://www.codegear.com/products/cppbuilder
https://web.archive.org/web/20080614210700/http://www.codegear.com/products/cppbuilder/
https://web.archive.org/web/20050406020231/http://www.borland.com/cbuilder/cbuilder_5/index.html
https://web.archive.org/web/20050804014841/http://www.borland.com/us/products/cbuilder/index.html
https://web.archive.org/web/20050602000228/http://www.borland.com/cbuilder/
https://web.archive.org/web/20061207222525/http://www.borland.com/us/products/cbuilder/index.html
https://web.archive.org/web/20050516014004/http://www.borland.com/cbuilderx/
https://web.archive.org/web/19990508193950/http://www.borland.com/bcppbuilder/
https://web.archive.org/web/20010124055800/http://www.borland.com/bcppbuilder/
https://web.archive.org/web/19970605043133/http://www.borland.com/bcppbuilder/
https://web.archive.org/web/19980423082418/http://www.borland.com/bcppbuilder/
https://downloads.embarcadero.com/free/c_builder
http://www.codepedia.com/1/CppBuilder
http://bcbjournal.com/

Chapter 50

Cfront

Cfront was the original compiler for C++ (then known as
“C with Classes”) from around 1983, which converted C++
to C; developed by Bjarne Stroustrup. The preprocessor did
not understand all of the language and much of the code was
written via translations. Cfront had a complete parser, built
symbol tables, and built a tree for each class, function, etc.
Cfront was based on CPre (C with classes compiler, which
was started in 1979).
As Cfront was written in C++, it was a challenge to
bootstrap on a machine without a C++ compiler/translator.
Along with the Cfront C++ sources, a special “half-
preprocessed” version of the C code resulting from com-
piling Cfront with itself was also provided. This C code
was to be compiled with the native C compiler, and the re-
sulting executable could then be used to compile the Cfront
C++ sources.
Most of the porting effort in getting Cfront running on a
new machine was related to standard I/O. Cfront’s C++
streams were closely tied in with the C library’s buffered I/O
streams, but there was little interaction with the rest of the C
environment. The compiler could be ported to most System
V derivatives without many changes, but BSD-based sys-
tems usually had many more variations in their C libraries
and associated stdio structures.
Cfront defined the language until circa 1990, and many of
the more obscure corner cases in C++ were related to its
C++-to-C translation approach. A few remnants of Cfront’s
translation method are still found in today’s C++ compilers;
name mangling was originated by Cfront, as the relatively
primitive linkers at the time did not support type informa-
tion in symbols, and some template instantiation models are
derived from Cfront’s early efforts. C++ (and Cfront) was
directly responsible for many improvements in Unix linkers
and object file formats, as it was the first widely used lan-
guage which required link-time type checking, weak sym-
bols, and other similar features.
Cfront 4.0 was abandoned in 1993 after a failed attempt
to add exception support.[1] The C++ language had grown
beyond its capabilities; however a compiler with similar ap-

proach became available later, namely Comeau C/C++.

50.1 References
[1] Scott Meyers, The Most Important C++ Software…Ever,

2006

Notes

• Bjarne Stroustrup, Evolving a language in and for the
real world: C++ 1991-2006

• Bjarne Stroustrup’s FAQ

50.2 External links
• Cfront Releases at C++ Historical Sources Archive

99

https://en.wikipedia.org/wiki/Compiler
https://en.wikipedia.org/wiki/C++
https://en.wikipedia.org/wiki/C_(programming_language)
https://en.wikipedia.org/wiki/Bjarne_Stroustrup
https://en.wikipedia.org/wiki/Preprocessor
https://en.wikipedia.org/wiki/Programming_language
https://en.wikipedia.org/wiki/Source_code
https://en.wikipedia.org/wiki/Source-to-source_compiler
https://en.wikipedia.org/wiki/Parser
https://en.wikipedia.org/wiki/Symbol_table
https://en.wikipedia.org/wiki/Tree_data_structure
https://en.wikipedia.org/wiki/Class_(computer_science)
https://en.wikipedia.org/wiki/Function_(programming)
https://en.wikipedia.org/wiki/Bootstrapping_(compilers)
https://en.wikipedia.org/wiki/System_V
https://en.wikipedia.org/wiki/System_V
https://en.wikipedia.org/wiki/BSD
https://en.wikipedia.org/wiki/Name_mangling
https://en.wikipedia.org/wiki/Linker_(computing)
https://en.wikipedia.org/wiki/Unix
https://en.wikipedia.org/wiki/Object_file
https://en.wikipedia.org/wiki/File_format
https://en.wikipedia.org/wiki/Weak_symbol
https://en.wikipedia.org/wiki/Weak_symbol
https://en.wikipedia.org/wiki/Exception_handling
https://en.wikipedia.org/wiki/Comeau_C/C++
https://en.wikipedia.org/wiki/Scott_Meyers
http://www.artima.com/cppsource/top_cpp_software.html
https://en.wikipedia.org/wiki/Bjarne_Stroustrup
http://www.research.att.com/~bs/hopl-almost-final.pdf
http://www.research.att.com/~bs/hopl-almost-final.pdf
http://public.research.att.com/~bs/bs_faq.html#bootstrapping
http://www.softwarepreservation.org/projects/c_plus_plus/index.html#cfront
http://www.softwarepreservation.org/projects/c_plus_plus

Chapter 51

Shed Skin

For the process undergone by snakes, lizards, and amphib-
ians, see moulting.

Shed Skin is a Python to C++ programming language
compiler. It is experimental, and can translate pure, but
implicitly statically typed Python programs into optimized
C++. It can generate stand-alone programs or extension
modules that can be imported and used in larger Python
programs.
Shed Skin is an open source project with contributions from
many people, however the main author is Mark Dufour.
Work has been going into Shed Skin since 2005.[1]

51.1 Features

Besides the typing restriction,[2] programs cannot freely use
the Python standard library, although about 20 common
modules, such as random, itertools and re (regular expres-
sions), are supported as of 2011. Also, not all Python fea-
tures, such as nested functions and variable numbers of ar-
guments, are supported. Many introspective dynamic parts
of the language are unsupported. For example, functions
like getattr, and hasattr are unsupported.
As of May 2011, Unicode is not supported.[3]

As of June 2016 for a set of 75 non-trivial test programs
(at over 25,000 lines in total (sloccount)),[4] measurements
show a typical speedup of 2-20 times over Psyco, and 2-
200 times over CPython.[5][6][7][8] Shed Skin is still in an
early stage of development, so many other programs will
not compile unmodified.[9]

Shed Skin can be used to generate standalone executables
which need only the C++ runtime libraries. It can also be
used to generate CPython modules. This allows compiling
parts of larger programs with Shed Skin, while running the
other parts using regular CPython.
Another use has been to wrap C++ classes using Shed Skin
to allow C++ classes to be used as Python classes.[10]

The license of the Shed Skin source code is under two parts.
The main compiler code is under the GNU General Pub-
lic License (GPL). The supporting code that it uses as a
run time library is under a BSD or MIT license depending
on the module. This allows compiling programs which are
considered under the GPL or are not considered under the
GPL.

51.2 Type inference

Shed Skin combines Ole Agesen’s Cartesian Product Al-
gorithm (CPA) with the data-polymorphic part of John
Plevyak’s Iterative Flow Analysis (IFA).[11] Version 0.6 in-
troduced scalability improvements which repeatedly ana-
lyze larger versions of a program (in addition to the men-
tioned techniques), until it is fully analyzed. This allows
Shed Skin to do type inference on larger programs than pre-
viously. It starts with an empty callgraph, essentially, and
slowly adds to it, until the whole call graph has been added.
A graph has been published by the author, showing analysis
times for 50 example programs, at a total of around 15,000
lines.[12]

51.3 Modules

For version 0.9 the following 25 modules are largely sup-
ported. Several of these, such as os.path, were compiled to
C++ using Shed Skin.

• array

• binascii[13]

• bisect

• collections (defaultdict, deque)

• ConfigParser (no SafeConfigParser)

• copy

100

https://en.wikipedia.org/wiki/Moulting
https://en.wikipedia.org/wiki/Python_(programming_language)
https://en.wikipedia.org/wiki/C++
https://en.wikipedia.org/wiki/Compiler
https://en.wikipedia.org/wiki/Type_inference
https://en.wikipedia.org/wiki/Mark_Dufour
https://en.wikipedia.org/wiki/Regular_expression
https://en.wikipedia.org/wiki/Regular_expression
https://en.wikipedia.org/wiki/Nested_function
https://en.wikipedia.org/wiki/Unicode
https://en.wikipedia.org/wiki/Psyco
https://en.wikipedia.org/wiki/CPython
https://en.wikipedia.org/wiki/GNU_General_Public_License
https://en.wikipedia.org/wiki/GNU_General_Public_License
https://en.wikipedia.org/wiki/BSD_license
https://en.wikipedia.org/wiki/MIT_license
https://en.wikipedia.org/wiki/Type_inference

51.6. EXTERNAL LINKS 101

• colorsys[13]

• csv (no Dialect, Sniffer)

• datetime

• fnmatch

• getopt

• glob

• heapq

• itertools (no starmap)

• math

• mmap[13]

• os

• os.path

• random

• re

• socket

• string

• struct (no Struct, pack_into, unpack_from)

• sys

• time

Note that any other module, such as pygame, pyqt or pickle,
may be used in combination with a Shed Skin generated
extension module. For examples of this, see the Shed Skin
examples.

51.4 See also

• Cython

• PyPy

51.5 References
[1] first Shed Skin release

[2] Learning Python Book section on Shed Skin

[3] Shed Skin tutorial (“Python Subset Restrictions” section)

[4] https://github.com/shedskin/shedskin

[5] Speed up your Python: Unladen vs. Shed Skin vs. PyPy vs.
Cython vs. C

[6] Taking on Shed-Skin

[7] Speeding up Python code with Shed Skin

[8] MiniLight, minimal global illumination renderer benchmark

[9] Shed Skin webpage

[10] Wrapping C++ classes using Shed Skin

[11] Master Thesis Mark Dufour

[12] Type inference scalability

[13] Shedskin 0.9 release notes

51.6 External links
• Official website

• Shed Skin Blog

• shedskin source code repository

http://code.google.com/p/shedskin/wiki/docs#Generating_an_Extension_Module
http://gitorious.org/shedskin/mainline/trees/master/examples
https://en.wikipedia.org/wiki/Cython
https://en.wikipedia.org/wiki/PyPy
http://boost.2283326.n4.nabble.com/First-release-of-Shed-Skin-a-Python-to-C-compiler-td2696874.html
https://books.google.com/books?id=1HxWGezDZcgC&lpg=PA31&ots=LiNd3Of4p-&dq=learning%2520python%2520shedskin&pg=PA31#v=onepage&q&f=false
http://shedskin.googlecode.com/files/shedskin-tutorial-0.7.html#Python%2532Subset%2532Restrictions
https://github.com/shedskin/shedskin
Speed up your Python: Unladen vs. Shedskin vs. PyPy vs. Cython vs. C
Speed up your Python: Unladen vs. Shedskin vs. PyPy vs. Cython vs. C

Taking on Shed-Skin


http://www.korokithakis.net/node/117
http://www.hxa.name/minilight/
http://shedskin.github.io/
http://chatter.recreclabs.com/2011/01/wrapping-c-classes-using-shedskin/
http://mark.dufour.googlepages.com/shedskin.pdf
http://shed-skin.blogspot.com/2010/12/shed-skin-07-type-inference-scalability.html
http://code.google.com/p/shedskin/wiki/releasenotes
http://shedskin.github.io/
http://shed-skin.blogspot.com/
https://github.com/shedskin/shedskin/

Chapter 52

Turbo C++

See also: Borland Turbo C and Turbo C Sharp

Turbo C++ is a discontinued C++ compiler and integrated
development environment and computer language origi-
nally from Borland. Most recently it was distributed by
Embarcadero Technologies, which acquired all of Borland’s
compiler tools with the purchase of its CodeGear division in
2008. The original Turbo C++ product line was put on hold
after 1994 and was revived in 2006 as an introductory-level
IDE, essentially a stripped-down version of their flagship
C++Builder. Turbo C++ 2006 was released on September
5, 2006 and was available in ‘Explorer’ and ‘Professional’
editions. The Explorer edition was free to download and
distribute while the Professional edition was a commercial
product. In October 2009 Embarcadero Technologies dis-
continued support of its 2006 C++ editions. As such, the
Explorer edition is no longer available for download and the
Professional edition is no longer available for purchase from
Embarcadero Technologies. Turbo C++ is succeeded by
C++Builder.

52.1 History

The first release of Turbo C++ was made available during
the MS-DOS era on personal computers. Version 1.0, run-
ning on MS-DOS, was released in May 1990. An OS/2
version was produced as well. Version 1.01 was released
on February 28, 1991,[1] running on MS-DOS. The latter
was able to generate both COM and EXE programs and
was shipped with Borland’s Turbo Assembler compiler for
Intel x86 processors. The initial version of the Turbo C++
compiler was based on a front end developed by TauMetric
(TauMetric was later acquired by Sun Microsystems and
their front end was incorporated in Sun C++ 4.0, which
shipped in 1994).This compiler supported the AT&T 2.0
release of C++.
Turbo C++ 3.0was released in 1991 (shipping on Novem-
ber 20), and came in amidst expectations of the coming
release of Turbo C++ for Microsoft Windows. Initially re-

leased as an MS-DOS compiler, 3.0 supported C++ tem-
plates, Borland’s inline assembler, and generation of MS-
DOS mode executables for both 8086 real mode and 286
protected mode (as well as the Intel 80186.) 3.0 imple-
mented AT&T C++ 2.1, the most recent at the time. The
separate Turbo Assembler product was no longer included,
but the inline-assembler could stand in as a reduced func-
tionality version.
Soon after the release of Windows 3.0, Borland updated
Turbo C++ to support Windows application development.
The Turbo C++ 3.0 for Windows product was quickly fol-
lowed by Turbo C++ 3.1 (and then Turbo C++ 4.5).
It’s possible that the jump from version 1.x to version 3.x
was in part an attempt to link Turbo C++ release numbers
with Microsoft Windows versions; however, it seems more
likely that this jump was simply to synchronize Turbo C
and Turbo C++, since Turbo C 2.0 (1989) and Turbo C++
1.0 (1990) had come out roughly at the same time, and the
next generation 3.0 was a merger of both the C and C++
compiler.
Starting with version 3.0, Borland segmented their C++
compiler into two distinct product-lines: “Turbo C++” and
“Borland C++”. Turbo C++ was marketed toward the hob-
byist and entry-level compiler market, while Borland C++
targeted the professional application development market.
Borland C++ included additional tools, compiler code-
optimization, and documentation to address the needs of
commercial developers. Turbo C++ 3.0 could be upgraded
with separate add-ons, such as Turbo Assembler and Turbo
Vision 1.0.
Version 4.0 was released in November 1993 and was no-
table (among other things) for its robust support of tem-
plates. In particular, Borland C++ 4 was instrumental in the
development of the Standard Template Library, expression
templates, and the first advanced applications of template
metaprogramming. With the success of the Pascal-evolved
product Delphi, Borland ceased work on their Borland
C++ suite and concentrated on C++Builder for Windows.
C++Builder shared Delphi’s front-end application frame-
work, but retained the Borland C++ back-end compiler.

102

https://en.wikipedia.org/wiki/Borland_Turbo_C
https://en.wikipedia.org/wiki/Turbo_C_Sharp
https://en.wikipedia.org/wiki/C++
https://en.wikipedia.org/wiki/Integrated_development_environment
https://en.wikipedia.org/wiki/Integrated_development_environment
https://en.wikipedia.org/wiki/Borland
https://en.wikipedia.org/wiki/Embarcadero_Technologies
https://en.wikipedia.org/wiki/CodeGear
https://en.wikipedia.org/wiki/C++Builder
https://en.wikipedia.org/wiki/Embarcadero_Technologies
https://en.wikipedia.org/wiki/Embarcadero_Technologies
https://en.wikipedia.org/wiki/C++Builder
https://en.wikipedia.org/wiki/MS-DOS
https://en.wikipedia.org/wiki/MS-DOS
https://en.wikipedia.org/wiki/OS/2
https://en.wikipedia.org/wiki/COM_file
https://en.wikipedia.org/wiki/EXE
https://en.wikipedia.org/wiki/Turbo_Assembler
https://en.wikipedia.org/wiki/X86
https://en.wikipedia.org/wiki/Sun_Microsystems
https://en.wikipedia.org/wiki/Microsoft_Windows
https://en.wikipedia.org/wiki/C++_templates
https://en.wikipedia.org/wiki/C++_templates
https://en.wikipedia.org/wiki/Assembler_(computing)
https://en.wikipedia.org/wiki/8086
https://en.wikipedia.org/wiki/Real_mode
https://en.wikipedia.org/wiki/Intel_80286
https://en.wikipedia.org/wiki/Protected_mode
https://en.wikipedia.org/wiki/80186
https://en.wikipedia.org/wiki/Borland_C++
https://en.wikipedia.org/wiki/Turbo_Vision
https://en.wikipedia.org/wiki/Turbo_Vision
https://en.wikipedia.org/wiki/Standard_Template_Library
https://en.wikipedia.org/wiki/Expression_templates
https://en.wikipedia.org/wiki/Expression_templates
https://en.wikipedia.org/wiki/Template_metaprogramming
https://en.wikipedia.org/wiki/Template_metaprogramming
https://en.wikipedia.org/wiki/Pascal_(programming_language)
https://en.wikipedia.org/wiki/CodeGear_Delphi
https://en.wikipedia.org/wiki/C++Builder

52.5. EXTERNAL LINKS 103

Active development on Borland C++/Turbo C++ was sus-
pended until 2006 (see below.)

52.2 Legacy software
• Turbo C++ v1.01 and Turbo C v2.01 can be down-

loaded, free of charge, from Borland’s Antique Soft-
ware website.

• Turbo C 3.0 (DOS) was included in the Turbo C Suite
1.0, which is no longer sold by Borland.

52.3 See also
• Borland C++

• Comparison of integrated development environments

• Turbo C

52.4 References
[1] http://community.borland.com/article/0,1410,21751,00.

html

52.5 External links
• Turbo C++ v1.01 and other free downloads from An-

tique Software

• Turbo C++ etc original museum

https://en.wikipedia.org/wiki/Borland_C++
https://en.wikipedia.org/wiki/Comparison_of_integrated_development_environments
https://en.wikipedia.org/wiki/Turbo_C
http://community.borland.com/article/0,1410,21751,00.html
http://community.borland.com/article/0,1410,21751,00.html
http://edn.embarcadero.com/museum/antiquesoftware
http://edn.embarcadero.com/museum/antiquesoftware
https://web.archive.org/web/20050204085204/http://bdn.borland.com/museum

104 CHAPTER 52. TURBO C++

52.6 Text and image sources, contributors, and licenses

52.6.1 Text
• Acorn C/C++ Source: https://en.wikipedia.org/wiki/Acorn_C/C%2B%2B?oldid=746937377 Contributors: Phil Boswell, Trevj, BD2412, Cm-

drObot, DrKay, Sprow, Yobot, Trappist the monk, Snotbot, Helpful Pixie Bot, Pintoch, Stamptrader, Sam-m888, InternetArchiveBot, GreenC
bot, Bender the Bot and Anonymous: 5

• Amsterdam Compiler Kit Source: https://en.wikipedia.org/wiki/Amsterdam_Compiler_Kit?oldid=751956341 Contributors: Sanxiyn, Fur-
rykef, Finlay McWalter, Murray Langton, David Gerard, Abdull, Mecanismo, Polluks, Stuartyeates, Rjwilmsi, A bit iffy, SmackBot, Thumper-
ward, Colonies Chris, Frap, Lclacer, Jerryobject, Lightmouse, Addbot, Vanished user rt41as76lk, Wickorama, ArthurBot, FrescoBot, Rjwilm-
siBot, BattyBot, Dexbot, Comp.arch, Stamptrader, Helios crucible, Rule4rule3 and Anonymous: 25

• Aztec C Source: https://en.wikipedia.org/wiki/Aztec_C?oldid=746815558 Contributors: Bumm13, Dgpop, Polluks, Aegith, Rjwilmsi, Bgwhite,
Wgungfu, Derek R Bullamore, Iridescent, CmdrObot, Potatoswatter, Bill Buckels, Lightmouse, Rhsimard, Trivialist, DumZiBoT, Stayhabitual,
AnomieBOT, Rsherry8, John of Reading, Matthiaspaul, Helpful Pixie Bot, ManuelSeTr, Cyberbot II, Larsbrinkhoff, Poponuro, Yellow Dingo,
GreenC bot, Hammertime56, Bender the Bot and Anonymous: 8

• BDS C Source: https://en.wikipedia.org/wiki/BDS_C?oldid=747415840 Contributors: Phr, Sarrazip, Gronky, Polluks, GregorB, StuartBrady,
Mirror Vax, Nick, Retired username, Light current, SmackBot, Bdobyns, Frap, Ser Amantio di Nicolao, Sakurambo, Isilanes, Pausch, Ger-
manX, Gwern, Kl4m-AWB, Addbot, Lightbot, Bukvodel, Nameless23, Bomazi, Mjbmrbot, Pantergraph, Shaddim, BG19bot, Codename Lisa,
ArmbrustBot, OMPIRE, Helios crucible, SPRDEF, Bender the Bot and Anonymous: 6

• Borland Turbo C Source: https://en.wikipedia.org/wiki/Borland_Turbo_C?oldid=748079297 Contributors: Damian Yerrick, Uriyan, Bryan
Derksen, Bolo~enwiki, Tannin, Bogdangiusca, Jogloran, Wernher, Anthony, Confuzion, Slady, Solitude, Kjoonlee, Dgpop, Mfx, Polluks, Neil-
Santos, Peter McGinley, Uucp, SP-KP, Tabletop, Joz3d, FlaBot, Ysangkok, Bmicomp, Grafen, Zwobot, Bota47, Pelladon, Closedmouth, Aflag,
Wizard IT, David Biddulph, SmackBot, Skizzik, Bluebot, Pappires~enwiki, Ssx232, Can’t sleep, clown will eat me, Chlewbot, A multidi-
mensional liar, Derek R Bullamore, Henning Makholm, RomanSpa, TastyPoutine, Phuzion, Mikya, Muttley.meen, Marc W. Abel, Electron9,
AntiVandalBot, Gioto, JimScott, TravisHein, Lfstevens, Alex LE, Confusionball, Gwern, Scott1329m, Joewoodbury, Steel1943, TanjBen-
nett, Jamelan, Tomaxer, Pedro.haruo, ImageRemovalBot, 718 Bot, Bücherwürmlein, Addbot, Raghavkvp, Tomtheeditor, Lightbot, Luckas-bot,
Naderra, AnomieBOT, Rubinbot, Jim1138, Materialscientist, Лъчезар, TheCuriousGnome, The Evil IP address, M0nsterxxl, A412, Lemohr,
Manu 92~enwiki, AvicAWB, ClueBot NG, Warraqeen, Anubhavvista, Cleanelephant, CS2012, Amitsharma0633, Comp.arch, Manish181192,
Ishan1704, Yellow Dingo, InternetArchiveBot and Anonymous: 99

• Cc65 Source: https://en.wikipedia.org/wiki/Cc65?oldid=733802530 Contributors: Damian Yerrick, Tannin, Wwwwolf, Furrykef, Itai, Wern-
her, Psychonaut, Stewartadcock, Dbenbenn, Bumm13, Dgpop, Polluks, Mirror Vax, RussBot, Ntsimp, DmitTrix, Gwern, Yobot, FrescoBot,
EdoDodo, KLBot2, ChrisGualtieri, Sam-m888 and Anonymous: 15

• Ccache Source: https://en.wikipedia.org/wiki/Ccache?oldid=746350990 Contributors: Nyco~enwiki, TakuyaMurata, Andrevan, Dysprosia,
Eequor, Quarl, Oneiros, Polluks, Jag123, Minghong, Suruena, Jghaines, Bluemoose, Marudubshinki, Mikeblas, SmackBot, Unforgettableid,
Thumperward, Frap, Venona, Raysonho, Widefox, Gwern, MystBot, Addbot, Dawynn, TaBOT-zerem, Jrosdahl, Lotje, Rivanvx, Boyski~enwiki,
Voomoo and Anonymous: 13

• CFLAGS Source: https://en.wikipedia.org/wiki/CFLAGS?oldid=731465249 Contributors: Garo, Vadmium, Gazpacho, Bender235, ThePara-
noidOne, Stemonitis, Torqueing, GregorB, Jlherren, Marudubshinki, FlaBot, Intgr, THB, Johnsu01, Bluebot, Thumperward, Wybot, Owlbuster,
BerVi, Leolaursen, Kiplingw, GrahamHardy, Getonyourfeet, Rogerdpack, Addbot, Morriswa, LaaknorBot and Anonymous: 8

• Clang Source: https://en.wikipedia.org/wiki/Clang?oldid=751438290 Contributors: Damian Yerrick, Zundark, Maury Markowitz, Mrwojo,
Spring~enwiki, KAMiKAZOW, Glenn, Sanxiyn, Selket, Thue, Catskul, Psychonaut, Asparagus, Akersmc, Resistor, RScheiber, Sdfisher,
Euphoria, Paulbmann, Smyth, Gronky, Bender235, Kwamikagami, Ahruman, Sligocki, Woohookitty, Mindmatrix, Prophile, Jonathan Watt,
Demian12358, TheAnarcat, D.brodale, Chills42, Bhny, Mipadi, Sylvestre~enwiki, Xompanthy, Richardcavell, TheSeer, Chris Chittleborough,
SmackBot, FlashSheridan, JorgePeixoto, Thumperward, LPCA, Cybercobra, A5b, Daniel.Cardenas, Kovarththanan Rajaratnam, Ksn, Pcov-
ello, Venkatesh.nandakumar, Cydebot, Mato, Gogo Dodo, Wdspann, Hervegirod, Towopedia, Un brice, Bgold, Insulanus, Mdecky, Lklundin,
Deflective, PaleAqua, DrSeehas, User A1, VasilDimov, Supuhstar, Randombit, Onkelringelhuth, VolkovBot, Trasz, Tjmao, Fourthark, Willia-
manthony, Jjermar, Jerryobject, Superbatfish, Spicyj, Aaa3-other, Steeljack, Addbot, LaaknorBot, Jarble, Fryed-peach, Luckas-bot, Yobot,
AnomieBOT, 1exec1, Götz, Wickorama, RokerHRO, GrouchoBot, WilliamTheaker, Tylerritchie, Dotyoyo, Mfwitten, Galatz, Annulen, Kem
wiki, Vrenator, Jesse V., Noloader, Dewritech, Rivanvx, ZéroBot, GoldRenet, Pyrenil, Δ, Ipsign, Highway Hitchhiker, Wmagro, Scdmb, Mikhail
Ryazanov, ClueBot NG, BG19bot, Ah.arabzadeh, Salaros, Shealevy, Cyberbot II, ,اقرأ JYBot, Dexbot, DannyMeister, Alfredthetomato, Titi-
tou36, Dfukalov, Bumblebritches57, Hmike2, Myconix, Mthinkcpp, Comp.arch, Anoop Manakkalath, FockeWulf FW 190, Patrios, Dimitry
Andric, Sam-m888, Andresmanz, InternetArchiveBot, GreenC bot, Freemasen and Anonymous: 149

• CodeWarrior Source: https://en.wikipedia.org/wiki/CodeWarrior?oldid=747533297 Contributors: Ellmist, Pnm, Glenn, GRAHAMUK, Fur-
rykef, Jondel, Mshonle~enwiki, Curps, Sdfisher, AlistairMcMillan, Gadfium, Quadell, , Grstain, Rich Farmbrough, Antaeus Feldspar,
Redquark, Jason One, Guy Harris, CyberSkull, Uucp, RJFJR, RandomWalk, Dodiad, AlbertCahalan~enwiki, Monk, JWWalker, ATMB, Mir-
ror Vax, Mathiastck, Zwobot, Pegship, Brian Tvedt, SmackBot, Od Mishehu, Myrdred, Bluebot, Thumperward, Adavidw, Eliashc, Cydebot,
A876, ST47, Deepmac, Jhsounds, MegX, Gwern, Verdatum, Andareed, Potatoswatter, TreasuryTag, McM.bot, Gona.eu, Jvs, TubularWorld,
Leonard^Bloom, Mlh457, Addbot, Mortense, Lightbot, Yousry753, Parikia, D’ohBot, Wo.luren, John Buchan, EmausBot, Primefac and Anony-
mous: 34

• Comeau C/C++ Source: https://en.wikipedia.org/wiki/Comeau_C/C%2B%2B?oldid=753187017 Contributors: Furrykef, Stormie, EvanED,
Tea2min, Merenta, Jonathan de Boyne Pollard, Ruud Koot, Ajcomeau, SmackBot, Thumperward, Lodev, Iridescent, Christian75, Thijs!bot,
Magioladitis, PixelBot, DumZiBoT, Cunard, Addbot, Yobot, Schuym1, John of Reading, Dcirovic, SporkBot, Ipsign, Helpful Pixie Bot, Mogism,
Sam-m888 and Anonymous: 21

https://en.wikipedia.org/wiki/Acorn_C/C%252B%252B?oldid=746937377
https://en.wikipedia.org/wiki/Amsterdam_Compiler_Kit?oldid=751956341
https://en.wikipedia.org/wiki/Aztec_C?oldid=746815558
https://en.wikipedia.org/wiki/BDS_C?oldid=747415840
https://en.wikipedia.org/wiki/Borland_Turbo_C?oldid=748079297
https://en.wikipedia.org/wiki/Cc65?oldid=733802530
https://en.wikipedia.org/wiki/Ccache?oldid=746350990
https://en.wikipedia.org/wiki/CFLAGS?oldid=731465249
https://en.wikipedia.org/wiki/Clang?oldid=751438290
https://en.wikipedia.org/wiki/CodeWarrior?oldid=747533297
https://en.wikipedia.org/wiki/Comeau_C/C%252B%252B?oldid=753187017

52.6. TEXT AND IMAGE SOURCES, CONTRIBUTORS, AND LICENSES 105

• Deep Blue C Source: https://en.wikipedia.org/wiki/Deep_Blue_C?oldid=753966232 Contributors: Andrewman327, Dgpop, RJFJR, JustAGal,
Inks.LWC, Destynova, Yobot, AnomieBOT, Some Wiki Editor, Danos p, AvicAWB, Gameame, Astatine211, BattyBot, ChrisGualtieri, Comat-
mebro, EncycloCritique, InternetArchiveBot and Anonymous: 2

• Digital Mars Source: https://en.wikipedia.org/wiki/Digital_Mars?oldid=735197192 Contributors: SimonP, Graue, Furrykef, Curps, Pavel
Vozenilek, Sasquatch, RoySmith, Rockin, Forderud, Uncle G, Baojia, Mirror Vax, Jeff02, Mitsukai, RussBot, Epolk, Sergey shandar, SmackBot,
Thumperward, TPO-bot, Gwern, 99DBSIMLR, Jerryobject, Zacatecnik, System86, DumZiBoT, Addbot, Ghettoblaster, Darolew, Johnb2205,
Materialscientist, Sbmeirow, Dexbot, François Robere and Anonymous: 8

• DJGCC Source: https://en.wikipedia.org/wiki/DJGCC?oldid=733802752 Contributors: SmackBot, Cydebot, Electron9, Hmainsbot1 and Sam-
m888

• DJGPP Source: https://en.wikipedia.org/wiki/DJGPP?oldid=733802780 Contributors: Arvindn, CatherineMunro, SatyrTN, Bevo, Fredrik,
Markcollinsx, Ancheta Wis, Sunny256, Pamri, Quadell, Ehamberg, Gazpacho, Rich Farmbrough, Ardonik, Spoonboy42, Slipstream, Jag123,
Syzygy, A.M.~enwiki, Kocio, Schapel, Forderud, Ae-a, Bluemoose, GregorB, Marudubshinki, Qwertyus, Kbdank71, Rjwilmsi, FlaBot, Yurik-
Bot, Family Guy Guy, RadioFan, Bovineone, Pegship, SmackBot, Faisal.akeel, Unforgettableid, Armslurp, Jopsen, Thumperward, Gruzd, Frap,
Cybercobra, Staalmannen, Sharcho, Cydebot, Msnicki, Gioto, Jed S, Magioladitis, CountingPine, Gwern, Kiore, R’n’B, Algotr, STBotD, Nick-
ols k, Jerryobject, Zacatecnik, ClueBot, Kl4m-AWB, Sir Anon, Onomou, Addbot, Mabdul, Tothwolf, Grandscribe, Sergei, Fiftyquid, Yobot,
AnomieBOT, Professor Tournesol, Stephane.gourichon, Skyerise, XDaniX, Woodlot, Matthiaspaul, Marcus.brenneman, NotWith, BattyBot,
Helios crucible, Sam-m888 and Anonymous: 22

• FpgaC Source: https://en.wikipedia.org/wiki/FpgaC?oldid=733802825 Contributors: DocWatson42, Nabla, Poppafuze, Rbrady, SmackBot,
Bluebot, JonHarder, Iridescent, Wafulz, Pphh, STBot, Fpga toys, Dekart, Sam-m888 and Anonymous: 2

• GNU Compiler Collection Source: https://en.wikipedia.org/wiki/GNU_Compiler_Collection?oldid=754958157 Contributors: Matthew
Woodcraft, General Wesc, Mav, The Anome, Tarquin, Stephen Gilbert, Taw, XJaM, Merphant, Ellmist, Hirzel, B4hand, Youandme, Mbecker,
Edward, RTC, Lezek, Nixdorf, Kfet, Mdupont, Bobby D. Bryant, TakuyaMurata, Delirium, Paddu, Stan Shebs, Stevenj, Nanshu, Glenn, Marco
Krohn, AugPi, Netsnipe, Andres, Jonik, Hashar, Galik, Emperorbma, Guaka, Molinari, Doradus, Sanxiyn, Echoray, Mrand, Furrykef, Gren-
delkhan, Wernher, Thue, Quoth-22, Anupamsr, AnonMoos, Mordomo, Jeffq, Chuunen Baka, Robbot, Chealer, Korath, Naddy, Treutwein,
Rursus, Naelphin, Mattflaschen, Tea2min, Jrash, David Gerard, Senor fjord, Kenny sh, Ævar Arnfjörð Bjarmason, Paul Pogonyshev, Mellum,
MMcCallister, Sdfisher, Jason Quinn, Solipsist, Tagishsimon, Neilc, Gadfium, Pamri, Knutux, Neil Booth, Beland, Joseph Myers, OwenBlacker,
Bk0, Addicted2Sanity, Gurkha, Hanru~enwiki, GreenReaper, Now3d, Abdull, Corti, Ta bu shi da yu, Real NC, Rich Farmbrough, Pmsyyz,
Ardonik, Smyth, Too Old, Gronky, Bender235, Evice, Jwink3101, John Vandenberg, Duk, Polluks, Tritium6, LostLeviathan, Obradovic Goran,
Helix84, HasharBot~enwiki, Frodet, Michael Drüing, Liao, Mick8882003, Pinar, Conan, Krischik, Nasukaren, Sligocki, Burn, Wdfarmer,
Magetoo, Samohyl Jan, Schapel, Hadlock, Lerdsuwa, Sleigh, Btornado, Forderud, NicM, Oleg Alexandrov, Dejvid, Linas, Jannex, Mindma-
trix, Pol098, Tabletop, Torqueing, GregorB, Jlherren, CharlesC, Tyrone1979, Toussaint, Outlyer, Lovro, Palica, Jonathan Watt, Marudub-
shinki, Graham87, Ilya, Qwertyus, Kbdank71, Rjwilmsi, Atgreen, MarSch, Gavinatkinson, StuartBrady, Akihabara, Ysangkok, Mike Van Em-
merik, Ahunt, Chobot, Tene, Moocha, Metaeducation, Roboto de Ajvol, The Rambling Man, YurikBot, Wavelength, Spacepotato, Daverocks,
RussBot, FrenchIsAwesome, Wengier, Hede2000, Jengelh, Hydrargyrum, Stassats, ZacBowling, Nick, Voidxor, Bota47, Pelister, Mike92591,
Analoguedragon, Harrisonmetz, Lt-wiki-bot, Closedmouth, LanguidMandala, Danallen46, Cglue, Fram, JLaTondre, Gesslein, BrianDominy,
GrinBot~enwiki, Chris Chittleborough, Sarah, SmackBot, InverseHypercube, Unyoyega, Skywoodbird, CapitalSasha, Gilliam, Geronimooo,
Amux, Bluebot, TimBentley, Ben.c.roberts, Thumperward, Akanemoto, Metalim, DevSolar, Frap, Georg-Johann, Decltype, Tompsci, Mw-
toews, DMacks, Daniel.Cardenas, Will Beback, SashatoBot, Doug Bell, Derek farn, Guyjohnston, Iliev, Syxbit, RCX, Catapult, Soumyasch,
Loadmaster, Lipatden, Robert Bond, DevAnubis, Kvng, Hans Bauer, Eliashc, TJ Spyke, Hu12, Emx~enwiki, Paul Foxworthy, Momet, Cour-
celles, Darkcube, KerryVeenstra, Raysonho, Xose.vazquez, Lentower, HenkeB, Davnor, MaxEnt, Cydebot, Samuell, ChristTrekker, Muhandis,
Msnicki, Thijs!bot, Babyworm, Ultimus, Jdm64, DmitTrix, Electron9, Second Quantization, Paril, Widefox, Prolog, Isilanes, Dylan Lake, Lak-
shminarasimhan, Ming Hua, D V S, JAnDbot, LossIsNotMore, NapoliRoma, Martinkunev, JakobE, RebelRobot, Maxaeran, Jed S, Magioladitis,
Alcides fp, SwiftBot, Kunaldeo, Vssun, Bjornen, Eschnett, Gwern, Kiore, Everlone, Ianbicking, Numbo3, Yonidebot, AhmadSherif, MartinRine-
hart, RAult, VolkovBot, Jay Uv., Drake Redcrest, Hqb, Nxavar, Jeffzda, WikipedianYknOK, Leafyplant, BotKung, Djmckee1, Mirage.cn, Ivan
Štambuk, Phe-bot, X-Fi6, Belorn, Android Mouse, Hxhbot, Reinderien, Uzytkownik, Lightmouse, AlanUS, Denisarona, Tgpqaz, TommyCP,
Xiaoming, Jacob Myers, Dlrohrer2003, Czarkoff, Ignorance is strength, Kl4m-AWB, Niceguyedc, Pointillist, John Nevard, Jimhot1999, Fly-
ingprogrammer, Mewtu, SF007, DumZiBoT, Mjharrison, Parallelized, Sonulohani, Addbot, Mortense, Ngpd, Grandscribe, Djsuess, Victoryhb,
CarsracBot, Rainkid, Fjleonhardt, AgadaUrbanit, Wikomidia, Xitsa, Zorrobot, Balabiot, Jimsve, Fryed-peach, Yobot, CFeyecare, Ptbotgourou,
Legobot II, Amirobot, Vanished user rt41as76lk, Romster, AnomieBOT, Wikieditoroftoday, Götz, Wickorama, Citation bot, Tbvdm, Xqbot,
Anakriza, Yathimc, Locos epraix, Scientes, Alainr345, Bstarynk, DenisKrivosheev, FrescoBot, SaturnineMind, W Nowicki, Vyvyan Ade Bas-
terd, Sae1962, Arndbergmann, Hoo man, Grover Snodd, Tumacama, Seattle Jörg, Herakleitoszefesu, Sahedin, Rodrigo Rodrigues da Silva,
JnRouvignac, Jesse V., Jfmantis, Instigate cjsc (Narine), BillyPreset, Noloader, Anupj, AbhijatVichare, Haish2, H3llBot, AManWithNoPlan,
Sbmeirow, Palosirkka, RogRil, Highway Hitchhiker, Phosgram, Voomoo, ClueBot NG, Juliusbaxter, Matthiaspaul, Praveen Illa, Helpful Pixie
Bot, Ycubed100, BG19bot, Hilefoks, BattyBot, Wourriezer, Cyberbot II, ChrisGualtieri, Tagremover, ,اقرأ Laberkiste, Dexbot, Rezonansowy,
Mnafshin, Codename Lisa, Piroxiline, Cerabot~enwiki, TwoTwoHello, MartinMichlmayr, Delayline, Sowlos, Tgor, Reatlas, Amanciero, Darvii,
Comp.arch, Monochrome Monitor, Anoop Manakkalath, Gccyyyy, Sarr X, Editor-1, Joewbarber, Allenw123, Dough34, ScotXW, Monkbot,
Alinowe, Tpprufer, Dee’Kej, Indopap, Robocoder-db, Amit Bongir, Risc64, Dzampino, The Voidwalker, Insivest, GreenC bot, Fmadd and
Anonymous: 315

• HPaC++ Source: https://en.wikipedia.org/wiki/HP_aC%2B%2B?oldid=733802868Contributors: BD2412, Legalize, Kdknigga, CorenSearch-
Bot, SwisterTwister, Sam-m888 and Anonymous: 1

• IBM XL C/C++ Compilers Source: https://en.wikipedia.org/wiki/IBM_XL_C/C%2B%2B_Compilers?oldid=743922238 Contributors:
Bearcat, Peterl, BBCWatcher, Leevanjackson, Gene93k, Dsimic, Santryl, AnomieBOT, Materialscientist, FrescoBot, Helpful Pixie Bot, Andy-
mannia, Withleave, Robinargreen, Sam-m888, Music1201, Pppery and Anonymous: 5

• Intel C++ Compiler Source: https://en.wikipedia.org/wiki/Intel_C%2B%2B_Compiler?oldid=749380435 Contributors: AxelBoldt, Edward,
Stan Shebs, Schneelocke, Rockear, David.Monniaux, Victor, Pwroberts, Sdfisher, Jason Quinn, Uzume, Chowbok, Mjs, Tsman, Qutezuce,

https://en.wikipedia.org/wiki/Deep_Blue_C?oldid=753966232
https://en.wikipedia.org/wiki/Digital_Mars?oldid=735197192
https://en.wikipedia.org/wiki/DJGCC?oldid=733802752
https://en.wikipedia.org/wiki/DJGPP?oldid=733802780
https://en.wikipedia.org/wiki/FpgaC?oldid=733802825
https://en.wikipedia.org/wiki/GNU_Compiler_Collection?oldid=754958157
https://en.wikipedia.org/wiki/HP_aC%252B%252B?oldid=733802868
https://en.wikipedia.org/wiki/IBM_XL_C/C%252B%252B_Compilers?oldid=743922238
https://en.wikipedia.org/wiki/Intel_C%252B%252B_Compiler?oldid=749380435

106 CHAPTER 52. TURBO C++

Pavel Vozenilek, Ylai, DarkArctic, Qwertyus, Strait, Ysangkok, Długosz, Brandon, Gronau~enwiki, BOT-Superzerocool, Femmina, Smack-
Bot, Thumperward, PersistentLurker, Frap, Derek R Bullamore, A5b, Daniel.Cardenas, Chymicus, Melody Concerto, Hvn0413, FatalError,
Raysonho, Mgiann, Quibik, Thijs!bot, Frozenport, Widefox, GCL, Senojsitruc, Ming Hua, Magioladitis, Don-vip, Opello, R’n’B, Mrmuk,
Lanzkron, BwDraco, Crystal117, ParallelWolverine, AlphaPyro, Lightmouse, Johnanth, ClueBot, Tim32, Alexbot, 3ICE, DumZiBoT, Addbot,
Fyrael, Numbo3-bot, Yobot, AnomieBOT, Лъчезар, Afog, Pdcer, Cbpiper, Wackknuerstchen, GoBuck76, LittleWink, Azakhark, Sdjackman,
Xnn, Noloader, ZéroBot, Moritz37, Helpful Pixie Bot, BrandonHewitt, Cyberbot II, Codename Lisa, Giltir, Cbpiper2, Comp.arch, Oranjelo100,
RetiredValleyEngineer, Josephsmidt, PoorCountryBoy, GreenC bot and Anonymous: 77

• LabWindows/CVI Source: https://en.wikipedia.org/wiki/LabWindows/CVI?oldid=733803054 Contributors: Adrienj, NeoChaosX, Mordred-
KLB, RussBot, Ninly, Skeezix1000, Bluebot, Colonies Chris, Only, Oenus, Ebryns427, Jumper bones, Biblbroks, Dargaud, Wlogan, W404life,
TXiKiBoT, ElinorD, Crm123, Higuys1010, ImageRemovalBot, XLinkBot, MystBot, Addbot, Michaeldchristopher, Luckas-bot, Yobot, Won-
derfl, Xqbot, Selalerer, Trabant01, Drsurfer, Akozmins, Newmangling, Sam-m888 and Anonymous: 13

• Lattice C Source: https://en.wikipedia.org/wiki/Lattice_C?oldid=750054792 Contributors: Mintguy, NicoNet, Arteitle, PS4FA, Dmsar, Jim-
breed, Guanaco, GreenReaper, Rich Farmbrough, Ylee, CanisRufus, Dgpop, Polluks, X3J11, Mirror Vax, ElfQrin, Swtpc6800, Pelladon,
SmackBot, Bdobyns, Oswald Glinkmeyer, Hu12, Ak120, Porkchop d clown, Gwern, SieBot, Lightbot, Legobot, Jackie, Trappist the monk,
RjwilmsiBot, Matthiaspaul, Giantchen, BattyBot, ChrisGualtieri, Hmainsbot1, Hujt, Sam-m888, GreenC bot, Bender the Bot and Anonymous:
12

• LCC (compiler) Source: https://en.wikipedia.org/wiki/LCC_(compiler)?oldid=745641783 Contributors: Stan Shebs, Stevenj, Zoicon5, Fur-
rykef, Wernher, Jni, DavidCary, Ferkelparade, Neilc, Allefant, Neckelmann, Guanabot, Byrial, Polluks, A2Kafir, Lloydd, Goffrie, Drhanson,
SmackBot, Whispering, Esb, GrapeSteinbeck, Paul Foxworthy, Jztinfinity, Simon Brady, John254, Lmaltier, Slacka123, Magioladitis, Daniel-
Pharos, DumZiBoT, AbstractBeliefs, Addbot, Basilicofresco, Yobot, TaBOT-zerem, AnomieBOT, Doppelback, Mikhail Ryazanov, Matthias-
paul, Snotbot, Helpful Pixie Bot, Catclock, GreenC bot, Rule4rule3, Bender the Bot and Anonymous: 19

• Macintosh Programmer’s Workshop Source: https://en.wikipedia.org/wiki/Macintosh_Programmer’{}s_Workshop?oldid=749324262 Con-
tributors: SJK, Ellmist, Edward, Stan Shebs, GRAHAMUK, Sanxiyn, Greenrd, Ldo, RedWolf, MaGioZal, Ryanrs, Joeblakesley, MFNickster,
Asbestos, Hellisp, Ylee, Cmdrjameson, Unquietwiki, Guy Harris, CyberSkull, Forderud, Pol098, DaveApter, Graham87, Haikupoet, Xmoogle,
Krun, LordBleen, Mipadi, Jpbowen, Giddylake, Danallen46, JLaTondre, SmackBot, FlashSheridan, Bluebot, Thumperward, Daykart, Radi-
ant chains, Drinibot, Charles dye, Applemeister, JEBrown87544, Gioto, Madd the sane, Gwern, JoelGuelph, Potatoswatter, Macspaunday,
Johanges, Fratrep, ImageRemovalBot, Petchboo, Addbot, Ghettoblaster, Luckas-bot, SassoBot, FrescoBot, Motorfingers, Ubik255, John of
Reading, BG19bot, Mogism, AutomaticClown, OMPIRE, Sam-m888, GreenC bot and Anonymous: 16

• Megamax C Source: https://en.wikipedia.org/wiki/Megamax_C?oldid=711893547 Contributors: Dgpop, Polluks, RJFJR, Gurch, BirgitteSB,
Nick, Pelladon, Vanished user 34958, SmackBot, Yanksox, CmdrObot, Alphachimpbot, Raise exception, Czarkoff, Bomazi, Trickypixel and
Anonymous: 3

• MinGW Source: https://en.wikipedia.org/wiki/MinGW?oldid=752100627 Contributors: Damian Yerrick, Bryan Derksen, Zundark, Ixfd64,
Graue, CesarB, CatherineMunro, Reddi, Dysprosia, Andrewman327, Furrykef, AntoineL, Treutwein, Tim Ivorson, Markcollinsx, JesseW, David
Edgar, Wereon, Haeleth, Reub2000, Unconcerned, Lesgles, Eric B. and Rakim, Pbannister, Rich Farmbrough, Ardonik, Smyth, Gronky, Ben-
der235, MisterSheik, Mpeg4codec, Martin Fuchs, Diego Moya, Kocio, Schapel, Luzi82~enwiki, MIT Trekkie, Forderud, Lkinkade, Deeahbz,
GregorB, Isnow, LinkTiger, Gerbrant, Marudubshinki, EbenVisher, Jeremyharmon, NeonMerlin, Bushido Hacks, Andrew Rodland, FlaBot,
Who, Overand, Jengelh, Romanc19s, ZacBowling, Julienlecomte, Zzuuzz, JLaTondre, Yuuki Mayuki, SmackBot, Fractal3, Timotheus Canens,
Bluebot, Alamaison, Thumperward, Ber, Jsmethers, EdSchouten, Fuhghettaboutit, Nakon, Derek R Bullamore, Mwtoews, Daniel.Cardenas,
Staalmannen, Ser Amantio di Nicolao, Zslevi, Hvn0413, JHP, Arto B, Ashish20, FatalError, FleetCommand, Cydebot, Juansempere, Msnicki,
Johayek, RLE64, Escarbot, Dougher, Txomin, Gwern, Tzafrir, Arite, Dispenser, Algotr, KIAaze, Doug4, Joshua Issac, VolkovBot, TXiKi-
BoT, The Divine Fluffalizer, Milan Keršláger, Rogerdpack, Sarav62, S.Örvarr.S, Erik-jan otto, Dufflepod, X-Fi6, Ham Pastrami, TorLillqvist,
Android Mouse, Free Software Knight, Torhu, Cgisquet, Sc25361, Trustable, 31stCenturyMatt, Iandiver, Kl4m-AWB, Niceguyedc, Gsonnenf,
M4gnum0n, SF007, DumZiBoT, Lockal, Alanthehat, Muyiwamc2, Addbot, Mortense, Tothwolf, Ollydbg, Luckas-bot, Yobot, A Carbine Flash,
AnomieBOT, Jim1138, Earnie2, Quebec99, Locos epraix, Blenheimears, GuiderBob, Alan.A.Mick, Thomei08, Antonymous2, FrescoBot,
Sae1962, Mfwitten, Kenfyre, NSCoder, Xenofears, Cyberwizzard, Parkywiki, Pier11, BG19bot, NiXman, BattyBot, Timothy Gu, Rubenvb,
,اقرأ Dexbot, Ekkt0r, TheChampionMan1234 alt, Netjitsu, Helios crucible, , SebastianoPistore, Norvoid, Tulippyle345 and Anony-
mous: 122

• Norcroft C compiler Source: https://en.wikipedia.org/wiki/Norcroft_C_compiler?oldid=749674972 Contributors: William M. Connolley,
GreenReaper, Trevj, SmackBot, Flibble, Addbot, Softy, Yobot, AnomieBOT, Monkbot, Sam-m888, GreenC bot and Anonymous: 1

• Open64 Source: https://en.wikipedia.org/wiki/Open64?oldid=737025668 Contributors: Greg Lindahl, SimonP, Graue, Raul654,
GreatWhiteNortherner, David Gerard, Ssd, Mboverload, Gronky, Kissall~enwiki, Nwsmith, Polluks, Minghong, Liao, Mindmatrix, Ruud Koot,
BD2412, Snaphat, Kbdank71, JLaTondre, Gesslein, SmackBot, Bluebot, Thumperward, Trou, Raysonho, Arch dude, Magioladitis, Faizhaider,
Taylock, Markhahn, VolkovBot, DRady, Yinma, S.Örvarr.S, Timhowardriley, Rilak, Kl4m-AWB, Gürkan Myczko, Addbot, Mortense, Yobot,
Doctaweeks, Drenk, Motorfingers, Klbrain, ZéroBot, AManWithNoPlan, Concentrate2, Dexbot, Sam-m888, Kiwipidae, MagComm and Anony-
mous: 29

• Oracle Developer Studio Source: https://en.wikipedia.org/wiki/Oracle_Developer_Studio?oldid=745418037 Contributors: Centrx, DNewhall,
Herzen, Tarjei Knapstad, AJP, CyberSkull, Rchrd, Haikupoet, Thumperward, Lejzy, Raysonho, Cydebot, PhiLiP, NapoliRoma, Oicumayberight,
Calzakk, JonThackray, VVVBot, Jerryobject, Free Software Knight, Houyi, Yurikoles, Mmddyyyy, Addbot, Luckas-bot, Yobot, Bunnyhop11,
Xqbot, Alr1943, FrescoBot, Surv1v4l1st, D’ohBot, RedBot, TobeBot, Dinamik-bot, Noloader, Primefac, Kkm010, ZéroBot, NikMolchanov,
Mittgaurav, Bronsonboy, Blelbach, BattyBot, FancyIX, Yurichev, Filedelinkerbot and Anonymous: 31

• PathScale Source: https://en.wikipedia.org/wiki/PathScale?oldid=743245396 Contributors: Zundark, Real NC, Bender235, Snaphat, Josh Par-
ris, Welsh, JLaTondre, SmackBot, Frap, CmdrObot, Andyjsmith, Magioladitis, Nodekeeper, ChrisHodgesUK, Addbot, Softy, Luckas-bot,
Locos epraix, W Nowicki, Skyerise, HellbenterX, Demonkoryu, BattyBot, Sam-m888 and Anonymous: 16

https://en.wikipedia.org/wiki/LabWindows/CVI?oldid=733803054
https://en.wikipedia.org/wiki/Lattice_C?oldid=750054792
https://en.wikipedia.org/wiki/LCC_(compiler)?oldid=745641783
https://en.wikipedia.org/wiki/Macintosh_Programmer%2527s_Workshop?oldid=749324262
https://en.wikipedia.org/wiki/Megamax_C?oldid=711893547
https://en.wikipedia.org/wiki/MinGW?oldid=752100627
https://en.wikipedia.org/wiki/Norcroft_C_compiler?oldid=749674972
https://en.wikipedia.org/wiki/Open64?oldid=737025668
https://en.wikipedia.org/wiki/Oracle_Developer_Studio?oldid=745418037
https://en.wikipedia.org/wiki/PathScale?oldid=743245396

52.6. TEXT AND IMAGE SOURCES, CONTRIBUTORS, AND LICENSES 107

• Pelles C Source: https://en.wikipedia.org/wiki/Pelles_C?oldid=745418005 Contributors: Edward, Clementi, Mblumber, Alaibot, Gioto, Ben
pcc, Women hate me, Pig837, Free Software Knight, ImageRemovalBot, Avenged Eightfold, Tweakbot, RealWorldExperience, Anticipation of
a New Lover’s Arrival, The, Addbot, Fiftyquid, Yobot, Bukvodel, Frank50 s, JC Valeron, Jfmantis, Primefac, Rudolfwalter, Gaborca, Strcat,
Mdrnpndr, Alex Awwesome, Jonitake, Sam-m888, Rule4rule3 and Anonymous: 10

• Portable C Compiler Source: https://en.wikipedia.org/wiki/Portable_C_Compiler?oldid=739447812 Contributors: 7265, Grendelkhan, Anon-
Moos, AlistairMcMillan, M1ss1ontomars2k4, Gronky, Bender235, Kgaughan, Bolwerk, Mindmatrix, Qwertyus, Gavinatkinson, Ysangkok,
Jftuga, Hillthekhore, Bgwhite, Nick, SmackBot, Thumperward, Snori, Letdorf, Frap, Cmgross, Lentower, Bobnorwal, Ameliorate!, Widefox,
Yarq, DAGwyn, Eschnett, Sheep2000, VolkovBot, Nxavar, Kl4m, Czarkoff, Niceguyedc, BOTarate, DumZiBoT, Boleyn, Addbot, Lightbot,
Yobot, AnomieBOT, Wickorama, Doppelback, RjwilmsiBot, H3llBot, Helpful Pixie Bot, Myconix, Abo Junghichi, Rule4rule3 and Anony-
mous: 35

• The Portland Group Source: https://en.wikipedia.org/wiki/The_Portland_Group?oldid=738558050 Contributors: Stan Shebs, Ruud Koot,
Rjwilmsi, SmackBot, Chris the speller, Alphathon, James086, Tellyaddict, Vigeesh, Tinucherian, Gwern, Squids and Chips, Wiae, Muhan-
des, Mleconte, Yobot, AnomieBOT, Delusion23, Ciderkeg, BattyBot, Cyberbot II, Lesser Cartographies, Original Control, Sam-m888, GreenC
bot and Anonymous: 7

• QuickC Source: https://en.wikipedia.org/wiki/QuickC?oldid=740953163 Contributors: Pcb21, Coldacid, Rich Farmbrough, Pol098, JLaTon-
dre, Kintetsubuffalo, Sadads, FleetCommand, EdJohnston, Gioto, TXiKiBoT, GL1zdA, ImageRemovalBot, Addbot, Nguoimay, Yobot, Wm243,
Nameless23, Erik9bot, ChuispastonBot, Zackaback, Atomician, BattyBot, Betäubungsmittelmeister, Bender the Bot and Anonymous: 7

• ROSE (compiler framework) Source: https://en.wikipedia.org/wiki/ROSE_(compiler_framework)?oldid=733803678 Contributors: Shlomif,
Liao, GünniX, Anders.Warga, Frap, Cybercobra, Lambiam, Jerryobject, Dsimic, Jarble, Yobot, Efa, Wickorama, Sam-m888 and Anonymous:
4

• Small Device C Compiler Source: https://en.wikipedia.org/wiki/Small_Device_C_Compiler?oldid=751131736 Contributors: Sanxiyn, Fly-
ByPC, DavidCary, Kohtala, Mll1013, BD2412, Allen Moore, Alvin-cs, SmackBot, Alsh, HenkeB, DmitTrix, Isilanes, Kl4m-AWB, Callipygian-
SchoolGirl, Rror, Addbot, Lightbot, Yobot, Laire0, Migaber, EmausBot, Bersam, Mikhail Ryazanov, WIERDGREENMAN, Dobie80, Debrell,
FockeWulf FW 190, Sam-m888, GreenC bot and Anonymous: 29

• Small-C Source: https://en.wikipedia.org/wiki/Small-C?oldid=749052172 Contributors: Mav, Idknow, Liftarn, Egil, Stan Shebs, Dcoetzee,
Wernher, Psychonaut, Ralph Corderoy, RossPatterson, ZeroOne, Danakil, Dgpop, Polluks, Prodicus, Arneth, Tzadikv, Qwertyus, Reisio, Qu-
uxplusone, RussBot, Nzeemin, SmackBot, IvanCurtis, Doodle77, A5b, TJ Spyke, Cydebot, GermanX, Hbent, Gwern, Nono64, DadaNeem,
Addbot, SpellingBot, Lightbot, Darolew, S dubrovich, Shaddim, Comp.arch, Sam-m888 and Anonymous: 17

• Softune Source: https://en.wikipedia.org/wiki/Softune?oldid=745418094 Contributors: DGG, Church, Green-Halcyon, Primefac, Matthiaspaul,
Qetuth, Tagremover and Farooz pandith

• TenDRA Compiler Source: https://en.wikipedia.org/wiki/TenDRA_Compiler?oldid=750153613 Contributors: Skim, Glenn, K1Bond007,
Earthsound, Tim Ivorson, Markcollinsx, Quadell, Broonie, Rich Farmbrough, Deeahbz, Marudubshinki, Dangerous Angel, Pi Delport,
Ashemedai, SmackBot, Carpetsmoker, Frap, Agh, Luksuh, Mild Bill Hiccup, Niceguyedc, Katherine Flavel, Addbot, Mreftel, Eekerz, Avi-
cAWB, Cyberbot II, Chai-alice, Sam-m888, GreenC bot and Anonymous: 8

• THINKC Source: https://en.wikipedia.org/wiki/THINK_C?oldid=744417190Contributors: SJK, Furrykef, DNewhall, Guy Harris, Dethbunny,
Haikupoet, DevastatorIIC, Paul Magnussen, JLaTondre, SmackBot, Myrdred, Bluebot, JonHarder, Msnomer, Alexr wiki, Potatoswatter, Julian-
colton, Pborenstein, Malcolmxl5, Mckartha, Qwfp, Addbot, Softy, AnomieBOT, Mijhino, Skyerise, Helpful Pixie Bot, Ndanielm, Meatsgains,
~riley, Righteousskills and Anonymous: 7

• Tiny C Compiler Source: https://en.wikipedia.org/wiki/Tiny_C_Compiler?oldid=732061391 Contributors: Damian Yerrick, Dwheeler, Shell-
reef, ZoeB, Sanxiyn, Goofyheadedpunk, Qef, Samboy, Duk, Bolwerk, Prodicus, Derbeth, MarSch, FlaBot, Akihabara, Mike92591, Richard-
cavell, Gesslein, Cmglee, SmackBot, KelleyCook, Jasminek, JorgePeixoto, Crashmatrix, Thumperward, Acipsen, Frap, Amine Brikci N, Cm-
drObot, JerkerNyberg, Inkington, D V S, MER-C, Glass Tomato, GermanX, Gwern, Silas S. Brown, Warut, Raise exception, Mastersrp, Nacarl-
son, SteveJothen, Addbot, Mortense, Cjullien, Agurcu, Quadrescence, Yobot, Wickorama, Hard Backrest, Mattpav, FrescoBot, Doppelback,
DC, WikitanvirBot, ZéroBot, Panfider, Themanyone, BG19bot, Codename Lisa, LupoStesso, ArmbrustBot, Helios crucible, Rule4rule3 and
Anonymous: 51

• Vbcc Source: https://en.wikipedia.org/wiki/Vbcc?oldid=733803931 Contributors: Lambda, Polluks, BD2412, Raffaele Megabyte, Ysangkok,
Rwwww, SmackBot, Frap, ALK, Ronaldvd, Niceguyedc, Hitchhikr, Fiftyquid, Sam-m888 and Anonymous: 4

• Visual C++ Source: https://en.wikipedia.org/wiki/Visual_C%2B%2B?oldid=750939839 Contributors: Bryan Derksen, Bkellihan, Mrwojo,
Frecklefoot, Modster, Ixfd64, TakuyaMurata, Pcb21, Goatasaur, Kingturtle, Furrykef, Wernher, Raul654, Sander123, Lowellian, Adzmsane,
Feydakin, Curps, Coldacid, Alexf, LucasVB, Bumm13, Asbestos, Andreas Kaufmann, Kate, Mernen, Ta bu shi da yu, ClockworkTroll, Im-
roy, Neckelmann, Rich Farmbrough, Pavel Vozenilek, Zenohockey, Hayabusa future, Bobo192, Somebodympc, Shlomital, Hooperbloob, Melah
Hashamaim, Guy Harris, Sandstig, Gunslinger47, Sl, Damnreds, Yamla, Schapel, K3rb, Forderud, Keithius, Jaguarstrike, MattGiuca, User-
name314, Alecv, Hideyuki, Ilya, Canderson7, Rjwilmsi, MJGR, FlaBot, Skyfiler, Mirror Vax, DevastatorIIC, Mathrick, Chobot, Peterl, Yurik-
Bot, RussBot, Yuhong, Hydrargyrum, Stephenb, Gaius Cornelius, Yrithinnd, Tony1, Vlad, Xpclient, Ninly, Whaa?, Star trooper man, Liujiang,
Glu0n, SmackBot, Doomdayx, Kentyman, Ohnoitsjamie, IMacWin95, Anwar saadat, SynergyBlades, Domthedude001, DHN-bot~enwiki, Nin-
tendude, Frap, Dinjiin, UU, Radagast83, Mistress Selina Kyle, Astroview120mm, Luís Felipe Braga, Mwtoews, Acdx, Abi79, Sbmehta, Nean-
tHumain, Soumyasch, IronGargoyle, 16@r, Hvn0413, Wikidrone, Waggers, Cheezerman, Asmpgmr, FatalError, SkyWalker, FleetCommand,
CmdrObot, Axelstudios, Gyopi, Gogo Dodo, Llort, Quibik, Torc2, ErrantX, Escarbot, AntiVandalBot, Seaphoto, Memset, Dreaded Walrus,
Freedomlinux, Camhusmj38, Hasek is the best, Sodabottle, Nposs, Gwern, J.delanoy, Wumpus3000, Jesant13, Marc2live, Joshua Issac, Apar-
doe, Steel1943, Reelrt, BarroColorado, Phasma Felis, Alanfeld, Lanzkron, Philip Trueman, A4bot, ElinorD, Evilfeeds, Ti89TProgrammer,
Gorgeshrinks, Jackfork, ^demonBot2, Notbyworks, GL1zdA, Karjam, Julekmen, Billinrio, OsamaK, RHodnett, Keilana, Xenonym, BorisDušek,
Paprik, ConfusedSushi, Pagen HD, Cvinoth, ImageRemovalBot, MenoBot, ClueBot, Bernard Ladenthin, Cab.jones, Ndenison, John5246, Coun-
terVandalismBot, Ryanonwheels12, Verticalsearch, PixelBot, Hans42, KyroII, InternetMeme, Wikiuser100, GDibyendu, Deineka, Addbot,

https://en.wikipedia.org/wiki/Pelles_C?oldid=745418005
https://en.wikipedia.org/wiki/Portable_C_Compiler?oldid=739447812
https://en.wikipedia.org/wiki/The_Portland_Group?oldid=738558050
https://en.wikipedia.org/wiki/QuickC?oldid=740953163
https://en.wikipedia.org/wiki/ROSE_(compiler_framework)?oldid=733803678
https://en.wikipedia.org/wiki/Small_Device_C_Compiler?oldid=751131736
https://en.wikipedia.org/wiki/Small-C?oldid=749052172
https://en.wikipedia.org/wiki/Softune?oldid=745418094
https://en.wikipedia.org/wiki/TenDRA_Compiler?oldid=750153613
https://en.wikipedia.org/wiki/THINK_C?oldid=744417190
https://en.wikipedia.org/wiki/Tiny_C_Compiler?oldid=732061391
https://en.wikipedia.org/wiki/Vbcc?oldid=733803931
https://en.wikipedia.org/wiki/Visual_C%252B%252B?oldid=750939839

108 CHAPTER 52. TURBO C++

Mortense, Yobot, Mauler90, AnomieBOT, Arjun G. Menon, Materialscientist, Cvhyphus, Miym, Yfedoseev, Kwiki, MargRhi, MastiBot, Eha-
sis, ThinkingStiff, Massood.khaari, ComradeSlice, Martyn Lovell, Vrenator, Pcunite, Christoph hausner, Iulian.serbanoiu, Swasical, Alex3yoyo,
Amir.shokouhi, Westway50, Kkm010, H3llBot, Sbmeirow, Togmolodon500, Dineshkumar Ponnusamy, Ecaligo, Mikhail Ryazanov, Kypr8,
ClueBot NG, Ionut verzea, Widr, ShroudedNight, BG19bot, RJKings, Misuo, Michaelmalak, Mhadoks12, Angbor, ChrisGualtieri, Khazar2,
EditorE, Codename Lisa, Gzyo, Akm97, EM64T, TheFrog001, Jamesmcmahon0, Colbey84, Dennis1357, Monkbot, Vieque, The Quixotic
Potato, GreenC bot, Bender the Bot and Anonymous: 280

• IBM VisualAge Source: https://en.wikipedia.org/wiki/IBM_VisualAge?oldid=747532725 Contributors: SJK, Frecklefoot, Michael Hardy,
Glenn, Zoicon5, Wernher, Brouhaha, Everyking, AlistairMcMillan, Matt Crypto, Neilc, Sleep pilot, DNewhall, Oneiros, Guy Harris, Rick-
DeNatale, Forderud, Mcsee, Woohookitty, SDC, Marudubshinki, Mikehambleton, Ysangkok, Ewlyahoocom, Gurch, YurikBot, Cliffb, Pburka,
SAE1962, Rwwww, SmackBot, Zanter, Unforgettableid, Bluebot, Jerome Charles Potts, BBCWatcher, Sct72, Hu12, Maxwellb, Leevanjack-
son, Pseudo-Richard, Cydebot, Beta Trom, KKong, Magioladitis, Hroðulf, Gwern, WithGLEE, Tweisbach, TXiKiBoT, Jerryobject, Mdjohns5,
Rural 2, Fishnet37222, Deineka, Addbot, Lightbot, Peter Flass, AnomieBOT, JimBrammer, Tct13, AdjustaMatic, SL93, Wo.luren, Primefac,
H3llBot, Will Beback Auto, Pdxveloman, Sam-m888 and Anonymous: 19

• Watcom C/C++ Source: https://en.wikipedia.org/wiki/Watcom_C/C%2B%2B?oldid=750639562 Contributors: Komap, Korath, Stewartad-
cock, Curps, Quadell, DNewhall, Oneiros, Qutezuce, Smyth, Bletch, LOL, Uncle G, Pol098, Haikupoet, Mirror Vax, Perrella, Wengier, Nick,
Mika76, Ozzmosis, SmackBot, Yamaguchi , Unforgettableid, Armslurp, KiloByte, Thumperward, OrangeDog, Danjewell, MrBoo, Fpsduck,
Zippy1981, Starionwolf, Wermlandsdata, Tchannon, DmitTrix, Escarbot, Gioto, Wootery, Magioladitis, Yevgeniwebmaster, A3nm, Gwern,
Cfrydj, R’n’B, Adavidb, Horst.Burkhardt, VolkovBot, Lexein, Anta40, Martarius, Ideal gas equation, Rosuav, Carriearchdale, DumZiBoT, Ad-
dbot, Mortense, Ghettoblaster, GSMR, AgadaUrbanit, Lightbot, Fiftyquid, Yobot, Peter Flass, AVB, Wickorama, ArthurBot, Ivan Shmakov,
Green Cardamom, Codegen86, Marcoapc, Sbmeirow, Palosirkka, Plebbeh, Be..anyone, Ycubed100, BG19bot, Cyberbot II, Dexbot, Kalilaj,
Chai-alice, Wkliang, Vieque, GreenC bot, Rule4rule3 and Anonymous: 31

• Z88DK Source: https://en.wikipedia.org/wiki/Z88DK?oldid=709510895 Contributors: Liftarn, Stan Shebs, David Thrale, Dysprosia, Wernher,
Klemen Kocjancic, Pak21, Regebro, CanisRufus, Polluks, Csabo, StuartBrady, Neilbeach, Open2universe, Thumperward, WauloK, Minna Sora
no Shita, Cydebot, NapoliRoma, EmanWilm, Lightbot, FChurca, KLBot2, Codename Lisa and Anonymous: 17

• Borland C++ Source: https://en.wikipedia.org/wiki/Borland_C%2B%2B?oldid=720496151 Contributors: Komap, Bogdangiusca, AntoineL,
Alkivar, Qutezuce, Pavel Vozenilek, Mfx, Polluks, Ariadie, Woohookitty, DoubleBlue, FlaBot, Fragglet, SmackBot, Blue520, Touseol, Utsutsu,
Colonies Chris, Cybercobra, AlexJ, Goodnightmush, CmdrObot, Rogerio.ramos, JAnDbot, Davidhbolton, Thompson.matthew, NeoUltra, Nihad
Hamzic~enwiki, Vijaysnkar, Andrew1~enwiki, Jusdafax, Vd437, Addbot, Mortense, Ghettoblaster, PlankBot, Luckas-bot, Yobot, ArthurBot,
Quester29, Sheeze007, Hoo man, Tdelchiaro, Saint1997, Anir1uph, Gary Dee, Marcelocantos, Julesmazur, ChrisGualtieri, Gzyo, Asdklf;,
Vengalavinnay, EsseNino and Anonymous: 58

• C++/CX Source: https://en.wikipedia.org/wiki/C%2B%2B/CX?oldid=736497624 Contributors: Uzume, Alvin-cs, A5b, Sundström, Cygon,
Magioladitis, Nyq, Doub, SchreiberBike, Addbot, Yobot, Wonderfl, Wikeithpedia, ZéroBot, ChuispastonBot, Snotbot, Rept0n1x, Yurij Zagreb-
noy, Richie765 and Anonymous: 20

• C++Builder Source: https://en.wikipedia.org/wiki/C%2B%2BBuilder?oldid=749004940 Contributors: Christian List, Tim Starling, Stan
Shebs, Bogdangiusca, Vargenau, Bemoeial, Magnus.de, Xiaodai~enwiki, Robbot, Craig Stuntz, Fredrik, Yacht, Fennec, Curps, Sdfisher, Alis-
tairMcMillan, Mike Rosoft, Pavel Vozenilek, Jlin, Mochi~enwiki, Sl, Pol098, Gengiskanhg, Marudubshinki, BD2412, BenWilliamson, Ligulem,
FlaBot, Mirror Vax, Chobot, YurikBot, Cpc464, Nick, Zwobot, Caerwine, Closedmouth, Heathhunnicutt, SmackBot, Faisal.akeel, Thumper-
ward, Nintendude, MCWNT, NeantHumain, Feureau, JoeBot, Martin Kozák, MarsRover, Valodzka, Teratornis, Ebrahim, Barek, Waylonflinn,
SteveSims, Magioladitis, Nyq, Tedickey, Tinucherian, Gwern, ManoloKosh, MenasimBot, Otorg, Wenli, Andy Dingley, SieBot, Ham Pastrami,
DaBler, Free Software Knight, ImageRemovalBot, Shidzu, Martarius, Sfan00 IMG, KimMadsen, DFRussia, Alexbot, Johnnyvel, Fastily, Pressre-
leasecop, Addbot, Mortense, Dyker, Mr. Wheely Guy, Cst17, Crayon2000, Download, 5 albert square, Lightbot, Ptbotgourou, Oracle of Truth,
Vanished user rt41as76lk, D0ktorz, Wickorama, C2equalA2plusB2, ArthurBot, 1111mol, Locos epraix, Zibingrong, Diwas, RedBot, Cjrcl,
Tdelchiaro, Ceswiki, Siripuramrk, Bmitov, Tom Slappy, EmausBot, Primefac, Dmc271, ZéroBot, MADCastro2012, Umar1996, Theopolisme,
Pratyya Ghosh, Codename Lisa, Makecat-bot, Sjansje, InternetArchiveBot, GreenC bot and Anonymous: 71

• Cfront Source: https://en.wikipedia.org/wiki/Cfront?oldid=733804194 Contributors: Bryan Derksen, Ed Poor, Andre Engels, XJaM, Lir,
Jizzbug, Eurleif, CesarB, Mark Foskey, Glenn, Pizza Puzzle, Wernher, Enochlau, SimonMayer, Curps, Bensaccount, Jeffwarnica, Smyth, Lec-
tonar, Oleg Alexandrov, Marudubshinki, Mirror Vax, Mig21bp, Andyluciano~enwiki, TPO-bot, DmitTrix, Gwern, Tomalak geretkal, Alexbot,
Micahh, Dawynn, Lightbot, Legobot, Ipsign, ChrisGualtieri, Khazar2, Sam-m888 and Anonymous: 10

• Shed Skin Source: https://en.wikipedia.org/wiki/Shed_Skin?oldid=742847462 Contributors: Zundark, Edward, Bearcat, Alvin-cs, Thumper-
ward, Magioladitis, Doug, Calliopejen1, Jerryobject, Arkanosis, XLinkBot, Hmorris94, Jarble, Yobot, Jemiele1, Xiaomao123, Aflafla1, Jay-
Sebastos, Illumen, KLBot2, Werxnet, PaulBoddie, Fraulein451, Alessandro Medici, Eman235, Bender the Bot and Anonymous: 11

• Turbo C++ Source: https://en.wikipedia.org/wiki/Turbo_C%2B%2B?oldid=745417967 Contributors: Ahoerstemeier, Haakon, Bogdangiusca,
Confuzion, Pavel Vozenilek, Aperculum, *drew, RoyBoy, Mfx, Yamla, AlexKarpman~enwiki, Umapathy, Ariadie, RHaworth, Armando,
Erkcan, Windchaser, Chobot, Nick, Passive, Marc44, Emersoni, Zzuuzz, Ozzmosis, Adam Mirowski, Od Mishehu, Dstar2, Arny, Ohnoits-
jamie, Bluebot, Nick Levine, A multidimensional liar, Decltype, MichaelBillington, Avitya, Iridescent, Xcentaur, Kamael~enwiki, Starionwolf,
Thijs!bot, Medevilenemy, Rogerio.ramos, Seaphoto, Rmsuperstar99, JAnDbot, Barek, Tedickey, Tinucherian, Akshar77, Avsharath, Pharaoh
of the Wizards, Mahewa, Scott1329m, Juliancolton, VolkovBot, Mercy, SutharsanJIsles, Ham Pastrami, DaBler, Free Software Knight, DFRus-
sia, Wutsje, Marcejose, DragonBot, SF007, Addbot, Mortense, Mr. Wheely Guy, Tide rolls, Yobot, Wm243, TheCuriousGnome, FrescoBot,
Jonesey95, Arivoli.r, Full-date unlinking bot, Primefac, Solarra, Dcirovic, Tolly4bolly, MADCastro2012, ClueBot NG, Bakrani, Shaddim,
SAMNAD.S, Nikos 1993, Tentinator, Comp.arch, Kdp747, Philip66354, Vineetchoudhary291, Nishantnikhil, GreenC bot and Anonymous:
108

https://en.wikipedia.org/wiki/IBM_VisualAge?oldid=747532725
https://en.wikipedia.org/wiki/Watcom_C/C%252B%252B?oldid=750639562
https://en.wikipedia.org/wiki/Z88DK?oldid=709510895
https://en.wikipedia.org/wiki/Borland_C%252B%252B?oldid=720496151
https://en.wikipedia.org/wiki/C%252B%252B/CX?oldid=736497624
https://en.wikipedia.org/wiki/C%252B%252BBuilder?oldid=749004940
https://en.wikipedia.org/wiki/Cfront?oldid=733804194
https://en.wikipedia.org/wiki/Shed_Skin?oldid=742847462
https://en.wikipedia.org/wiki/Turbo_C%252B%252B?oldid=745417967

52.6. TEXT AND IMAGE SOURCES, CONTRIBUTORS, AND LICENSES 109

52.6.2 Images
• File:8bit-dynamiclist_(reversed).gif Source: https://upload.wikimedia.org/wikipedia/commons/c/cc/8bit-dynamiclist_%28reversed%29.gif
License: CC-BY-SA-3.0 Contributors: This file was derived from: 8bit-dynamiclist.gif
Original artist: Seahen, User:Rezonansowy

• File:Ambox_important.svg Source: https://upload.wikimedia.org/wikipedia/commons/b/b4/Ambox_important.svg License: Public domain
Contributors: Own work, based off of Image:Ambox scales.svg Original artist: Dsmurat (talk · contribs)

• File:Blaise_pascal.jpg Source: https://upload.wikimedia.org/wikipedia/commons/7/79/Blaise_pascal.jpg License: Public domain Contributors:
? Original artist: ?

• File:BorlandCPPbuilder6.png Source: https://upload.wikimedia.org/wikipedia/en/3/3b/BorlandCPPbuilder6.png License: Fair use Contribu-
tors:
my own work
Original artist: ?

• File:Commons-logo.svg Source: https://upload.wikimedia.org/wikipedia/en/4/4a/Commons-logo.svg License: PD Contributors: ? Original
artist: ?

• File:Computer-blue.svg Source: https://upload.wikimedia.org/wikipedia/commons/d/db/Computer-blue.svg License: CC0 Contributors:
OpenClipart Original artist: OpenClipart

• File:Djgpp_logo.svg Source: https://upload.wikimedia.org/wikipedia/commons/6/65/Djgpp_logo.svg License: Public domain Contributors:
Transferred from en.wikipedia to Commons. (Original Image) Original artist: The original uploader was CountingPine at English Wikipedia

• File:Edit-clear.svg Source: https://upload.wikimedia.org/wikipedia/en/f/f2/Edit-clear.svg License: Public domain Contributors: The Tango!
Desktop Project. Original artist:
The people from the Tango! project. And according to the meta-data in the file, specifically: “Andreas Nilsson, and Jakub Steiner (although
minimally).”

• File:Folder_Hexagonal_Icon.svg Source: https://upload.wikimedia.org/wikipedia/en/4/48/Folder_Hexagonal_Icon.svgLicense: Cc-by-sa-3.0
Contributors: ? Original artist: ?

• File:Free_and_open-source_software_logo_(2009).svg Source: https://upload.wikimedia.org/wikipedia/commons/3/31/Free_and_
open-source_software_logo_%282009%29.svg License: Public domain Contributors: FOSS Logo.svg Original artist: Free Software Portal
Logo.svg (FOSS Logo.svg): ViperSnake151

• File:GCC_DJGPP_Windows.png Source: https://upload.wikimedia.org/wikipedia/commons/a/aa/GCC_DJGPP_Windows.png License:
GPL Contributors: it is from english wikipedia (Image:GCC DJGPP Windows.png) Original artist: Jed S

• File:GNU_Compiler_Collection_logo.svg Source: https://upload.wikimedia.org/wikipedia/commons/a/af/GNU_Compiler_Collection_logo.
svg License: CC-BY-SA-3.0 Contributors: From http://gcc.gnu.org/img/gccegg.svg, with tweaks Original artist: https://gcc.gnu.org/img/gccegg.
svg

• File:Heckert_GNU_white.svg Source: https://upload.wikimedia.org/wikipedia/en/2/22/Heckert_GNU_white.svg License: CC-BY-SA-2.0
Contributors:
gnu.org Original artist:
Aurelio A. Heckert

• File:HelloWorld.svg Source: https://upload.wikimedia.org/wikipedia/commons/2/28/HelloWorld.svg License: Public domain Contributors:
Own work Original artist: Wooptoo

• File:Industry5.svg Source: https://upload.wikimedia.org/wikipedia/commons/2/2a/Industry5.svg License: CC0 Contributors: https://
openclipart.org/detail/237859/factory Original artist: Tsaoja

• File:LLVM_Logo.svg Source: https://upload.wikimedia.org/wikipedia/en/4/4c/LLVM_Logo.svg License: Fair use Contributors:
The logo is from the http://llvm.org website. http://llvm.org/img/Dragon.ai Original artist: ?

• File:Linux_kernel_interfaces.svg Source: https://upload.wikimedia.org/wikipedia/commons/6/68/Linux_kernel_interfaces.svg
License: CC BY-SA 3.0 Contributors: This vector image includes elements that have been taken or adapted from this: Tux-shaded.svg Tux-shaded.svg. Original artist:
ScotXW

• File:Lock-green.svg Source: https://upload.wikimedia.org/wikipedia/commons/6/65/Lock-green.svg License: CC0 Contributors: en:File:
Free-to-read_lock_75.svg Original artist: User:Trappist the monk

• File:MPW_Shell.png Source: https://upload.wikimedia.org/wikipedia/en/3/3b/MPW_Shell.png License: Fair use Contributors:
The logo may be obtained from Apple, Inc..
Original artist: ?

• File:MPW_Shell_script.png Source: https://upload.wikimedia.org/wikipedia/en/7/7d/MPW_Shell_script.png License: Fair use Contributors:
User:JEBrown87544 Original artist: ?

• File:Metrowerks_CodeWarrior_Professional_Release_1.jpg Source: https://upload.wikimedia.org/wikipedia/commons/c/c4/
Metrowerks_CodeWarrior_Professional_Release_1.jpg License: Public domain Contributors: Own work Original artist: Gona.eu

https://upload.wikimedia.org/wikipedia/commons/c/cc/8bit-dynamiclist_%2528reversed%2529.gif
//commons.wikimedia.org/wiki/File:8bit-dynamiclist.gif
//commons.wikimedia.org/wiki/User:Seahen
//commons.wikimedia.org/wiki/User:Rezonansowy
https://upload.wikimedia.org/wikipedia/commons/b/b4/Ambox_important.svg
//commons.wikimedia.org/wiki/File:Ambox_scales.svg
//commons.wikimedia.org/wiki/User:Dsmurat
//commons.wikimedia.org/wiki/User_talk:Dsmurat
//commons.wikimedia.org/wiki/Special:Contributions/Dsmurat
https://upload.wikimedia.org/wikipedia/commons/7/79/Blaise_pascal.jpg
https://upload.wikimedia.org/wikipedia/en/3/3b/BorlandCPPbuilder6.png
https://upload.wikimedia.org/wikipedia/en/4/4a/Commons-logo.svg
https://upload.wikimedia.org/wikipedia/commons/d/db/Computer-blue.svg
https://upload.wikimedia.org/wikipedia/commons/6/65/Djgpp_logo.svg
//en.wikipedia.org
https://en.wikipedia.org/wiki/en:File:Djgpp_logo.svg
https://en.wikipedia.org/wiki/User:CountingPine
https://en.wikipedia.org/wiki/
https://upload.wikimedia.org/wikipedia/en/f/f2/Edit-clear.svg
http://tango.freedesktop.org/Tango_Desktop_Project
http://tango.freedesktop.org/Tango_Desktop_Project
http://tango.freedesktop.org/The_People
https://upload.wikimedia.org/wikipedia/en/4/48/Folder_Hexagonal_Icon.svg
https://upload.wikimedia.org/wikipedia/commons/3/31/Free_and_open-source_software_logo_%25282009%2529.svg
https://upload.wikimedia.org/wikipedia/commons/3/31/Free_and_open-source_software_logo_%25282009%2529.svg
//commons.wikimedia.org/wiki/File:Free_Software_Portal_Logo.svg
//commons.wikimedia.org/wiki/File:Free_Software_Portal_Logo.svg
//commons.wikimedia.org/wiki/File:Free_Software_Portal_Logo.svg
//commons.wikimedia.org/wiki/User:ViperSnake151
https://upload.wikimedia.org/wikipedia/commons/a/aa/GCC_DJGPP_Windows.png
https://en.wikipedia.org/wiki/User:Jed_S
https://upload.wikimedia.org/wikipedia/commons/a/af/GNU_Compiler_Collection_logo.svg
https://upload.wikimedia.org/wikipedia/commons/a/af/GNU_Compiler_Collection_logo.svg
http://gcc.gnu.org/img/gccegg.svg
https://gcc.gnu.org/img/gccegg.svg
https://gcc.gnu.org/img/gccegg.svg
https://upload.wikimedia.org/wikipedia/en/2/22/Heckert_GNU_white.svg
http://www.gnu.org/graphics/heckert_gnu.html
http://wiki.colivre.net/Aurium/
https://upload.wikimedia.org/wikipedia/commons/2/28/HelloWorld.svg
//commons.wikimedia.org/wiki/User:Wooptoo
https://upload.wikimedia.org/wikipedia/commons/2/2a/Industry5.svg
https://openclipart.org/detail/237859/factory
https://openclipart.org/detail/237859/factory
https://upload.wikimedia.org/wikipedia/en/4/4c/LLVM_Logo.svg
http://llvm.org/
http://llvm.org/img/Dragon.ai
https://upload.wikimedia.org/wikipedia/commons/6/68/Linux_kernel_interfaces.svg
https://en.wikipedia.org/wiki/vector_image
//commons.wikimedia.org/wiki/File:Tux-shaded.svg
//commons.wikimedia.org/wiki/User:ScotXW
https://upload.wikimedia.org/wikipedia/commons/6/65/Lock-green.svg
https://en.wikipedia.org/wiki/File:Free-to-read_lock_75.svg
https://en.wikipedia.org/wiki/File:Free-to-read_lock_75.svg
//commons.wikimedia.org/w/index.php?title=User:Trappist_the_monk&action=edit&redlink=1
https://upload.wikimedia.org/wikipedia/en/3/3b/MPW_Shell.png
https://upload.wikimedia.org/wikipedia/en/7/7d/MPW_Shell_script.png
//en.wikipedia.org/wiki/User:JEBrown87544
https://upload.wikimedia.org/wikipedia/commons/c/c4/Metrowerks_CodeWarrior_Professional_Release_1.jpg
https://upload.wikimedia.org/wikipedia/commons/c/c4/Metrowerks_CodeWarrior_Professional_Release_1.jpg

110 CHAPTER 52. TURBO C++

• File:Nuvola_apps_emacs_vector.svg Source: https://upload.wikimedia.org/wikipedia/commons/6/67/Nuvola_apps_emacs_vector.svg Li-
cense: LGPL Contributors:

• Nuvola_apps_emacs.png Original artist: Nuvola_apps_emacs.png: David Vignoni
• File:Portal-puzzle.svg Source: https://upload.wikimedia.org/wikipedia/en/f/fd/Portal-puzzle.svg License: Public domain Contributors: ? Orig-
inal artist: ?

• File:Question_book-new.svg Source: https://upload.wikimedia.org/wikipedia/en/9/99/Question_book-new.svg License: Cc-by-sa-3.0 Con-
tributors:
Created from scratch in Adobe Illustrator. Based on Image:Question book.png created by User:Equazcion Original artist:
Tkgd2007

• File:Software_spanner.png Source: https://upload.wikimedia.org/wikipedia/commons/8/82/Software_spanner.png License: CC-BY-SA-3.0
Contributors: Transferred from en.wikipedia to Commons by Rockfang. Original artist: CharlesC at English Wikipedia

• File:Symbol_book_class2.svg Source: https://upload.wikimedia.org/wikipedia/commons/8/89/Symbol_book_class2.svg License: CC BY-SA
2.5 Contributors: Mad by Lokal_Profil by combining: Original artist: Lokal_Profil

• File:Text_document_with_red_question_mark.svg Source: https://upload.wikimedia.org/wikipedia/commons/a/a4/Text_document_with_
red_question_mark.svg License: Public domain Contributors: Created by bdesham with Inkscape; based upon Text-x-generic.svg from the Tango
project. Original artist: Benjamin D. Esham (bdesham)

• File:Turbo_CPP_Compiler.jpg Source: https://upload.wikimedia.org/wikipedia/commons/1/16/Turbo_CPP_Compiler.jpg License: CC BY-
SA 3.0 Contributors: Own work Original artist: SAMNAD.S

• File:Vbcc.svg Source: https://upload.wikimedia.org/wikipedia/commons/f/ff/Vbcc.svg License: CC BY 3.0 Contributors: Own work Original
artist: Polluks

• File:Wiki_letter_w.svg Source: https://upload.wikimedia.org/wikipedia/en/6/6c/Wiki_letter_w.svg License: Cc-by-sa-3.0 Contributors: ?
Original artist: ?

• File:Wiki_letter_w_cropped.svg Source: https://upload.wikimedia.org/wikipedia/commons/1/1c/Wiki_letter_w_cropped.svg License: CC-
BY-SA-3.0 Contributors: This file was derived from Wiki letter w.svg: Wiki letter w.svg
Original artist: Derivative work by Thumperward

• File:Wikibooks-logo-en-noslogan.svg Source: https://upload.wikimedia.org/wikipedia/commons/d/df/Wikibooks-logo-en-noslogan.svg Li-
cense: CC BY-SA 3.0 Contributors: Own work Original artist: User:Bastique, User:Ramac et al.

52.6.3 Content license
• Creative Commons Attribution-Share Alike 3.0

https://upload.wikimedia.org/wikipedia/commons/6/67/Nuvola_apps_emacs_vector.svg
//commons.wikimedia.org/wiki/File:Nuvola_apps_emacs.png
//commons.wikimedia.org/wiki/File:Nuvola_apps_emacs.png
https://en.wikipedia.org/wiki/David_Vignoni
https://upload.wikimedia.org/wikipedia/en/f/fd/Portal-puzzle.svg
https://upload.wikimedia.org/wikipedia/en/9/99/Question_book-new.svg
//en.wikipedia.org/wiki/File:Question_book.png
//en.wikipedia.org/wiki/User:Equazcion
//en.wikipedia.org/wiki/User:Tkgd2007
https://upload.wikimedia.org/wikipedia/commons/8/82/Software_spanner.png
//en.wikipedia.org
//commons.wikimedia.org/wiki/User:Rockfang
https://en.wikipedia.org/wiki/User:CharlesC
https://en.wikipedia.org/wiki/
https://upload.wikimedia.org/wikipedia/commons/8/89/Symbol_book_class2.svg
//commons.wikimedia.org/wiki/User:Lokal_Profil
//commons.wikimedia.org/wiki/User:Lokal_Profil
https://upload.wikimedia.org/wikipedia/commons/a/a4/Text_document_with_red_question_mark.svg
https://upload.wikimedia.org/wikipedia/commons/a/a4/Text_document_with_red_question_mark.svg
//commons.wikimedia.org/wiki/User:Bdesham
//commons.wikimedia.org/wiki/File:Text-x-generic.svg
//commons.wikimedia.org/wiki/User:Bdesham
https://upload.wikimedia.org/wikipedia/commons/1/16/Turbo_CPP_Compiler.jpg
//commons.wikimedia.org/w/index.php?title=User:SAMNAD.S&action=edit&redlink=1
https://upload.wikimedia.org/wikipedia/commons/f/ff/Vbcc.svg
//commons.wikimedia.org/wiki/User:Polluks
https://upload.wikimedia.org/wikipedia/en/6/6c/Wiki_letter_w.svg
https://upload.wikimedia.org/wikipedia/commons/1/1c/Wiki_letter_w_cropped.svg
//commons.wikimedia.org/wiki/File:Wiki_letter_w.svg
//commons.wikimedia.org/wiki/User:Thumperward
https://upload.wikimedia.org/wikipedia/commons/d/df/Wikibooks-logo-en-noslogan.svg
//commons.wikimedia.org/wiki/User:Bastique
//commons.wikimedia.org/wiki/User:Ramac
https://creativecommons.org/licenses/by-sa/3.0/

Acorn C/C++
History
Uses
See also
References
External links

Amsterdam Compiler Kit
Target processors
See also
References
External links

Aztec C
History
Current status
Current use
References

BDS C
See also
References
External links

Borland Turbo C
Early history
Version history
Freeware release
See also
References
External links

cc65
Supported API
static
dynamic

External links

ccache
See also
References
External links

CFLAGS
See also
External links

Clang
Background
Design
Performance and GCC compatibility
Status history
See also
References
External links

CodeWarrior
Old versions
History
Origin of the name
References
External links

Comeau C/C++
Design
Standards compliance
Distribution
Current status
References
External links

Deep Blue C
Limitations
Sample program
Performance
References

Digital Mars
References
External links

DJGCC
See also
References
External links

DJGPP
Overview
Compatibility
See also
References
External links

FpgaC
History
External links

GNU Compiler Collection
History
Design
Front ends
GENERIC and GIMPLE
Optimization
Back end
Features

Languages
Architectures
Development
C library
License
Uses
See also
References
Further reading
External links
Official
Other

HP aC++
Products
External links

IBM XL C/C++ Compilers
Products
References
External links

Intel C++ Compiler
Overview
Optimizations
Architectures
Description of packaging
History Since 2003
Flags and manuals
Debugging
Criticism
See also
References
External links

LabWindows/CVI
Release history
See also
References

Lattice C
Reception
References
External links

LCC (compiler)
LCC
Projects incorporating LCC
Quake 3
lcc-win
Pelles C
Mathworks

License
References
Bibliography

Macintosh Programmer’s Workshop
Design
MPW Shell
Look and feel

Other tools
Writing MPW tools
History
Legacy
See also
References
External links

Megamax C
References

MinGW
History
Programming language support
Components
Comparison with Cygwin
MinGW-w64
See also
References
External links

Norcroft C compiler
Supported architectures
Acorn C/C++
INMOS Transputer C Compiler
Cambridge Consultants XAP

References
External links

Open64
The infrastructure
Intermediate representation
Versions
Open64 releases
AMD x86 Open64 releases

Current development projects
See also
References
External links

Oracle Developer Studio
Languages
Supported architectures
Components
Compiler optimizations
OpenMP
Code coverage
GCCFSS
Research platform
History
References
External links

PathScale
Contents of the PathScale EKOPath Compiler Suite
See also
References
Further reading
External links

Pelles C
References
External links

Portable C Compiler
Features
Current version
See also
References
External links

The Portland Group
Company history
Product and market history
Compilers
Programming Tools
PGI Milestones

See also
References
External links

QuickC
Version history
See also
References

ROSE (compiler framework)
The infrastructure
Award
References
External links

Small Device C Compiler
Supported target architectures
See also
References
External links

Small-C
See also
References
External links

Softune
See also
External links
References

TenDRA Compiler
Documentation
See also
References
External links

THINK C
References
External links

Tiny C Compiler
Features
Compiled program performance
Uses
History
Current status
See also
References
External links

vbcc
Optimizations
External links

Visual C++
History
16-bit versions
Strictly 32-bit versions
32-bit and 64-bit versions

Compatibility
ABI
C runtime libraries
C99

Common MSVC version
Controversy
See also
References
External links

IBM VisualAge
Early history
Name brand
Evolution

See also
References
External links

Watcom C/C++
History
Release history

License
Design
Uses
Variants
Compatibility
See also
References
External links

Z88DK
Supported target platforms
See also
External links

Borland C++
Libraries
Add-ons
Version history
Evolution of Borland C++
See also
External links

C++/CX
Extension syntax
Objects

Metadata
Runtime library
Preprocessor-based detection
See also
External links

C++Builder
Technology
History
Borland C++Builder
CodeGear Borland C++Builder
Embarcadero C++Builder

OS X support
Version history
Editions
See also
References
External links

Cfront
References
External links

Shed Skin
Features
Type inference
Modules
See also
References
External links

Turbo C++
History
Legacy software
See also
References
External links
Text and image sources, contributors, and licenses
Text
Images
Content license