Hash :
4d267e43
Author :
Thomas de Grivel
Date :
2023-06-09T11:08:13
C3 is a programming language project, inspired by C, Elixir and Common Lisp. It could be described as C with Elixir modules, pattern matching, and a semantic object system. The idea is to plug modules, closures, pattern matching, cl-facts and metaprogramming into C99 with a very small set of dependencies.
C3 is implemented using libc3 a small C99 library implementing the core of the language.
The library includes a parser and an interpreter for C3 code in C structures.
The parser is recursive descent for now.
The AST is represented as C3 data structures and can be meta-programmed in C.
Under development.
Interactive shell.
Script interpreter.
(-S8_MIN - S8_MAX) == 1
UW_MAX == ((1 << 8 * sizeof(uw)) - 1)
test_file_compare
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
# C3 v0.1
C3 is a programming language project, inspired by C, Elixir and
Common Lisp. It could be described as C with Elixir modules,
pattern matching, and a semantic object system. The idea is to plug
modules, closures, pattern matching, cl-facts and metaprogramming
into C99 with a very small set of dependencies.
## Structure
### libc3
C3 is implemented using libc3 a small C99 library implementing the core
of the language.
The library includes a parser and an interpreter for C3 code in C
structures.
#### Parser
The parser is recursive descent for now.
#### AST
The AST is represented as C3 data structures and can be meta-programmed
in C.
#### Interpreter
Under development.
### ic3
Interactive shell.
### c3s
Script interpreter.
## TODO
- libc3
- facts
- atomic operations
- DONE triple serial id
- negative facts : 4 + 2n = not 3 + 2n
- with ignore variables
- math
- floating point numbers
- boolean operators
- comparison operators
- arrays
- lists
- defmodule
- structs
- errors (setjmp, longjmp)
- stacktrace
- ffi ?
- libdwarf
- control structures
- functions
- return
- def
- funcall
- & &1
- DONE fn () {}
- macros
- livebook
- gaussian
- buf_sha256
- buf_popen
- tests
- sizeof(sw) == sizeof(void *)
- `(-S8_MIN - S8_MAX) == 1`
- `UW_MAX == ((1 << 8 * sizeof(uw)) - 1)`
- DONE group tests by test case
- DONE ci
- DONE c function call
- DONE infix operators
- DONE load
- DONE `test_file_compare`
- DONE ffi
- DONE types
- DONE funcall