Branch :
# 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