Branch :
"The first graph-native programming language"
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.
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.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 four full applications written in KC3 that we know of :
make demomake demo_glmake test_httpd with all the KC3 releases and
documentation.Our next project is to make git.kmx.io in KC3 and for that we have to implement the missing parts in KC3.
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 listSocket
Socket.Facts allows for bi-directional synchronization of an
existing Facts.database() over a TCP socket.Socket.Facts.accept accepts connections one by one.TLS
Facts.database() over a TLS encrypted connection after a
successful HMAC-SHA256 shared secret authentication
challenge/response.TLS.Facts.accept accepts connections one by one.TLS.Facts.acceptor_loop starts a thread and calls accept()
in a loop.TLS.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]HTTPS
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))))