diff --git a/README.md b/README.md
index 3690522..cdd8dca 100644
--- a/README.md
+++ b/README.md
@@ -2,13 +2,13 @@
## What is Fun?
-Fun is a small, strict, and simple programming language that runs on a compact stack-based virtual machine. The C core is intentionally minimal; most functionality and standard libraries are implemented in Fun itself. The language emphasizes simplicity, consistency, and joy in coding.
+Fun is a small, strict, and simple programming language that runs on a compact stack-based virtual machine. The C core is intentionally minimal; most functionality and standard libraries are implemented in Fun itself.
-Fun is an experiment, just for fun, but Fun works!
+Fun is dynamically typed with optional static type annotations, featuring first-class functions, classes with inheritance, pattern matching, and a rich standard library. It supports everything from basic scripting to TCP sockets, serial communication, threading, cryptography (MD5, SHA-1/256/384/512, CRC-32, AES-256), and a built-in debugger.
-Fun is a highly strict programming language, but also highly simple. It looks like Python (My favorite language), but there are differences.
+Fun is an experiment - just for fun - but Fun works!
-Influenced by **[Bash](https://www.gnu.org/software/bash/)**, **[C](https://en.wikipedia.org/wiki/The_C_Programming_Language)**, **[Lua](https://www.lua.org/)**, PHP, **[Python](https://www.python.org/)**, and Rust (Most influences came from linked languages).
+Influenced by **[Bash](https://www.gnu.org/software/bash/)**, **[C](https://en.wikipedia.org/wiki/The_C_Programming_Language)**, **[Lua](https://www.lua.org/)**, PHP, **[Python](https://www.python.org/)**, and **[Rust](https://www.rust-lang.org/)**.
Fun is and will ever be 100% free under the terms of the [Apache-2.0 License](https://opensource.org/license/apache-2-0).
@@ -23,11 +23,19 @@ Fun is and will ever be 100% free under the terms of the [Apache-2.0 License](ht
## Characteristics
-- Dynamic and optionally statically typed
-- Type safety
-- Written in C (C99) and Fun
-- Internal libs are written with no_camel_case even when written in Fun, except class names
-- Only a minimal function set is written in C, and most other core functions and libraries are implemented in Fun
+- **Dynamic typing** with optional **static type annotations** (`number`, `string`, `boolean`, `float`, `byte`, `uint8`–`uint64`, `int8`–`int64`)
+- **Stack-based bytecode VM** written in C99 with ~220 opcodes
+- **First-class functions**, anonymous functions (`fn`), and higher-order operations (`map`, `filter`, `reduce`)
+- **Classes** with constructors, methods, and single inheritance
+- **Exception handling** with `try`/`catch`/`finally`
+- **Built-in data structures**: arrays (with slicing), maps/objects, strings
+- **Concurrency**: threads (`thread_spawn`, `thread_join`) and cooperative async scheduler
+- **Networking**: TCP and Unix domain sockets with non-blocking I/O polling
+- **Serial communication**: full termios-based serial port control
+- **Cryptography**: pure-Fun implementations of MD5, SHA-1/256/384/512, CRC-32/CRC-32C, AES-256 ECB
+- **Built-in debugger** with breakpoints, step/next/finish, and stack inspection
+- **Minimal C core** — most standard libraries are implemented in Fun itself
+- **Internal style**: `snake_case` for functions and variables, `CamelCase` for class names
## The Fun Manifesto
@@ -45,13 +53,13 @@ Coding should be enjoyable, elegant, and consistent.
- **One Way to Do It**
No clutter, no 15 ways of writing the same thing. Simplicity means clarity.
- **Hackable by Nature**
- Fun should be small and embeddable, like Lua. Easy to understand, extend, and tinker with — true to the hacker spirit.
+ Fun should be small and embeddable, like Lua. Easy to understand, extend, and tinker with — true to the hacker spirit.
- **Beautiful Defaults**
- A language that doesn’t need linters, formatters, or style guides. Beauty is built in.
+ A language that doesn't need linters, formatters, or style guides. Beauty is built in.
## The Community
-Fun is not about being the fastest or the most feature-rich. It’s about sharing joy in coding. The community should be:
+Fun is not about being the fastest or the most feature-rich. It's about sharing joy in coding. The community should be:
- Respectful
- Curious
@@ -70,63 +78,166 @@ A language that feels like home for developers who:
- Believe consistency is freedom
- Want to write code that looks good and feels good
-Fun may not change the world — but it will make programming a little more fun.
+Fun may not change the world - but it will make programming a little more fun.
-## Features
+## Language Features
-### Core
+### Core Syntax & Types
-- functions/classes/objects
-- if/else if/else
-- try/catch/finally
+- Indentation-based blocks (2-space), line and block comments
+- Static type annotations with automatic runtime range clamping for fixed-width integers
+- `typeof()`, `to_string()`, `to_number()`, `cast()` — type introspection and conversion
+- `exit` statement with optional exit code, `#include` for source includes
-And much more...! Look at the specs in [Spec](./spec/) for more detailed information.
+### Operators
-### Lib (./lib/)
+- Arithmetic: `+`, `-`, `*`, `/`, `%`
+- Comparison: `<`, `<=`, `>`, `>=`, `==`, `!=`
+- Logical: `&&`, `||`, `!` (short-circuit)
+- Bitwise: `band()`, `bor()`, `bxor()`, `bnot()`, `shl()`, `shr()`, `rol()`, `ror()`
+- Ternary: `condition ? true_expr : false_expr`
-See [./lib/](https://git.xw3.org/fun/fun/src/branch/main/lib) for what the standard library provides.
+### Control Flow
-### Optional extensions (build-time selectable / only testing this on Linux actually):
+- `if` / `else if` / `else`
+- `while` with `break` and `continue`
+- `for var in array` — iteration
+- `for var in range(start, end)` — numeric range
+- `for (key, value) in map` — map destructuring
+- `match` expression (stdlib)
+- `try` / `catch` / `finally`
-- [CGI](https://en.wikipedia.org/wiki/Common_Gateway_Interface) support builtin using [kcgi](https://kristaps.bsd.lv/kcgi/) (optional) — see [docs](./web/documentation/extensions/kcgi/kcgi.md) ☑
-- [cURL (libcurl)](./web/documentation/extensions/curl/curl.md) (optional) ☑
-- [INI (iniparser)](./web/documentation/extensions/ini/ini.md) (optional) ☑
-- [JSON (json-c)](./web/documentation/extensions/json/json.md) (optional) ☑
-- [PCRE2](./web/documentation/extensions/pcre2/pcre2.md) (optional) ☑
-- [PCSC (smart cards)](./web/documentation/extensions/pcsc/pcsc.md) (optional) ☑
-- [OpenSSL](./web/documentation/extensions/openssl/openssl.md) (optional) ☑
-- [SQLite](./web/documentation/extensions/sqlite/sqlite.md) (optional) ☑
-- [XML (libxml2)](./web/documentation/extensions/xml2/xml2.md) (optional) ☑
+### Functions
-☑ = Done (or basics implemented) / ☐ = Planned or in progress.
+- `fun name(params) body` — named functions
+- `fn(params) body` — anonymous function literals
+- First-class: pass as arguments, store in variables, recursion
+- `return` with optional value (implicit nil)
-Note: Not all of the above features will be implemented. Those who are marked "Done" will probaly remain in Fun, but I don't know actually... ;)
+### Object-Oriented Programming
-There are some libs written in Fun available in the [./lib/](https://git.xw3.org/fun/fun/src/branch/main/lib) diretory. In the future most Fun enhancements should be written in Fun itself.
+- `class Name(typed params) body` with `_construct(this, ...)` auto-invoked constructor
+- `this` keyword, `obj.method(args)` method call sugar, `obj.field` dot property access
+- `class Child(...) extends Parent` with method overriding
+
+### Data Structures
+
+- **Arrays**: literal `[1, 2, 3]`, index `arr[0]`, slice `arr[1:3]`, negative indices; `len()`, `push()`, `pop()`, `insert()`, `remove()`, `contains()`, `indexOf()`, `clear()`, `enumerate()`, `zip()`, `join()`, `map()`, `filter()`, `reduce()`
+- **Maps**: literal `{key: value}`, bracket `map["key"]`, dot `map.key` access; `has()`, `keys()`, `values()`
+- **Strings**: concatenation with `+`, `len()`, `substr()`, `find()`, `split()`, `join()`
+
+### Mathematics
+
+- Built-in: `abs`, `min`, `max`, `fmin`, `fmax`, `clamp`, `pow`, `sqrt`, `floor`, `ceil`, `trunc`, `round`, `sin`, `cos`, `tan`, `exp`, `log`, `log10`, `gcd`, `lcm`, `isqrt`, `sign`
+- Random: `random_seed()`, `random_int()`, `random_number()` (cryptographic)
+- Integer clamping: `sclamp()`, `uclamp()`
+
+### I/O & Platform
+
+- `print()`, `echo()` — output
+- `read_file()`, `write_file()` — file I/O
+- `input_line()` — stdin with optional prompt
+- `env()`, `env_all()` — environment variables
+- `proc_run()`, `system()` — process execution
+- `os_list_dir()` — directory listing
+- `time_now_ms()`, `clock_mono_ms()`, `date_format()`, `sleep()`
+
+### Networking (Built-in, Unix)
+
+- TCP: listen, accept, connect, send, recv, close
+- Unix domain sockets: listen, connect
+- Non-blocking I/O: `fd_set_nonblock()`, `fd_poll_read()`, `fd_poll_write()`
+
+### Serial Communication (Unix)
+
+- `serial_open()`, `serial_config()`, `serial_send()`, `serial_recv()`, `serial_close()`
+
+### Concurrency
+
+- `thread_spawn(fn, args)` returns thread ID; `thread_join(id)` returns result
+- Cooperative async scheduler in stdlib
+
+### Debugging & Tooling
+
+- Built-in debugger with 64 breakpoints, step/next/finish/continue
+- `--trace` / `-t` for opcode-level execution tracing
+- `--repl-on-error`: enter REPL on runtime error with stack preserved
+- Full-featured REPL with history, tab completion, multi-line input, commands (`:help`, `:load`, `:edit`, `:save`, `:debug`, `:trace`, `:type`, and more)
+- `funstx` — syntax checker with optional `--fix` mode
+
+## Standard Library (lib/)
+
+Written primarily in Fun itself:
+
+- **Strings**: trim, starts/ends-with, split, replace-all, case conversion, repeat
+- **Arrays**: slice, reverse, concat, unique, flatten
+- **Math**: `abs`, `clamp`, `gcd`, `lcm`, `powi`, min3, max3, array min/max
+- **Encoding**: hex encode/decode, base64 encode/decode
+- **Cryptography** (pure Fun): MD5, SHA-1, SHA-256, SHA-384, SHA-512, CRC-32, CRC-32C, AES-256 ECB
+- **Functional**: Option (Some/None), Result (Ok/Err), pattern matching
+- **Ranges**: `range(n)`, `range2(start, end)`, `range3(start, end, step)`
+- **Date/Time**: `DateTime` class with formatting, timers, sleep
+- **CLI**: `argv()`, `parse_args()` with flag support
+- **Console**: `Console` class with prompt, ask, hidden input, progress bar
+- **Thread**: `Thread` class, **Process**: `Process` class
+- **Socket classes**: `TcpClient`, `TcpServer`, `UnixClient`
+- **Serial**: `Serial` class
+- **Async**: Cooperative scheduler with I/O polling
+- **HTTP**: Static file server, CGI-capable server
+- **IRC**: `IRCClient` with full protocol support
+- **CGI**: `CGI` class for web applications
+
+## Optional Extensions (Build-time)
+
+Enabled via CMake flags, wrapping mature C libraries:
+
+| Extension | Backend |
+|---|---|
+| JSON | json-c |
+| cURL | libcurl |
+| SQLite | libsqlite3 |
+| PCRE2 | libpcre2 |
+| OpenSSL | libcrypto |
+| INI | iniparser 4.2.6 |
+| XML | libxml2 |
+| PC/SC | libpcsclite |
+| KCGI | libkcgi |
+
+Each extension also has a corresponding stdlib wrapper class (e.g., `JSON`, `INI`, `XML`, `PCSC`, `PCRE2`, `KCGI`).
+
+## Quick start
+
+
console
+$ git clone https://git.xw3.org/fun/fun.git
+$ cd fun
+$ cmake -B build -DCMAKE_BUILD_TYPE=Release
+$ cmake --build build
+$ ./build/fun
+fun> print("Hello, World!")
+Hello, World!
+fun> :quit
### OpenSSL quickstart (MD5)
-See the dedicated page: [./web/documentation/extensions/openssl/](./web/documentation/extensions/openssl/openssl.md)
+See: [./web/documentation/extensions/openssl/openssl.md](./web/documentation/extensions/openssl/openssl.md)
+
+## Build Options
+
+- **`-DCMAKE_BUILD_TYPE=Debug`** — debug build with asserts
+- **`-DCMAKE_BUILD_TYPE=Release`** — optimized build with LTO and stripping
+- **`-DFUN_BUILD_MUSL=ON`** — static musl build
+- Toggle each extension: `-DFUN_WITH_JSON=ON`, `-DFUN_WITH_CURL=ON`, etc.
+- **`-DFUN_BUILD_DOXYGEN=ON`** — API reference
## Documentation
-Looking for docs? Start here:
-
-- Local documentation index: [./web/documentation/documenatation.md](./web/documentation/documentation.md)
- - Handbook: [./web/documentation/handbook/handbook.md](./web/documentation/handbook/handbook.md)
- - Types overview: [./web/documentation/types/types.md](./web/documentation/types/types.md)
- - REPL guide: [./web/documentation/repl/repl.md](./web/documentation/repl/repl.md)
- - Testing: [./web/documentation/testing/testing.md](./web/documentation/testing/testing.md)
- - Troubleshooting: [./web/documentation/troubleshooting/troubleshooting.md](./web/documentation/troubleshooting/troubleshooting.md)
-
-Additional references:
-
-- Specification: [./web/documentation/spec/v0.4.md](./web/documentation/spec/v0.4.md) (work in progress)
+- Handbook: [./web/documentation/handbook/handbook.md](./web/documentation/handbook/handbook.md)
+- Types: [./web/documentation/types/types.md](./web/documentation/types/types.md)
+- REPL: [./web/documentation/repl/repl.md](./web/documentation/repl/repl.md)
+- Testing: [./web/documentation/testing/testing.md](./web/documentation/testing/testing.md)
+- Spec: [./web/documentation/spec/v0.4.md](./web/documentation/spec/v0.4.md)
- Changelog: [CHANGELOG.md](./CHANGELOG.md)
-- Examples demonstrating most features: [./examples/](./examples/)
-- Internals and VM opcodes live in [./src/](./src/) (see [./src/vm/](./src/vm) for opcode implementations)
-
-Note: The project is evolving; some documents may lag behind. The docs index in [./web/documentation/documenatation.md](./web/documentation/documentation.md) is the most up‑to‑date entry point.
+- Examples: [./examples/features.fun](./examples/features.fun)
## Author