Coherence 1.5 #12
NOTE: This has now been merged into master. So you should switch to master branch for getting the latest Ren/C.
This is a set of commits which accomplish a goal that has significant parallel to "Coherence One" but with much grander scope. It supersedes the Coherence One PR, which is now closed.
Instead of building rebolsource (which is nearly identical to rebol/rebol on GitHub), Coherence 1.5 sought to both un-fork the Saphirion/Atronix branch Core portions... then build it under strict ANSI C89, C99, C11... also with the option to build under strict ISO C++98, C++11, and C++14. Besides building under these ranges of languages, it should do so under both GCC and Clang with zero warnings (with warnings turned up high as-is-reasonable).
As of 16-Jul-2015, Coherence 1.5 has been verified as reaching this goal for:
As well as:
Here are the warnings enabled (manually in the makefile, at the moment):
These warnings are disabled (manually in the makefile, at the moment):
Unlike Coherence One's "monolithic patch", Coherence 1.5 consists of more than 80 individual commits. These have been rebased and sorted to present a clear narrative of related changes and their motivations; with a 50 character title and 72 character line limits on longer descriptions. This is in order to document the changes so that they could serve as a guide for Atronix to update the R3/GUI code in a similar fashion...which will ideally be switched to use Ren/C as a library.
(Note: It is not necessary for the R3/GUI to use the same methodology or level of strictness in order to use Ren/C. I'd say it's probably a good practice to follow at least some of it, though.)
Wanting Atronix to be within a stone's throw of being able to use Ren/C was one of the motivators for starting from an un-forked core of their branch. It may contain more currently than the core will ultimately need. But if a fully functioning system with users is the goal, it will be easier to work backward to a tidy core from the Atronix branch than it would be to work forward from the Rebolsource branch.
The other motivator is that the Atronix build has features people require (or might just want), most significant being:
Along with its ambitious scope, Coherence 1.5 is the outgrowth of another cycle of iteration on the reorganization and rethinking of Rebol. The goal is to meet up with modern C yet build even more standardly as C89 (with static analysis enabled through modern C++). Some of the more heavy-handed "search-and-replace" choices that needed greater subtlety were rethought in Coherence 1.5, with casting reviewed in particular. See the article Casts for the Masses (in C).
This PR was given heavy thought on how to make things simpler, clearer, and better-checked. Across the board the code is more readable than what came in, and has several notable simplifications. Each commit has notes you can click the
Here are some perhaps-interesting-in-general highlights:
So there's more and better comments, solid checks, and hopefully a good baseline for allowing contributors to modify with confidence... getting error feedback when they do the wrong thing instead of a silent "I dunno if that's the right routine to use here or not".
Comments are welcome, assistance even moreso.