The C++ Automation Language
2023
Sean Baxter
Download here
Follow me on Twitter @seanbax for compiler updates.
New Circle is a major transformation of the Circle compiler, intended as a response to recent successor language announcements. It focuses on a novel fine-grained versioning mechanism that allows the compiler to fix defects and make the language safer and more productive while maintaining 100% compatibility with existing code assets.
New Circle is the richest C++ compiler yet. Try out:
- choice types,
- pattern matching,
- interfaces and impls,
- language type erasure,
- as-expressions for safer conversions,
- a modern declaration syntax with
fn
andvar
keywords to make clearer, less ambiguous declarations, - a simpler syntax for binary expressions, greatly reducing the likelihood of bugs caused by confusing operator precedences,
- a
forward
keyword to take the complexity and bugginess out of forwarding references, - safer initializer lists, which address ambiguities when calling std::initializer_list constructors and non-std::initializer_list constructors,
- lifting lambdas to pass overload sets as function arguments,
- nine kinds of template parameters to make templates far more comprehensive,
- reflection traits to access packs of information about class types, enum types, function types, class specializations, and so on,
- pack traits for pack-transforming algorithms, like sort, unique, count, erase, difference, intersection, and so on.
New Circle describes a path for evolving C++ to meet the needs of institutional users. The versioning mechanism that accommodated the development of the features above will also accommodate research into critically important areas like memory safety. Rather than insisting on a one-size-fit's-all approach to language development, project leads can opt into collections of features that best target their projects' needs.
Old docs. May be out of date. Refer to New Circle for fresh information.
- Circle implementations of Standard Library classes
- CUDA
- Pattern Matching
- Circle Imperative Arguments
- Member traits
- Circle conditionals
- Universal member access
- Circle reflection and typed enums
- Circle C++ for shaders
- List comprehensions, slices, ranges, for-expressions, functional folds and expansion expressions
- File @embed and a compile-time design dilemma
- The Circle format library
- Compile-time regular expressions