(C-for-all) is an open-source project extending ISO C with modern safety and productivity features, while still ensuring backwards compatibility with C and its programmers. C∀ is designed to have an orthogonal feature-set based closely on the C programming paradigm (non-object-oriented) and these features can be added incrementally to an existing C code-base allowing programmers to learn C∀ on an as-needed basis. In many ways, C∀ is to C as Scala is to Java, providing a vehicle for new typing and control-flow capabilities on top of a highly popular programming language allowing immediate dissemination.
Traditional languages, Fortran 18, Cobol 14, and Ada 12, like C∀, are taking an evolutionary approach, adding modern features and fixing problems within the framework of each language. Newer languages, D, Go, Java, and Rust are taking a revolutionary approach, generating new languages with no backwards compatibility requirement. All of these languages have different syntax and semantics from C, only interoperate indirectly with C, and are not systems languages because of restrictive memory management or garbage collection. As a result, there is a significant learning curve to move to these languages, and C legacy-code must be rewritten. While C++, like C∀, takes an evolutionary approach to extending C, C++'s complex and interdependent features (e.g., overloading, object oriented, templates) mean idiomatic C++ code is difficult to use from C, and C programmers must expend significant effort learning C++. Hence, rewriting and retraining costs for these languages (even C++) can be prohibitive for companies with a large C software-base. C∀ circumvents these problems with its backward compatibility requirement and orthogonal feature-set.
The result of this project is a language that is largely backwards compatible with C, but fixes many of the well known C problems while adding modern language-features. To achieve these goals requires a significant engineering exercise thinking inside the C box. Without extensions to C, it is unable to cope with the needs of modern programming problems and programmers, putting it in jeopardy. Considering the large body of existing C code and programmers, there is significant impetus to ensure C is transformed into a modern programming-language.