Hash :
512523f2
Author :
Thomas de Grivel
Date :
2022-12-25T04:38:17
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 C89 and use them to implement the graph database.
The garbage collector is optional, like in C.
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
C3 is implemented using libc3 a small C89 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. Under development.
Script interpreter. Under development.
test_file_compare
On disk format :
0 1 2 3 4
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF01
0x0000 %{dump: 0x0000000000000100, log: 0x0000000000001000, format: :c3} 0x0042 comments 0x0100 count dump 0x0900 sha256 0x1000 log
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 89 90 91 92 93 94 95 96 97 98 99 100 101 102
# C3
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 C89 and use them to implement the graph database.
The garbage collector is optional, like in C.
```
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 C89 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
- errors (setjmp, longjmp)
- stacktrace
- load
- pattern matching (xor xor)
- `test_file_compare`
- ffi
- types
- funcall
- functions
- fn ->
- & &1
- defmodule
- funcall
- buf_sha256
- buf_popen
# File format
On disk format :
0 1 2 3 4
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF01
0x0000 %{dump: 0x0000000000000100, log: 0x0000000000001000, format: :c3}
0x0042 _comments_
_0x0100_ _count_ _dump_
0x0900 _sha256_
_0x1000_ _log_