• README.md

  • KC3 v0.1.14

    KC3 is a programming language with meta-programmation and a graph database embedded into the language. It aims to be the language for semantic programming, and programming the semantic web.

    This is a development branch, see KC3 v0.1.13 for a stable release.

    KC3 is currently 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, a graph database and metaprogramming into C99 with an extremely small set of dependencies.

    Supported operating systems (additional dependencies) :

    • BSD
    • Linux (libbsd, libmd)
    • MacOS X (libmd)
    • Windows (MSys2)

    Supported architectures :

    • aarch64 (arm64, Apple M1, Apple M2)
    • amd64
    • i386
    • sparc64

    Discord invite

    Join us on kmx.io Discord server !

    Guides

    Installation

    Follow the KC3 installation guide.

    Tests

    Follow the KC3 testing guide

    Usage

    Follow the KC3 usage guide

    Structure

    Follow the KC3 structure guide

    Tutorial and examples

    Follow the KC3 tutorial and examples guide .

    TODO

    • [DONE] facts database in KC3
      • [DONE] new database (Ptr)
      • [DONE] add_tags
      • [DONE] remove_tags
      • [DONE] with_tags
      • [DONE] with
    • fx v0.2.0
      • [DONE] file explorer
      • [DONE] preview files
        • [DONE] text
        • [DONE] image
        • [DONE] video
        • [DONE] audio
        • [DONE] binary (hexdump -C)
      • tags
        • create
          • POST “/tag/:tag/*path”
        • delete
          • DELETE “/tag/:tag/*path”
        • recursive
      • properties
        • [DONE] create
          • [DONE] POST “/property/:property/:value/*path”
        • [DONE] delete
          • [DONE] DELETE “/property/:property/:value/*path
        • recursive
    • HTTPd v0.2.0
      • dynamic pages (MVC)
        • [DONE] controllers
          • [DONE] ./app/controllers/
        • [DONE] templates
          • [DONE] ./app/templates/
        • dynamic router
          • [DONE] Str.starts_with?(url, route.path)
          • HTTPd.Router.get(“/user/:id/articles/*slug/edit”, UserArticlesController.show)
        • [DONE] views
          • [DONE] ./app/views/
    • libkc3
      • [DONE] evaluation order for && and ||
      • operators dispatch
        • list of matching operators (facts_with)
      • base-specific big floats
      • macro cast : (Macro) fn (x) { x }
      • pretty printer
        • [DONE] indent
        • 80 columns (\n)
      • tags
        • walker
        • height function (TAG_VOID: 1, TAG_TUPLE: (1+ (max (height tuple->tags))))
        • has_ident
        • collect_idents
      • facts
        • negative facts : 4 + 2n = not 3 + 2n
        • with ignore variables
      • math
        • arbitrary precision floating point numbers (decimals)
      • map
        • [DONE] access
        • [DONE] get (get key value)
        • put (return a new map)
      • struct
        • [DONE] access
        • [DONE] get
        • put
      • enums
      • unions
      • errors (setjmp, longjmp)
        • stacktrace
          • ffi ?
            • libdwarf
      • control structures
        • when
        • unless
        • switch/case/cond
      • unwind protect
      • functions
        • return
      • livebook
        • gaussian
      • buf_sha256
      • buf_popen
      • tests