mirror of
https://github.com/c3lang/c3c.git
synced 2026-02-27 12:01:16 +00:00
3.6 KiB
3.6 KiB
C3 Language
C3 is a C-like language trying to be "an incremental improvement over C" rather than a whole new language. C3 owes a lot to the ideas of the C2 language: to iterate on top of C without trying to be a whole new language.
C3 tries to be an alternative in the the C/C++ niche: fast and close to the metal.
Design Principles
- Procedural "get things done"-type of language.
- Try to stay close to C - only change where truly needed.
- C ABI compatibility and excellent C integration.
- Learning C3 should be easy for a C programmer.
- Data is inert.
- Avoid "big ideas" & the "more is better" fallacy.
- Introduce some higher level conveniences where the value is great.
In what ways do C3 differ from C?
- No mandatory header files
- New semantic macro system
- Generic modules
- Module based
- Subarrays (slices) and vararrays built in
- Compile time reflection
- Enhanced compile time execution
- "Result" based zero overhead error handling
- Defer
- Value methods
- Associated enum data
- Built in strings
- No preprocessor
- Undefined behaviour trapped on debug by default
- Optional pre and post conditions
Current status
It's possible to try out the current C3 compiler in the browser: https://ide.judge0.com/?1EFo – this is courtesy of the developer of Judge0.
Design work is still being done in the design draft here: https://c3lang.github.io/c3docs/. If you have suggestions, send a mail to christoffer@aegik.com, file an issue or discuss C3 on the r/ProgrammingLanguages Discord server: https://discord.gg/cfu4wdk
Todo / done
- For/while/do
if/ternary- Structs
- Union
- Enums
- Value methods
- Compound literals
- Designated initalizers
- Slicing syntax
- Arrays and subarrays
- Modules
$unreachable- Compile time assert with
$assert - Compiler guiding
assert - C code calling by declaring methods
extern - Compile time variables
- Basic macros
- 4cc, 8cc, 2cc
- Enum type inference in switch/assignment
- Integer type inference
- Error type
- Failable error handling
tryfor conditional executioncatchfor error handling- Implicit unwrap after
catch sizeoftypeof- 2s complement wrapping operators
- Labelled break / continue
nextstatement- Expression blocks
- Do-without-while
- Foreach statement
- All attributes
- Associative array literals
- CT type constants
- Reflection methods
- Anonymous structs
- Distinct types
- LTO/ThinLTO setup
- Built-in linking
global/sharedfor globals- Complex macros
- CT only macros evaluating to constants
- Escape macros
- Implicit capturing macros
- Trailing body macros
- Subarray initializers
- slice initializers e.g.
{ [1..2] = 2 } - Bitstructs
asmsection$switch$for- Pre-post conditions
- Stdlib inclusion
- Generic modules
- String functions
- Vararrays e.g.
int[*] - Compile time incremental arrays
- Complete C ABI conformance
- Generic functions
What can you help with?
- If you wish to contribute with ideas, please file issues on the c3docs: https://github.com/c3lang/c3docs instead of the compiler.
- Discuss the language on discord to help iron out syntax.
- Stdlib work will soon start, do you want to help out building the C3 std lib?
- Do you want do do real compiler work? Everyone is welcome to contribute.