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 macros, pattern
matching, and a semantic object system. The idea is to plug macros and
pattern matching into C99 and use them to implement the graph database.
There is no garbage collector.
```
defmodule C3 do
def compile (c3, opts) when is_string(c3) do
c3
|> C3.parse(opts)
|> C3.compile()
end
def eval (c3, env, opts) when is_string(c3) do
c3
|> C3.parse(opts)
|> C3.eval(env)
end
defguard is_c3 (x) do
is_tuple(x)
end
def compile (c3, opts) when is_c3(c3) do
c3
|> C3.to_assembly(opts)
|> Assembly.to_elf(opts)
end
def eval (c3, env) when is_c3(c3) do
[...]
end
end
```
## 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. Under development.
### c3s
Script interpreter. Under development.
## TODO
- libc3
- ci
- c function call
- infix operators
- errors (setjmp, longjmp)
- stacktrace
- load
- `test_file_compare`
- ffi
- types
- funcall
- functions
- fn ->
- & &1
- defmodule
- funcall
- buf_sha256
- buf_popen