[51b7345] | 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. |
---|
[51b7345] | 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. |
---|
[51b7345] | 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. |
---|
[51b7345] | 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++. |
---|
[51b7345] | 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. |
---|
[51b7345] | 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: |
---|
[51b7345] | 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. |
---|
[51b7345] | 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: |
---|
[51b7345] | 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. |
---|
[51b7345] | 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" {} |
---|
[51b7345] | 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. |
---|
[51b7345] | 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. |
---|
[51b7345] | 90 | |
---|
[6244dfb] | 91 | We have fixed most of the problems that we are aware of. There are some |
---|
| 92 | exceptions: |
---|
[51b7345] | 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) |
---|
[51b7345] | 103 | |
---|
[6244dfb] | 104 | - abstract types introduced using the keyword 'type' are not implemented |
---|
| 105 | (although 'type' can be used to introduce type parameters) |
---|
[51b7345] | 106 | |
---|
[6244dfb] | 107 | - the implicit coercion of structure types to the type of their first member is |
---|
| 108 | not implemented |
---|
[51b7345] | 109 | |
---|
| 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 | |
---|
| 117 | http://plg.uwaterloo.ca/~cforall |
---|