| [51b73452] | 1 | cfa-cc: The Cforall->C Compiler System | 
|---|
|  | 2 | ====================================== | 
|---|
|  | 3 |  | 
|---|
| [6244dfb] | 4 | This is a PRE-RELEASE version of cfa-cc.  It exists solely for the purpose of | 
|---|
|  | 5 | private experimentation and scholarly research.  The authors disclaim all | 
|---|
|  | 6 | responsibility for the consequences of any malfunction of the software, | 
|---|
|  | 7 | including the malfunction of any programs compiled using the software. | 
|---|
| [51b73452] | 8 |  | 
|---|
|  | 9 | What is Cforall? | 
|---|
|  | 10 | ---------------- | 
|---|
| [6244dfb] | 11 | Cforall is a language design extending ISO C. The purpose of the project is to | 
|---|
|  | 12 | engineer modern language features into C in an evolutionary rather than | 
|---|
|  | 13 | revolutionary way. Java is an example of the revolutionary approach of | 
|---|
|  | 14 | modernizing C/C++, resulting in a new language rather than an extension of its | 
|---|
|  | 15 | descendents. C++, Fortran 95 and Cobol 9X are examples of the evolutionary | 
|---|
|  | 16 | approach where modern language features are added and problems fixed within the | 
|---|
|  | 17 | framework of an existing language. | 
|---|
|  | 18 |  | 
|---|
|  | 19 | The goal of this project is to produce a largely backwards compatible version | 
|---|
|  | 20 | of C containing many modern language features and fixing some of the well known | 
|---|
|  | 21 | C problems. Without continued development of the language, C will be unable to | 
|---|
|  | 22 | cope with the needs of modern programming problems and programmers; as a | 
|---|
|  | 23 | result, it will fade into disuse.  Considering the large body of existing C | 
|---|
|  | 24 | code and programmers, there is a significant impetus to ensure C is transformed | 
|---|
|  | 25 | into a modern programming language. | 
|---|
| [51b73452] | 26 |  | 
|---|
|  | 27 | What is cfa-cc? | 
|---|
|  | 28 | --------------- | 
|---|
| [6244dfb] | 29 | cfa-cc is a collection of programs centred around a translator that takes | 
|---|
|  | 30 | Cforall code as input and outputs corresponding C code.  This is complemented | 
|---|
|  | 31 | by a compiler driver in the style of "gcc", which handles preprocessing, | 
|---|
|  | 32 | compiling, assembling, and linking and invokes the translator at appropriate | 
|---|
|  | 33 | moments. | 
|---|
| [51b73452] | 34 |  | 
|---|
|  | 35 | What is required in order to use cfa-cc? | 
|---|
|  | 36 | ---------------------------------------- | 
|---|
| [6244dfb] | 37 | Building cfa-cc requires GNU Make and gcc/g++ 4.  cfa-cc is written in C++. | 
|---|
| [51b73452] | 38 |  | 
|---|
| [6244dfb] | 39 | The compiler driver uses an installed version of gcc to handle all aspects of | 
|---|
|  | 40 | the compilation process except for the Cforall->C translation.  Currently, only | 
|---|
|  | 41 | gcc 4.x is supported. | 
|---|
| [51b73452] | 42 |  | 
|---|
|  | 43 | How is cfa-cc used? | 
|---|
|  | 44 | ------------------- | 
|---|
| [6244dfb] | 45 | The compiler driver "cfa" accepts all of the arguments of gcc, and is used in | 
|---|
|  | 46 | the same way.  For example: | 
|---|
| [51b73452] | 47 |  | 
|---|
|  | 48 | cfa -c test.c | 
|---|
|  | 49 | cfa test.o | 
|---|
|  | 50 |  | 
|---|
| [6244dfb] | 51 | Cforall source files must end with '.c' in order to be compiled by the compiler | 
|---|
|  | 52 | driver.  In addition, the flag "-CFA" causes cfa to invoke the preprocessor and | 
|---|
|  | 53 | translator and send the translator output to standard output. | 
|---|
| [51b73452] | 54 |  | 
|---|
| [6244dfb] | 55 | It is possible to invoke the translator directly.  The translator is installed | 
|---|
|  | 56 | by default as /usr/local/lib/cfa-cpp.  A typical invocation is: | 
|---|
| [51b73452] | 57 |  | 
|---|
|  | 58 | /usr/local/lib/cfa-cpp -cp infile outfile | 
|---|
|  | 59 |  | 
|---|
| [6244dfb] | 60 | If outfile is omitted, output goes to standard output; if infile is also | 
|---|
|  | 61 | omitted, input comes from standard input.  Options to the translator other than | 
|---|
|  | 62 | "-cp" will not produce valid C code and are only useful for debugging the | 
|---|
|  | 63 | translator. | 
|---|
| [51b73452] | 64 |  | 
|---|
|  | 65 | How can C code be used with cfa-cc? | 
|---|
|  | 66 | ----------------------------------- | 
|---|
| [6244dfb] | 67 | cfa-cc should be able to compile most ANSI C programs.  It is also possible to | 
|---|
|  | 68 | link against C libraries in most cases.  Since Cforall supports overloading, | 
|---|
|  | 69 | however, names used in Cforall code are mangled in the output C code.  This | 
|---|
|  | 70 | caused linker failures when the names refer to functions and objects in code | 
|---|
|  | 71 | compiled with a standard C compiler.  For this reason, it is necessary to | 
|---|
|  | 72 | enclose the declarations of these functions and objects in extern "C" {} | 
|---|
| [51b73452] | 73 | blocks.  For example: | 
|---|
|  | 74 |  | 
|---|
|  | 75 | extern "C" { | 
|---|
|  | 76 | #include <stdio.h> | 
|---|
|  | 77 | #include <stdlib.h> | 
|---|
|  | 78 | } | 
|---|
|  | 79 |  | 
|---|
|  | 80 | The extern "C" turns off name mangling for functions and objects declared | 
|---|
| [6244dfb] | 81 | within the block.  As a result, it is not possible to overload their names. | 
|---|
| [51b73452] | 82 |  | 
|---|
|  | 83 | What's wrong with cfa-cc? | 
|---|
|  | 84 | ------------------------- | 
|---|
|  | 85 |  | 
|---|
| [6244dfb] | 86 | The authors consider this software to be in an unstable state.  It is quite | 
|---|
|  | 87 | likely that there are many reasonable programs that will fail to compile.  We | 
|---|
|  | 88 | encourage users to report their experiences to cforall@plg.uwaterloo.ca, but we | 
|---|
|  | 89 | make no promises regarding support. | 
|---|
| [51b73452] | 90 |  | 
|---|
| [6244dfb] | 91 | We have fixed most of the problems that we are aware of.  There are some | 
|---|
|  | 92 | exceptions: | 
|---|
| [51b73452] | 93 |  | 
|---|
| [6244dfb] | 94 | - initializers are poorly implemented; in particular, file-scope initializers | 
|---|
|  | 95 | may result in the generation of invalid C code | 
|---|
|  | 96 |  | 
|---|
|  | 97 | - the ISO C99 designated initialization syntax '[n] = m' or '.n = m' is not | 
|---|
|  | 98 | supported; use a colon in place of the equal sign | 
|---|
|  | 99 |  | 
|---|
|  | 100 | - some legitimate programs will produce warnings from the C compiler; these are | 
|---|
|  | 101 | harmless (in particular, the creation of libcfa.a in the build process should | 
|---|
|  | 102 | cause four warnings from gcc) | 
|---|
| [51b73452] | 103 |  | 
|---|
| [6244dfb] | 104 | - abstract types introduced using the keyword 'type' are not implemented | 
|---|
|  | 105 | (although 'type' can be used to introduce type parameters) | 
|---|
| [51b73452] | 106 |  | 
|---|
| [6244dfb] | 107 | - the implicit coercion of structure types to the type of their first member is | 
|---|
|  | 108 | not implemented | 
|---|
| [da60c631] | 109 |  | 
|---|
| [51b73452] | 110 | Who is responsible for cfa-cc? | 
|---|
|  | 111 | ------------------------------ | 
|---|
|  | 112 | cfa-cc was written by Peter Buhr, Richard Bilson, and Rodolfo Esteves. | 
|---|
|  | 113 | Questions and comments can be sent to cforall@plg.uwaterloo.ca. | 
|---|
|  | 114 |  | 
|---|
|  | 115 | The Cforall project maintains a web page: | 
|---|
|  | 116 |  | 
|---|
| [da60c631] | 117 | https://cforall.uwaterloo.ca | 
|---|