Edit

kc3-lang/kc3/README.md

Branch :

  • README.md
  • # 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
       - atomic operations
       - DONE triple serial id
       - with ignore variables
       - boolean operators
       - arrays
       - defmodule
       - structs
       - errors (setjmp, longjmp)
         - stacktrace
           - ffi ?
             - libdwarf
       - control structures
       - functions
         - return
         - def
         - funcall
         - & &1
         - DONE fn () {}
      - macros
      - livebook
        - gaussian
      - buf_sha256
      - buf_popen
      - DONE ci
      - DONE c function call
      - DONE infix operators
      - DONE load
      - DONE `test_file_compare`
      - DONE ffi
        - DONE types
        - DONE funcall