2025-12-25 03:25:54
Displayed 3096 times
Released KC3 v0.1.16 🎄
KC3 is a programming language project developed by kmx.io.
Taking its roots in C, Elixir and Common Lisp, it could be described as C with Elixir modules,
pattern matching, and a semantic object system backed by a graph database.
The idea is to plug modules, closures, pattern matching, a graph database and
metaprogramming into C11 with a small set of dependencies.
See the release on
See the KC3 guides for information about installation.
New in this release
libkc3
- dlopen inside lib/ only
- Generic typed pointers :
(U8*) 0x0
- make
kc3_require and env_eval_do_block more careful about error
handling
- MP-safe integer counters :
defcounter name = value
- environment hash table for name resolution
- mp-safe
Counter.decrease(Ident, Tag) as a cfn_macro, Tag must be a
positive integer (non-zero)
Counter.get(Ident) as a cfn_macro
Counter.increase(Ident, Tag) as a cfn_macro, Tag must be a
positive integer (non-zero)
Counter module included at init
- unveil supported on OpenBSD
- pledge supported on OpenBSD
- rename f128 to f80: long double is actually 80 bits precision on
x86 and amd64
- followed System-V ABI documentation for struct alignment and
padding, works on amd64, arm64, i386 and sparc64 (marshalling and
unmarshalling is portable across all these architectures)
libtls
- basic TLS client and server in test/tls/tls.kc3
ikc3
- Remote procedure call
- client : ikc3 --client HOST PORT
- server : ikc3 --server HOST PORT
- accepts only one connection and exits
- works with netcat (no prompt)
- TLS with libtls : ikc3 --tls (--client|--server) HOST PORT
- "ikc3: TLS server: listening on HOST PORT"
- "ikc3: TLS server: client connected: HOST PORT TLS-1.3"
- "ikc3: TLS client: connected to HOST PORT TLS-1.3"
- ship ikc3 as a standalone file that links to the right lib directory
on MacOS, this way you can open ikc3 using Finder in a Terminal.app
and the dynamic libraries will still be found (require Socket loads
the socket library for instance, through dlopen)
build system
- use
runj to parallelize configure and update_sources
- use
sort to have a portable sort algorithm that gives consistent
results across all operating systems.
test infrastructure
- modular test infrastructure with test/test.subr and
test/test_runner
- use
runj to call test_runner in parallel
- removed
sleep 2 that slowed each ikc3 test
- all test suites run in under 30 seconds now compared to
more than 5 minutes before
HTTPd
- limit acceptor loop using defcounter
- achieved securelevel(2) after load_app() by moving all
def* into proper modules and using defcounter
- apply unveil filesystem access permissions on OpenBSD
- current dir (./) is read-only and ./log and ./db are read-write
- using kc3 unveil wrapper that soft fails on other systems
- on OpenBSD a failed unveil call aborts the program into the
debugger
- apply unrevokable restrictions on future syscalls on OpenBSD using
pledge(2)
window
- demo
- unified all OpenGL demos under window/demo
- SDL2
- OpenGLESv3
- Use Angle GLESv3
implementation with Metal backend on MacOS. This provides
SDL2 with an EGL/GLESv3 driver on MacOS despite OpenGL support
being dropped by Apple.
- EGL backend
- XCB backend for X11
- VT backend on Linux and OpenBSD using DRM KMS and GBM
kc3s supports the following command line arguments :
kpkg - KC3 package manager
- written in 3 days in KC3 + C
- Argument parsing as a
while loop with with pattern matching
(like Elixir)
- Added repo definitions for :
- supports cross compilation
- used as main platform for compiling kc3 and dependencies for
Android
release engineering
- compressed dmg with large icons and a nice arrow pointing to
applications symlink
- mac release binaries work from any absolute path and use
relative paths to find dynamic libraries
- debian package building from sources
- gentoo overlay and ebuilds for
removed unused/merged branches