So I’m looking at the Circle Compiler which allows you to change how the language works. Would something similar be possible in Clang and how much effort/time would be required do so?
Clang does accept conforming extensions, our policy for them is here: Clang - Get Involved In terms of time and effort, that depends heavily on what kind of extension you’re interested in.
That said, we don’t encourage experimenting with language extensions in Clang itself (a fork is often a more appropriate place for experiments or working on in-progress standards proposals).
Circle does a lot of things, so you should clarify what specific features you are interested in.
Note that I’m actively trying to standardize in C++ a small subset of the features available in Circle, namely pack indexing, universal template parameters and so forth. People have also been exploring member packs, which is something that I’m hoping to present to the C++ committee in the coming months. These are features that I prototype in clang so I can speak to the feasibility of it but I would be very uncomfortable trying to upstream them without C++ committee approval as that would eat on the design space and lead to future incompatibilities.
I guess I want to make my own features, but don’t want to make a whole compiler. I want to incorporate the semantical and syntactic extensions I want into an existing compiler, like Clang. I want to reuse the existing C++ libraries, but in my own code I want to program in the way best suited to the problem. The only restrictions I want are what the computer can do, what’s performant (data-oriented design, etc), readable, maintainable, etc. I respect the committee, but it’s hard to create one-size-fit-all feature sets.
I guess I want to be able to recreate anything Circle does and more in Clang.
I’m looking into what language extensions are, but so far I haven’t found any direct guide to creating them. I assume I’m going to be using one of LibClang, Clang Plugins or LibTooling to make extensions.
I only started learning about Clang stuff yesterday, so I don’t know much about it. This upcoming book Clang Compiler Frontend: Understand internals of a top-rated C/C++ compiler frontend and create your own tools looks promising. It comes out in 2 months, so if I can’t figure it out with the online documentation, I’ll see if I can figure it out with the book.
A language extension is simply a non-standard feature that clang supports for C++. If you want to add language features to clang and they’re not part of an existing C++ standard, it would be an extension. If that feature is later added to the ISO C++ standard, it would no longer be an extension, it would just be a C++ language feature.