Tag
Hash :
e13294cb
Author :
Thomas de Grivel
Date :
2025-01-21T21:25:13
New in KC3 v0.1.14 - pretty printer - auto indent KC3 code - map - `access` - `get` (get key value) - `put` (return a new map) - struct - `access` - `get` - `put` - facts database (triple store) accessible from KC3 - `new database (Ptr)` - `add_tags` - `collect_with` - `collect_with_tags` - `remove_tags` - `with_tags` - `with` - `with_macro` - HTTPd v0.2.0 - dynamic pages (MVC) - models are defined in `./app/models/` - controllers are defined in `./app/controllers/` - templates are defined in `./app/templates/` - views are defined in `./app/views/` - dynamic router is defined in `./config/router.kc3` - For now we don't match request method and just match the start of the URL with `Str.starts_with?(url, route.path)` - If there is no route or no controller or the controller does not return a HTTP response, a 404 error is returned. Other frameworks like Ruby on Rails or Phoenix do return a 500... - threads - `env_fork_init` - `env_fork_clean` - `Thread.new(fn)` - fx v0.2.0 - file explorer - preview files - text - image - video - audio - binary (hexdump -C) - properties - create - POST "/properties/*path" - delete - DELETE "/properties/*path
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 stable release, for the development branch see the KC3 git repository master branch.
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.
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 enabled dlsym
and thus
all Cfn
at the moment) Supported 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 demo
make demo_gl
make test_httpd
with all the KC3 releases and
documentation. access
get
(get key value) put
(return a new map) access
get
put
new database (Ptr)
add_tags
collect_with
collect_with_tags
remove_tags
with_tags
with
with_macro
./app/models/
./app/controllers/
./app/templates/
./app/views/
./config/router.kc3
Str.starts_with?(url, route.path)
env_fork_init
env_fork_clean
Thread.new(fn)
Join 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))))
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177
# 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 stable release, for the development branch see
[the KC3 git repository master branch](https://git.kmx.io/kc3-lang/kc3).
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.
Components :
- The pure C11 `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).
- There are several C libraries which are installed in `lib/kc3/0.1`
using the `make lib_links` command.
- There is a web server in httpd : `kc3_httpd`.
All binaries can be compiled for four targets :
- __main__ : speed optimizations from GCC/Clang -O2 and
debug code like `assert` is disabled.
- __debug__ : no optimization and debug code like `assert` is enabled
- __cov__ : code coverage instrumentation (breaks `dlsym` and thus
all `Cfn` at the moment)
- __asan__ : memory safety instrumentation with ASAN, an absolutely
awesome tool to detect all memory leaks, double free, segmentation
faults, invalid read, invalid write, general memory corruption
errors, etc., just run the __asan__ target for a full report at
process exit, the report being empty if all is ok.
Supported operating systems (additional dependencies) :
- BSD
- Linux (libbsd, libmd)
- MacOS X (libmd)
- Windows (MSys2) (no network)
Supported architectures :
- aarch64 (arm64, Apple M1, Apple M2)
- amd64
- i386
- sparc64
To install and test KC3 for yourself, you can follow the
[KC3 Installation Guide](https://kc3-lang.org/doc/3_Guides/3.1_Install).
## Users
There are now four full applications written in KC3 that we know of :
- The KC3 Cairo demo which you can run with `make demo`
- The KC3 SDL2 OpenGL demo which you can run with `make demo_gl`
- The [KC3 website](https://kc3-lang.org/) which you can launch
locally with `make test_httpd` with all the KC3 releases and
documentation.
- The [www.kmx.io website](https://www.kmx.io/) which is closed
source and is hosted on kmx.io servers in France using OpenBSD
everywhere. We donate to OpenBSD every month because a healthy
software ecosystem is a funded ecosystem.
## New in this release
- pretty printer
- auto indent KC3 code
- map
- `access`
- `get` (get key value)
- `put` (return a new map)
- struct
- `access`
- `get`
- `put`
- facts database (triple store) accessible from KC3
- `new database (Ptr)`
- `add_tags`
- `collect_with`
- `collect_with_tags`
- `remove_tags`
- `with_tags`
- `with`
- `with_macro`
- HTTPd v0.2.0
- dynamic pages (MVC)
- models are defined in `./app/models/`
- controllers are defined in `./app/controllers/`
- templates are defined in `./app/templates/`
- views are defined in `./app/views/`
- dynamic router is defined in `./config/router.kc3`
- For now we don't match request method and just match the start of
the URL with `Str.starts_with?(url, route.path)`
- If there is no route or no controller or the controller does
not return a HTTP response, a 404 error is returned. Other
frameworks like Ruby on Rails or Phoenix do return a 500...
- threads
- `env_fork_init`
- `env_fork_clean`
- `Thread.new(fn)`
- fx v0.2.0
- file explorer
- preview files
- text
- image
- video
- audio
- binary (hexdump -C)
- properties
- create
- POST "/properties/*path"
- delete
- DELETE "/properties/*path
## Discord invite
[Join us on kmx.io Discord server !](https://discord.gg/A4MWkpUDsG)
## [Guides](https://kc3-lang.org/doc/3_Guides)
Follow the [KC3 guides](https://kc3-lang.org/doc/3_Guides)
to discover how to use KC3 for your own projects.
## TODO
- fx
- chaining of audio and video previews (folder as a playlist)
- tags
- create
- POST "/tag/:tag/*path"
- delete
- DELETE "/tag/:tag/*path"
- recursive
- properties
- recursive
- HTTPd
- dynamic router
- def_route(:get, "/user/:id/articles/*slug/edit", UserArticlesController.edit)
- libkc3
- operators dispatch
- list of matching operators (facts_with)
- base-specific big floats
- macro cast : `(Macro) fn (x) { x }`
- pretty printer
- 80 columns (`\n`)
- tags
- generic 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)
- 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