- Timestamp:
- May 27, 2015, 5:03:58 PM (10 years ago)
- Branches:
- ADT, aaron-thesis, arm-eh, ast-experimental, cleanup-dtors, ctor, deferred_resn, demangler, enum, forall-pointer-decay, gc_noraii, jacob/cs343-translation, jenkins-sandbox, master, memory, new-ast, new-ast-unique-expr, new-env, no_list, persistent-indexer, pthread-emulation, qualifiedEnum, resolv-new, string, with_gc
- Children:
- 52ac3b4
- Parents:
- 6aa5ec0f
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
README
r6aa5ec0f r6244dfb 2 2 ====================================== 3 3 4 This is a PRE-RELEASE version of cfa-cc. It exists solely for the 5 purpose of private experimentation and scholarly research. The authors 6 disclaim all responsibility for the consequences of any malfunction of 7 the software, including the malfunction of any programs compiled using 8 the software. 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. 9 8 10 9 What is Cforall? 11 10 ---------------- 12 Cforall is a language design extending ISO C. The purpose of the 13 project is to engineer modern language features into C in an 14 evolutionary rather than revolutionary way. Java is an example of the 15 revolutionary approach of modernizing C/C++, resulting in a new 16 language rather than an extension of its descendents. C++, Fortran 95 17 and Cobol 9X are examples of the evolutionary approach where modern 18 language features are added and problems fixed within the framework of 19 an existing language. 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. 20 18 21 The goal of this project is to produce a largely backwards compatible 22 version of C containing many modern language features and fixing some 23 of the well known C problems. Without continued development of the 24 language, C will be unable to cope with the needs of modern programming 25 problems and programmers; as a result, it will fade into disuse. 26 Considering the large body of existing C code and programmers, there is 27 a significant impetus to ensure C is transformed into a modern 28 programming language. 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. 29 26 30 27 What is cfa-cc? 31 28 --------------- 32 cfa-cc is a collection of programs centred around a translator that 33 takes Cforall code as input and outputs corresponding C code. This 34 is complemented by a compiler driver in the style of "gcc", which 35 handles preprocessing, compiling, assembling, and linking and invokes 36 the translator at appropriatemoments.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. 37 34 38 35 What is required in order to use cfa-cc? 39 36 ---------------------------------------- 40 Building cfa-cc requires GNU Make and gcc/g++ 3. cfa-cc is written in 41 C++. 37 Building cfa-cc requires GNU Make and gcc/g++ 4. cfa-cc is written in C++. 42 38 43 The compiler driver uses an installed version of gcc to handle all 44 aspects of the compilation process except for the Cforall->C translation. 45 Currently, only gcc 3.2is supported.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. 46 42 47 43 How is cfa-cc used? 48 44 ------------------- 49 The compiler driver "cfa" accepts all of the arguments of gcc, and is 50 used inthe same way. For example:45 The compiler driver "cfa" accepts all of the arguments of gcc, and is used in 46 the same way. For example: 51 47 52 48 cfa -c test.c 53 49 cfa test.o 54 50 55 Cforall source files must end with '.c' in order to be compiled by the 56 compiler driver. In addition, the flag "-CFA" causes cfa to invoke the 57 preprocessor and translator and send the translator output to standard 58 output. 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. 59 54 60 In cases where the compiler driver is not useful (i.e., where gcc 3.2 61 is not available), it is still possible to invoke the translator 62 directly. The translator is installed by default as 63 /usr/local/lib/cfa-cpp. A typical invocation is: 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: 64 57 65 58 /usr/local/lib/cfa-cpp -cp infile outfile 66 59 67 If outfile is omitted, output goes to standard output; if infile is 68 also omitted, input comes from standard input. Options to the 69 translator other than "-cp" will not produce valid C code and are only 70 useful for debugging thetranslator.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. 71 64 72 65 How can C code be used with cfa-cc? 73 66 ----------------------------------- 74 cfa-cc should be able to compile most ANSI C programs. It is also 75 possible to link against C libraries in most cases. Since Cforall 76 supports overloading, however, names used in Cforall code are 77 mangled in the output C code. This will cause linker failures when 78 the names refer to functions and objects in code compiled with 79 a standard C compiler. For this reason, it is necessary to enclose 80 the declarations of these functions and objects in extern "C" {} 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" {} 81 73 blocks. For example: 82 74 … … 87 79 88 80 The extern "C" turns off name mangling for functions and objects declared 89 within the block. As a result, it is not possible to overload their 90 names. 91 92 It is our intention to have a transparent solution to this problem 93 in place for our first official release. 81 within the block. As a result, it is not possible to overload their names. 94 82 95 83 What's wrong with cfa-cc? 96 84 ------------------------- 97 The authors consider this software to be in an unstable state. It is98 quite likely that there are many reasonable programs that will fail99 to compile. We encourage users to report their experiences to100 cforall@plg.uwaterloo.ca, but we make no promises regarding support.101 85 102 We have fixed most of the problems that we are aware of. There are 103 some exceptions: 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. 104 90 105 - initializers are poorly implemented; in particular, 106 file-scope initializers may result in the generation of invalid 107 C code 91 We have fixed most of the problems that we are aware of. There are some 92 exceptions: 108 93 109 - the ISO C99 designated initialization syntax '[n] = m' or 110 '.n = m' is not supported; use a colon in place of the equal sign 111 112 - some legitimate programs will produce warnings from the C 113 compiler; these are harmless (in particular, the creation of 114 libcfa.a in the build process should cause four warnings from 115 gcc) 94 - initializers are poorly implemented; in particular, file-scope initializers 95 may result in the generation of invalid C code 116 96 117 - abstract types introduced using the keyword 'type' are not 118 implemented (although 'type' can be used to introduce type 119 parameters) 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 120 99 121 - the implicit coercion of structure types to the type of their 122 first member is not implemented 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) 103 104 - abstract types introduced using the keyword 'type' are not implemented 105 (although 'type' can be used to introduce type parameters) 106 107 - the implicit coercion of structure types to the type of their first member is 108 not implemented 123 109 124 110 Who is responsible for cfa-cc?
Note: See TracChangeset
for help on using the changeset viewer.