diff options
Diffstat (limited to 'docs')
| -rw-r--r-- | docs/definitions.md | 55 | ||||
| -rw-r--r-- | docs/index.md | 37 | ||||
| -rw-r--r-- | docs/syntax.md | 115 | ||||
| -rw-r--r-- | docs/tagging.md | 23 |
4 files changed, 230 insertions, 0 deletions
diff --git a/docs/definitions.md b/docs/definitions.md new file mode 100644 index 0000000..a7bc028 --- /dev/null +++ b/docs/definitions.md @@ -0,0 +1,55 @@ +# Definitions + +--- + +## Code + +A representation of executable bytes + +### Operation + +Intrinsic + +### Statement + +A sequence of operations + +### Block + +A list of statements + +### Function + +A sequence of blocks and/or statements that take arguments and returns code or data + +### Coroutine + +A sequence of functions for a single `Task` + +### Line + +A queue of coroutines on a container + +## Data + +A representation of non executable bytes + +### Collection + +A list of immediately evaluated statements + +### Value + +Fits in a general register, all updates are atomic + +### Container + +Requires heap allocation, all updates are processed through a single-file `Line` + +### Task + +Coroutine state + +### Tag + +A key associated with a value diff --git a/docs/index.md b/docs/index.md index e69de29..acab793 100644 --- a/docs/index.md +++ b/docs/index.md @@ -0,0 +1,37 @@ +# Kevin's Programming Language (KPL) Specification + +--- + +## Language Goals + +### Implicit Error Handling + +* All operations return a `Result` that can be manually or automatically checked + +### Asynchronous First + +* No functions, only coroutines + +### All Code Is Thread Safe + +* Values are atomic and all containers have a `mutex` like mechanism that is implicitly locked before use + +### Strongly Typed + +* Dynamic types are represented by `Any`, these types have to be matched to a type before they can be used + +### Single Invocation + +* Just In Time Compilation + +### Asymmetric C Interoperability + +KPL code can call C code, C code can call certain KPL code + +### Run On Linux/WSL With `io_uring` For `X86-64` And `Aarch64` Only with Minimal Dependencies + +* GCC, Make and OpenSSL; should compile on most distributions without any extra steps + +### Low Resource Usage + +* Should work on servers with 1 Core and 1 Gigabyte of RAM diff --git a/docs/syntax.md b/docs/syntax.md new file mode 100644 index 0000000..0868143 --- /dev/null +++ b/docs/syntax.md @@ -0,0 +1,115 @@ +# Syntax + +--- + +## Comments + +```text +// Comment Until End Of Line + +/* Comment */ +``` + +## Numbers + +### Integers + +```text +1234 +1_000_000 +``` + +### Floats + +```text +1.2 +``` + +## Glyphs + +### Characters `''` + +```text +'a' +'Σ' +``` + +### Strings `""` + +## Operators + +### Symbol + +```text +1 + 2 +``` + +### Named ``[a-z]\w+` + +## Variables `[a-z][a-zA-Z0-9_]{0,49}` + +## Constants `_[a-zA-Z0-9_]{0,49}` + +## Types `[A-Z][a-zA-Z0-9_]{0,49}` + +## Tags `\.[a-zA-Z0-9_]{1,50}` + +## Blocks `{}` + +## Collections `()` + +## Modifiers `[]` + +## Separators `;|\n` + +## Actions + +### If `?` + +```text +? condition {[arguments] statements } { else statements } + +? { + condition {[arguments] statements } + ... + { else statements } +} +``` + +### Loop `@` + +```text +@.tag condition {[arguments] statements } +``` + +#### ``break.tag + +#### ``continue.tag + +### Match `#` + +```text +# match { + condition {[arguments] statements } + ... + { else statements } +} +``` + +## Coroutines ``{[] ... }` + +### ``return.tag + +### ``sync + +### ``async + +### ``await + +## Generators `^{[] ... }` + +### ``yield + +### ``stop + +### ``next diff --git a/docs/tagging.md b/docs/tagging.md new file mode 100644 index 0000000..e2bcf69 --- /dev/null +++ b/docs/tagging.md @@ -0,0 +1,23 @@ +# Tagging + +--- + +## Operators + +### Matching + +### Asserting + +## Coroutines + +### Returning + +## Tables + +### Accessing + +## Loops + +### Break + +### Continue |
