Branch :
"The first graph-native programming language."
KC3 is a programming language with meta-programmation and a graph database embedded into the language. The graph database allows for all definitions in the language and can define special operators in KC3 or in C. With a graph database at its core it aims to be the language for semantic programming, and programming the semantic web.
You can easily convert each KC3 function to a C function. KC3 is both a language and a runtime.
This is a development branch, for the latest release see KC3 v0.1.16.
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 C11 with an extremely small set of dependencies.
Components :
libkc3 library is a full KC3 parser and interpreter.ikc3 is the interactive interpreter (verbose).kc3s is the script interpreter (same as ikc3 but terse).lib/kc3/0.1
using the make lib_links command.kc3_httpd.window/gtk4/.All binaries can be compiled for four targets :
assert is disabled.assert is enabledSupported operating systems (additional dependencies) :
Supported architectures :
To install and test KC3 for yourself, you can follow the KC3 Installation Guide.
There are now five full applications written in KC3 that we know of :
make demomake demo_glmake test_httpd with all the KC3 releases and
documentation.libkc3
pthread_mutex and pthread_rwlock
would cause undefined behaviour as per POSIX, this fixes pthread on
macOS.kc3c files, like Python does. Gives 5x faster loading times
for all .kc3 files. env_load automatically handles this.ht_iterator_next where the iterator would not
go through the first collision listFacts
Facts.database() over a TLS encrypted connection
after a successful HMAC-SHA256 shared secret authentication
challenge/response. Master/replica negociation is based on a
priority negociation : each node sends its priority and the
lower priority is the master while the others are replicas.Facts.accept accepts connections one by one.Facts.acceptor_loop starts a thread that calls accept()
in a loop.Facts.acceptor_loop_join() stops the acceptor loop cleanly.JSON
true or false → Bool{"key", "value"} → Map %{"key" => "value"}[1, 2, 3] → List [1, 2, 3]HTTPd
unveil(2) in
config/unveil.kc3HTTPS
HTTPS.Client with libtls and automatic or manual connectionJoin us on kmx.io Discord server !
Follow the KC3 guides to discover how to use KC3 for your own projects.
(Macro) fn (x) { x }\n)(TAG_VOID: 1, TAG_TUPLE: (1+ (max (height tuple->tags))))