Edit

kc3-lang/kc3/README.md

Branch :

  • README.md
  • # 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_