1
0
Fork 0
forked from fun/fun

Documentation refactoring. No code changes. (0.40.5)

This commit is contained in:
Johannes Findeisen 2026-04-15 01:25:17 +02:00
commit 63545ed918
136 changed files with 374 additions and 3163 deletions

View file

@ -1,60 +0,0 @@
#!/usr/bin/env fun
/*
* This file is part of the Fun programming language.
* https://fun-lang.xyz/
*
* Copyright 2025 Johannes Findeisen <you@hanez.org>
* Licensed under the terms of the Apache-2.0 license.
* https://opensource.org/license/apache-2-0
*
* Added: 2025-12-09
*/
// Tk stdlib helper wrapping the Tk VM builtins.
// No raw Tcl is exposed; this class provides a tiny, safe GUI surface.
class TK()
// Set the window title
fun title(this, title)
return tk_title(to_string(title))
// Create or update a label widget with id and text
fun label(this, id, text)
return tk_label(to_string(id), to_string(text))
// Create or update a button widget with id and text
fun button(this, id, text)
return tk_button(to_string(id), to_string(text))
// Pack a widget by id
fun pack(this, id)
return tk_pack(to_string(id))
// Create a listbox widget
fun listbox(this, id)
return tk_eval("listbox ." + to_string(id))
// Insert text into a widget (like listbox) at index
fun insert(this, id, index, text)
return tk_eval("." + to_string(id) + " insert " + to_string(index) + " {" + to_string(text) + "}")
// Clear a widget (like listbox)
fun clear(this, id)
return tk_eval("." + to_string(id) + " delete 0 end")
// Bind an event to a command
fun bind(this, id, event, cmd)
return tk_bind(to_string(id), to_string(event), to_string(cmd))
// Evaluate raw Tcl script
fun eval(this, script)
return tk_eval(to_string(script))
// Get last Tcl result
fun result(this)
return tk_result()
// Enter the Tk event loop (blocks until windows are closed)
fun loop(this)
return tk_loop()

View file

@ -20,7 +20,6 @@ tags:
- slicing - slicing
--- ---
This guide focuses on arrays: creation, indexing, mutation, iteration, slicing, and common gotchas. It complements the quick overview in types.md with a deeper, exampledriven treatment. This guide focuses on arrays: creation, indexing, mutation, iteration, slicing, and common gotchas. It complements the quick overview in types.md with a deeper, exampledriven treatment.
## What is an array? ## What is an array?
@ -40,8 +39,7 @@ empty = []
grid = [[1,2], [3,4]] grid = [[1,2], [3,4]]
print(typeof(a)) // "array" print(typeof(a)) // "array"
print(len(a)) // 3 print(len(a)) // 3</pre>
</pre>
Tip: Prefer squarebracket literals for clarity and performance versus building via repeated push in a hot loop. Tip: Prefer squarebracket literals for clarity and performance versus building via repeated push in a hot loop.
@ -53,9 +51,10 @@ print(a[2]) // 30
// update in place // update in place
a[1] = 42 a[1] = 42
print(a) // [10, 42, 30] print(a) // [10, 42, 30]</pre>
</pre>
Notes: Notes:
- Valid indices are 0..len(a)-1. Using an invalid index raises a runtime error. - Valid indices are 0..len(a)-1. Using an invalid index raises a runtime error.
- Assignment updates the existing array; references pointing to it observe the change. - Assignment updates the existing array; references pointing to it observe the change.
@ -74,8 +73,8 @@ a = [1, 2, 3]
insert(a, 1, 99) // a => [1, 99, 2, 3] insert(a, 1, 99) // a => [1, 99, 2, 3]
// remove at index (shifts left) // remove at index (shifts left)
remove(a, 2) // a => [1, 99, 3] remove(a, 2) // a => [1, 99, 3]</pre>
</pre>
## Slicing and concatenation ## Slicing and concatenation
<pre>a = [0,1,2,3,4] <pre>a = [0,1,2,3,4]
@ -86,8 +85,8 @@ mid = slice(a, 1, 4) // [1,2,3]
// concat: join two arrays // concat: join two arrays
b = ["x", "y"] b = ["x", "y"]
ab = concat(a, b) // [0,1,2,3,4,"x","y"] ab = concat(a, b) // [0,1,2,3,4,"x","y"]</pre>
</pre>
Slicing returns a new array. The original is unchanged. Slicing returns a new array. The original is unchanged.
## Iteration patterns ## Iteration patterns
@ -105,8 +104,8 @@ for pair in it.enumerate(a) {
idx = pair[0] idx = pair[0]
val = pair[1] val = pair[1]
print(to_string(idx) + ":" + val) print(to_string(idx) + ":" + val)
} }</pre>
</pre>
## Copying vs. referencing ## Copying vs. referencing
Arrays are reference types. Assigning just copies the reference, not the contents: Arrays are reference types. Assigning just copies the reference, not the contents:
@ -120,15 +119,15 @@ print(orig) // [9, 2]
copy = slice(orig, 0, len(orig)) copy = slice(orig, 0, len(orig))
copy[1] = 7 copy[1] = 7
print(orig) // [9, 2] print(orig) // [9, 2]
print(copy) // [9, 7] print(copy) // [9, 7]</pre>
</pre>
Shallow copies duplicate the toplevel array but not nested structures. Shallow copies duplicate the toplevel array but not nested structures.
## Equality ## Equality
<pre>print([1,2] == [1,2]) // true <pre>print([1,2] == [1,2]) // true
print([1,2] == [2,1]) // false print([1,2] == [2,1]) // false</pre>
</pre>
Array equality compares length and elementwise equality recursively. Array equality compares length and elementwise equality recursively.
## Common utilities ## Common utilities
@ -148,9 +147,10 @@ Check your lib directory (e.g., lib/utils) for additional helpers.
## Error handling and bounds ## Error handling and bounds
<pre>a = [0] <pre>a = [0]
// a[1] is out of range → runtime error // a[1] is out of range → runtime error</pre>
</pre>
Tips: Tips:
- Guard indices: if i < 0 or i >= len(a) { /* handle */ } - Guard indices: if i < 0 or i >= len(a) { /* handle */ }
- Use remove/insert carefully inside loops; indices of following items change. - Use remove/insert carefully inside loops; indices of following items change.
@ -163,8 +163,8 @@ print(users[1]["name"]) // Lin
// split/join patterns depend on your stdlib // split/join patterns depend on your stdlib
#include <utils/strings.fun> as su // adjust if present in your tree #include <utils/strings.fun> as su // adjust if present in your tree
parts = su.split("a,b,c", ",") // ["a","b","c"] parts = su.split("a,b,c", ",") // ["a","b","c"]
csv = su.join(parts, ",") // "a,b,c" csv = su.join(parts, ",") // "a,b,c"</pre>
</pre>
## Performance tips ## Performance tips
- Preallocate by building from literals or chunked appends rather than onebyone in very tight loops. - Preallocate by building from literals or chunked appends rather than onebyone in very tight loops.
@ -191,9 +191,9 @@ for i = 0; i < len(nested); i = i + 1 {
push(flat, row[j]) push(flat, row[j])
} }
} }
print(flat) // [1,2,3,4,5] print(flat) // [1,2,3,4,5]</pre>
</pre>
## See also ## See also
- types.md — broader overview of core types with quick array examples. - [../types/](../types/) — broader overview of core types with quick array examples.
- examples/ — many scripts operate on arrays; try play.fun to explore. - [../examples/](../examples/) — many scripts operate on arrays; try play.fun to explore.

View file

@ -214,7 +214,7 @@ A: You can prototype small non-blocking fragments in the REPL, but full networki
## See also ## See also
- [examples.md](./examples/) — Running bundled examples - [../examples/](../examples/) — Running bundled examples
- [includes.md](./includes/) — Include paths and library discovery - [../includes/](../includes/) — Include paths and library discovery
- [opcodes.md](./opcodes/) — VM opcodes overview - [../opcodes/](../opcodes/) — VM opcodes overview
- [troubleshooting.md](./troubleshooting/) — Common issues and quick fixes - [../troubleshooting/](../troubleshooting/) — Common issues and quick fixes

View file

@ -61,6 +61,8 @@ These are defined as `CACHE` variables, so they will persist in your `CMakeCache
When configuring, the build prints a summary like: When configuring, the build prints a summary like:
See [../vm/](../vm/) for more information.
<pre>==== Fun build options ==== <pre>==== Fun build options ====
FUN_DEBUG: ENABLED|DISABLED FUN_DEBUG: ENABLED|DISABLED
FUN_USE_MUSL: ENABLED|DISABLED FUN_USE_MUSL: ENABLED|DISABLED
@ -97,7 +99,7 @@ If `FUN_WITH_OPENSSL` is enabled, CMake must detect your system OpenSSL (libcryp
## Running ## Running
- CLI: run the `fun` executable from your build directory. - CLI: run the `fun` executable from your build directory.
- REPL: `fun -i` or just run `fun` without a script, depending on your CLI version (see [cli.md](./cli/)). - REPL: `fun -i` or just run `fun` without a script, depending on your CLI version (see [../cli/](../cli/)).
- Examples: see [examples.md](./examples/). - Examples: see [../examples/](../examples/).
Tip: When running from the repository without installation, set `FUN_LIB_DIR` to the local `./lib` so includes can find the stdlib. Tip: When running from the repository without installation, set `FUN_LIB_DIR` to the local `./lib` so includes can find the stdlib.

View file

@ -20,7 +20,7 @@ tags:
--- ---
This document summarizes the Fun bytecode format. For deep VM details, see [internals.md](./internals/). This document summarizes the Fun bytecode format. For deep VM details, see [internals](./internals/).
## Goals ## Goals
- Compact representation for fast loading and dispatch - Compact representation for fast loading and dispatch

View file

@ -23,17 +23,18 @@ tags:
- synopsis - synopsis
--- ---
Reference for the `fun` command-line interface. Reference for the `fun` command-line interface.
For a complete usage guide (including REPL details, environment variables, include paths, examples, and install locations), see [fun.md](./fun/). For a complete usage guide (including REPL details, environment variables, include paths, examples, and install locations), see [fun](./fun/).
## Synopsis ## Synopsis
<pre>fun [options] <script.fun> [-- args...]
</pre> <pre>fun [options] [script.fun] [-- args...]</pre>
If no script is supplied and interactive mode is available, `fun` starts a REPL (see [repl.md](./repl/)).
If no script is supplied and interactive mode is available, `fun` starts a REPL (see [../repl/](../repl/)).
## Common options ## Common options
- `-i`, `--repl` - start an interactive REPL - `-i`, `--repl` - start an interactive REPL
- `-v`, `--version` - print version and exit - `-v`, `--version` - print version and exit
- `-h`, `--help` - show help and exit - `-h`, `--help` - show help and exit
@ -41,19 +42,22 @@ If no script is supplied and interactive mode is available, `fun` starts a REPL
Options may vary between versions; run `fun --help` to see what your build supports. Options may vary between versions; run `fun --help` to see what your build supports.
## Exit codes ## Exit codes
- `0` - success - `0` - success
- non-zero - error during parse, compile, or runtime - non-zero - error during parse, compile, or runtime
## Includes and library paths ## Includes and library paths
- `FUN_LIB_DIR` - environment variable that points to the stdlib location; when running from the repo, set this to `./lib`. - `FUN_LIB_DIR` - environment variable that points to the stdlib location; when running from the repo, set this to `./lib`.
- `DEFAULT_LIB_DIR` - compiled-in fallback path determined at build/install time. - `DEFAULT_LIB_DIR` - compiled-in fallback path determined at build/install time.
See also: [includes.md](./includes/) for namespaced includes and search order. See also: [../includes/](../includes/) for namespaced includes and search order.
## Examples ## Examples
Run a script: Run a script:
<pre>FUN_LIB_DIR=./lib ./build/fun examples/hello.fun <pre>FUN_LIB_DIR=./lib ./build/fun examples/hello.fun</pre>
</pre>
Start the REPL: Start the REPL:
<pre>./build/fun -i
</pre> <pre>./build/fun -i</pre>

View file

@ -25,9 +25,9 @@ tags:
Thanks for your interest in contributing! This guide covers the basics to get you productive quickly. Thanks for your interest in contributing! This guide covers the basics to get you productive quickly.
## Getting started ## Getting started
- Clone the repo and build (see [build/](../build/)). - Clone the repo and build (see [../build/](../build/)).
- Run tests locally (see [testing/](../testing/)). - Run tests locally (see [../testing/](../testing/)).
- Explore examples (see [examples/](../examples/)). - Explore examples (see [../examples/](../examples/)).
## Project structure ## Project structure
- `src/` - C core, VM, and opcode implementations ([https://git.xw3.org/fun/fun/src/branch/main/src/](https://git.xw3.org/fun/fun/src/branch/main/src/){:class="git"}). - `src/` - C core, VM, and opcode implementations ([https://git.xw3.org/fun/fun/src/branch/main/src/](https://git.xw3.org/fun/fun/src/branch/main/src/){:class="git"}).
@ -42,11 +42,11 @@ Thanks for your interest in contributing! This guide covers the basics to get yo
## Code style ## Code style
- C: C99, two-space indent, no tabs. Keep functions short and focused. - C: C99, two-space indent, no tabs. Keep functions short and focused.
- Fun: two-space indent, snake_case for functions, PascalCase for classes/constructors. - Fun: two-space indent, snake_case for functions, PascalCase for classes/constructors.
- Prefer clear names over abbreviations. See [style-guide/](../style-guide/). - Prefer clear names over abbreviations. See [../style-guide/](../style-guide/).
## Development workflow ## Development workflow
1. Create a small, focused branch. 1. Create a small, focused branch.
2. Add/adjust tests for behavior changes (see [writing-tests](../writing-tests/)). 2. Add/adjust tests for behavior changes (see [../writing-tests](../writing-tests/)).
3. Update docs if user-visible behavior changes. 3. Update docs if user-visible behavior changes.
4. Submit a PR with a clear description and rationale. 4. Submit a PR with a clear description and rationale.
@ -62,4 +62,4 @@ Please include:
- `fun --version` output - `fun --version` output
## Code of Conduct ## Code of Conduct
Be respectful and inclusive. See [https://git.xw3.org/fun/fun/src/branch/main/CODE_OF_CONDUCT.md](https://git.xw3.org/fun/fun/src/branch/main/CODE_OF_CONDUCT.md){:class="git"} in the repository root. Be respectful and inclusive. See [https://git.xw3.org/fun/fun/src/branch/main/CODE_OF_CONDUCT.md](https://git.xw3.org/fun/fun/src/branch/main/CODE_OF_CONDUCT/){:class="git"} in the repository root.

View file

@ -15,17 +15,16 @@ tags:
- programming - programming
--- ---
This file serves as an index of the documents in this directory. Links are relative and can be opened directly on Git hosting or locally. This file serves as an index of the documents in this directory. Links are relative and can be opened directly on Git hosting or locally.
## Basics ## Basics
- [handbook/](./handbook/) - Comprehensive handbook for the Fun language and VM: install/build, configuration flags, usage, and full feature overview. - [./handbook/](./handbook/) - Comprehensive handbook for the Fun language and VM: install/build, configuration flags, usage, and full feature overview.
- [Fun REPL Guide](./repl/) - REPL guide: how to build/launch, editing and history, completions, REPL-on-error, and tips. - [./repl/](./repl/) - REPL user guide: how to build/launch, editing and history, completions, REPL-on-error, and tips.
- [Specification v0.4](https://git.xw3.org/fun/fun/src/branch/main/spec/v0.4.md){:class="git"} - [Specification v0.4](https://git.xw3.org/fun/fun/src/branch/main/spec/v0.4/){:class="git"}
- [Specification v0.3](https://git.xw3.org/fun/fun/src/branch/main/spec/v0.3.md){:class="git"} - [Specification v0.3](https://git.xw3.org/fun/fun/src/branch/main/spec/v0.3/){:class="git"}
- [Specification v0.2](https://git.xw3.org/fun/fun/src/branch/main/spec/v0.2.md){:class="git"} - [Specification v0.2](https://git.xw3.org/fun/fun/src/branch/main/spec/v0.2/){:class="git"}
- [Specification v0.1](https://git.xw3.org/fun/fun/src/branch/main/spec/v0.1.md){:class="git"} - [Specification v0.1](https://git.xw3.org/fun/fun/src/branch/main/spec/v0.1/){:class="git"}
- [Examples](https://git.xw3.org/fun/fun/src/branch/main/examples){:class="git"} - [Examples](https://git.xw3.org/fun/fun/src/branch/main/examples){:class="git"}
- [Standard Library](https://git.xw3.org/fun/fun/src/branch/main/lib){:class="git"} - [Standard Library](https://git.xw3.org/fun/fun/src/branch/main/lib){:class="git"}
@ -33,43 +32,43 @@ The examples directory contains demonstrations of most Fun features, from basic
## Overview ## Overview
- [types/](./types/) - Core types (numbers, strings, arrays, maps, nil/bool), common operations, patterns, and interop notes. - [./types/](./types/) - Core types (numbers, strings, arrays, maps, nil/bool), common operations, patterns, and interop notes.
- [numbers/](./numbers/) - Working with integers and floats: arithmetic, conversions, clamping, bitwise ops, and patterns. - [./numbers/](./numbers/) - Working with integers and floats: arithmetic, conversions, clamping, bitwise ops, and patterns.
- [strings/](./strings/) - Working with strings: literals/escaping, concatenation, substr/find, split, and conversions. - [./strings/](./strings/) - Working with strings: literals/escaping, concatenation, substr/find, split, and conversions.
- [arrays/](./arrays/) - Working with arrays: creation, indexing/slicing, iteration patterns, helpers, and idioms. - [./arrays/](./arrays/) - Working with arrays: creation, indexing/slicing, iteration patterns, helpers, and idioms.
- [maps/](./maps/) - Working with maps: construction, lookup/update, merging, iteration, and common patterns. - [./maps/](./maps/) - Working with maps: construction, lookup/update, merging, iteration, and common patterns.
- [includes/](./includes/) - Using local vs. system includes, FUN_LIB_DIR, DEFAULT_LIB_DIR, and namespaced includes with `as`. - [./includes/](./includes/) - Using local vs. system includes, FUN_LIB_DIR, DEFAULT_LIB_DIR, and namespaced includes with `as`.
- [opcodes/](./opcodes/) - VM opcodes overview grouped by domain with brief behavior/stack notes. - [./opcodes/](./opcodes/) - VM opcodes overview grouped by domain with brief behavior/stack notes.
- [internals/](./internals/) - Implementation details: bytecode format, VM architecture, stacks/frames, parser, and dispatch. - [./internals/](./internals/) - Implementation details: bytecode format, VM architecture, stacks/frames, parser, and dispatch.
- [vm/](./vm/) - VM configuration constants: maximum stack depth, local/global variable limits, and output buffer size. - [./vm/](./vm/) - VM configuration constants: maximum stack depth, local/global variable limits, and output buffer size.
- [rust/](./rust/) - Writing Rust-backed opcodes and wiring them into the C VM; build/setup notes. - [./rust/](./rust/) - Writing Rust-backed opcodes and wiring them into the C VM; build/setup notes.
- [examples/](./examples/) - How to run the examples and the interactive showcase script, with environment tips. - [./examples/](./examples/) - How to run the examples and the interactive showcase script, with environment tips.
- [testing/](./testing/) - How to build and run tests/targets with CMake/CTest, and where to add new tests. - [./testing/](./testing/) - How to build and run tests/targets with CMake/CTest, and where to add new tests.
- [troubleshooting/](./troubleshooting/) - Common issues and quick fixes for build, includes, and REPL usage. - [./troubleshooting/](./troubleshooting/) - Common issues and quick fixes for build, includes, and REPL usage.
## New and supplemental guides ## New and supplemental guides
- [build/](./build/) - How to build Fun with CMake, available targets, and build options (FUN_DEBUG, FUN_USE_MUSL, FUN_WITH_CPP, FUN_WITH_RUST, FUN_WITH_OPENSSL). - [./build/](./build/) - How to build Fun with CMake, available targets, and build options (FUN_DEBUG, FUN_USE_MUSL, FUN_WITH_CPP, FUN_WITH_RUST, FUN_WITH_OPENSSL).
- [cli/](./cli/) - Command-line usage of the `fun` executable: synopsis, options, exit codes, includes and library paths. - [./cli/](./cli/) - Command-line usage of the `fun` executable: synopsis, options, exit codes, includes and library paths.
- [fun/](./fun/) - Full usage guide for the `fun` executable: invocation patterns, REPL, env vars, include paths, examples, and install locations. - [./fun/](./fun/) - Full usage guide for the `fun` executable: invocation patterns, REPL, env vars, include paths, examples, and install locations.
- [asyncio/](./asyncio/) - Async I/O primitives and patterns: non-blocking sockets, fd polling, examples, and best practices. - [./asyncio/](./asyncio/) - Async I/O primitives and patterns: non-blocking sockets, fd polling, examples, and best practices.
- [funstx/](./funstx/) - Syntax checker for .fun files with optional --fix auto-corrections; usage, exit codes, and limitations. - [./funstx/](./funstx/) - Syntax checker for .fun files with optional --fix auto-corrections; usage, exit codes, and limitations.
- [contributing/](./contributing/) - How to contribute: project structure, coding style, running tests, and PR guidelines. - [./contributing/](./contributing/) - How to contribute: project structure, coding style, running tests, and PR guidelines.
- [style-guide/](./style-guide/) - Coding conventions for C and Fun (indentation, naming, idioms). - [./style-guide/](./style-guide/) - Coding conventions for C and Fun (indentation, naming, idioms).
- [stdlib/](./stdlib/) - Overview of the standard library modules under ./lib with one-line summaries. - [./stdlib/](./stdlib/) - Overview of the standard library modules under ./lib with one-line summaries.
- [embedding/](./embedding/) - Embedding the VM from C/Rust, lifecycle, and host integration tips. - [./embedding/](./embedding/) - Embedding the VM from C/Rust, lifecycle, and host integration tips.
- [errors-and-diagnostics/](./errors-and-diagnostics/) - Understanding parser/runtime errors and enabling diagnostics. - [./errors-and-diagnostics/](./errors-and-diagnostics/) - Understanding parser/runtime errors and enabling diagnostics.
- [performance/](./performance/) - Build/runtime tuning tips and patterns for better performance. - [./performance/](./performance/) - Build/runtime tuning tips and patterns for better performance.
- [security-and-sandboxing/](./security-and-sandboxing/) - Trust boundaries, I/O expectations, and capability restrictions. - [./security-and-sandboxing/](./security-and-sandboxing/) - Trust boundaries, I/O expectations, and capability restrictions.
- [faq/](./faq/) - Frequently asked questions and quick answers. - [,/faq/](./faq/) - Frequently asked questions and quick answers.
- [website/](./website/) - Documentation for the [fun-lang.xyz](https://fun-lang.xyz) website in the `./web/` directory. - [./website/](./website/) - Documentation for the [fun-lang.xyz](https://fun-lang.xyz) website in the `./web/` directory.
- [writing-tests/](./writing-tests/) - How to author new tests for Fun and opcode components. - [./writing-tests/](./writing-tests/) - How to author new tests for Fun and opcode components.
- [bytecode-format/](./bytecode-format/) - Reference for the bytecode format (split out from internals for convenience). - [./bytecode-format/](./bytecode-format/) - Reference for the bytecode format (split out from internals for convenience).
- [roadmap/](./roadmap/) - High-level direction, planned features, and pointers to issues. - [./roadmap/](./roadmap/) - High-level direction, planned features, and pointers to issues.
## Examples ## Examples
- [examples/](./examples/) - Catalog of all example scripts under [https://git.xw3.org/fun/fun/src/branch/main/examples](https://git.xw3.org/fun/fun/src/branch/main/examples){:class="git"}: what each area contains, how to run them, required env vars, and extension requirements. - [./examples/](./examples/) - Catalog of all example scripts under [https://git.xw3.org/fun/fun/src/branch/main/examples](https://git.xw3.org/fun/fun/src/branch/main/examples){:class="git"}: what each area contains, how to run them, required env vars, and extension requirements.
## External extensions ## External extensions
@ -81,6 +80,6 @@ Documentation for optional, build-time selectable integrations lives in [externa
## Tips ## Tips
- When building from the repo without installing, set `FUN_LIB_DIR` to the local `./lib` directory so examples and the REPL can locate the stdlib. - When building from the repo without installing, set `FUN_LIB_DIR` to the local `./lib` directory so examples and the REPL can locate the stdlib.
- For a broader project overview and quickstart, see the repository root [README/](../../README/). - For a broader project overview and quickstart, see the repository root [README/](./../README/).
- Crypto examples: - Crypto examples:
- If built with `-DFUN_WITH_OPENSSL=ON`, try `examples/crypto/openssl_md5.fun`. - If built with `-DFUN_WITH_OPENSSL=ON`, try `examples/crypto/openssl_md5.fun`.

View file

@ -22,8 +22,8 @@ tags:
This guide outlines how to embed the Fun VM in a host application and extend it from C/Rust. This guide outlines how to embed the Fun VM in a host application and extend it from C/Rust.
## Overview ## Overview
- The VM is implemented in C (see [src/vm](../src/vm/)). - The VM is implemented in C (see [../internals/](../internals/)).
- Optional Rust-based opcodes can be enabled via `FUN_WITH_RUST` (see [rust.md](./rust/)). - Optional Rust-based opcodes can be enabled via `FUN_WITH_RUST` (see [../rust/](../rust/)).
## Embedding from C ## Embedding from C
While the exact API surface may evolve, a typical embedding flow looks like: While the exact API surface may evolve, a typical embedding flow looks like:
@ -33,7 +33,7 @@ While the exact API surface may evolve, a typical embedding flow looks like:
4. Execute entry function or script body. 4. Execute entry function or script body.
5. Retrieve results and clean up. 5. Retrieve results and clean up.
See [src/vm/core](../src/vm/core/) and related headers for public entry points and value types. See [https://git.xw3.org/fun/fun/src/branch/main/src/](https://git.xw3.org/fun/fun/src/branch/main/src/){:class="git"} and related headers for public entry points and value types.
### Hosting considerations ### Hosting considerations
- Threading: share VM state cautiously or create one VM per thread. - Threading: share VM state cautiously or create one VM per thread.
@ -41,8 +41,8 @@ See [src/vm/core](../src/vm/core/) and related headers for public entry points a
- Errors: propagate parse/runtime errors back to the host with useful messages. - Errors: propagate parse/runtime errors back to the host with useful messages.
## Extending with Rust ## Extending with Rust
When `FUN_WITH_RUST=ON`, a Rust static library from [`src/rust/`](../src/rust/) is built and linked. You can: When `FUN_WITH_RUST=ON`, a Rust static library from [https://git.xw3.org/fun/fun/src/branch/main/src/rust](https://git.xw3.org/fun/fun/src/branch/main/src/rust){:class="git"} is built and linked. You can:
- Implement new opcodes/functions in Rust. - Implement new opcodes/functions in Rust.
- Expose a C ABI for the VM to call into. - Expose a C ABI for the VM to call into.
See [rust.md](./rust/) for details and example code. See [../rust/](../rust/) for details and example code.

View file

@ -27,7 +27,7 @@ This guide helps you understand common error messages and how to collect useful
- Runtime errors: type mismatches, out-of-range access, invalid operations. - Runtime errors: type mismatches, out-of-range access, invalid operations.
## Enabling diagnostics ## Enabling diagnostics
- Build with `-DFUN_DEBUG=ON` to enable additional assertions and debug messages (see [build.md](./build/)). - Build with `-DFUN_DEBUG=ON` to enable additional assertions and debug messages (see [build](./build/)).
- Run with smaller, focused scripts to isolate issues. - Run with smaller, focused scripts to isolate issues.
## Getting useful reports ## Getting useful reports

View file

@ -1,246 +0,0 @@
---
layout: page
published: true
noToc: false
noComments: false
noDate: false
title: Fun - Examples catalog and how to run them
subtitle: Catalog of all example scripts under ./examples/, what each area contains, how to run them, required env vars, and extension requirements.
description: Catalog of all example scripts under ./examples/, what each area contains, how to run them, required env vars, and extension requirements.
permalink: /documentation/examples/
lang: en
tags:
- area
- catalog
- contains
- env
- example
- examples
- extension
- required
- requirements
- run
- scripts
- them
- under
- vars
- what
---
This page is a practical catalog of the example areas that ship with the Fun language. It explains what youll find in each folder under ./examples/, how to run the scripts, and where deeper walkthroughs live.
If youre building/running from the repository without installing, set FUN_LIB_DIR to the local ./lib directory so examples can locate the stdlib:
- export FUN_LIB_DIR="./lib"
- Then run an example: ./build_debug/fun examples/basics/hello_world.fun
- Or, if installed: fun examples/basics/hello_world.fun
Notes
- Most scripts are selfdocumented with a short header comment at the top. Open them to see exact behavior and expected output.
- Some examples depend on optional extensions (cURL, PCRE2, SQLite, Notcurses, Tk, PC/SC, OpenSSL/LibreSSL). See documentation/external/ for enablement and availability.
- Networking examples often bind to 127.0.0.1 on high ports; read the file header for the exact port.
Deepdives
## Toplevel examples (./examples)
Quick micro demos covering language features and tiny utilities.
Run pattern:
- fun examples/<file>.fun
Highlights (selection):
- [builtins_extended.fun](./builtins_extended/) — tour of core builtins beyond the basics
- [byte_for_demo.fun](./byte_for_demo/) — iterating bytes with for
- [byte_overflow_try_catch.fun](./byte_overflow_try_catch/) — error handling on overflow
- [cast_demo.fun](./cast_demo/) — conversions and casting helpers
- [class_constructor.fun](./class_constructor/) — basic constructor usage and init patterns
- [class_test.fun](./class_test/) — small class feature checks
- [classes_demo.fun](classes_demo/) — class basics and usage
- [class_without_object.fun](./class_without_object/) — class features without an instance helper
- [cli_argv_dump.fun](./cli_argv_dump/) — prints argv/argc handling
- [conversions_showcase.fun](./conversions_showcase/) — numbers, strings, bytes conversions
- [cpp_add.fun](./cpp_add/) — calling into the optional C++ extension (if enabled)
- [datetime_basic.fun](./datetime_basic/) — minimal date/time helpers
- [datetime_extended.fun](./datetime_extended/) — richer date/time operations
- [datetime_timer.fun](datetime_timer/) — time/date helpers
- [echo_example.fun](./echo_example/) — simple echo of input/args
- [env_all.fun](./env_all/) — enumerate environment variables
- [os_env.fun](./os_env/) — reading environment variables
- [error_handling.fun](./error_handling/) — try/catch and error objects
- [try_catch_finally.fun](try_catch_finally/) — error patterns
- [expressions_test.fun](./expressions_test/) — precedence and grouping
- [features.fun](./features/) — grab bag of language features
- [file_print_for_file_line_by_line.fun](./file_print_for_file_line_by_line/) — iterate file content
- [floats.fun](./floats/) — float ops and formatting
- [for_range_test.fun](./for_range_test/) — ranges and loops
- [functions_test.fun](./functions_test/) — functions, closures, returns
- [have_fun.fun](./have_fun/) — playful starter demo
- [have_fun_function.fun](have_fun_function/) — playful demos
- [hex_example.fun](./hex_example/) — hex encode/decode
- [if_else_test.fun](./if_else_test/) — conditional branching examples
- [nested_loops.fun](./nested_loops/) — loops inside loops
- [loops_break_continue.fun](loops_break_continue/) — control flow
- [include_local.fun](./include_local/) — include a local file/module
- [include_lib.fun](./include_lib/) — include from the stdlib path
- [include_local_util.fun](include_local_util/) — include mechanics
- [inheritance_demo.fun](./inheritance_demo/) — simple class inheritance
- [maps.fun](./maps/), [match.fun](match/) — data structures and pattern matching
- [namespaced_mod.fun](./namespaced_mod/) — namespaced includes with as
- [objects_basic.fun](./objects_basic/) — simple objects and methods
- [objects_more.fun](./objects_more/) — OO basics
- [process_example.fun](./process_example/) — spawn and capture subprocess output
- [progress.fun](./progress/) — progress bar helper
- [progress_inline.fun](./progress_inline/) — simple progress displays
- [random_demo.fun](./random_demo/) — random helpers overview
- [random_number_example.fun](random_number_example/) — RNG usage
- [regex_demo.fun](./regex_demo/) — regex basics (PCRE2 when enabled)
- [regex_procedural.fun](./regex_procedural/) — regex helpers (PCRE2 when enabled)
- [rust_hello.fun](./rust_hello/), rust_hello_args*.fun — Rust opcodes (if FUN_WITH_RUST)
- [serial_demo.fun](./serial_demo/) — serial port usage
- [test_serial.fun](./test_serial/) — serial port (when available)
- [short_circuit_test.fun](./short_circuit_test/) — boolean evaluation order
- [signed_ints.fun](./signed_ints/) — signed integers overview
- [uint_types.fun](./uint_types/) — unsigned integers overview
- [types_integers.fun](./types_integers/) — integer families
- [stdlib_showcase.fun](./stdlib_showcase/) — sampler of common stdlib modules
- [strings_test.fun](./strings_test/) — string helpers and edge cases
- [tcp_http_get.fun](./tcp_http_get/) — simple HTTP GET over raw TCP
- [tcp_http_get_class.fun](./tcp_http_get_class/) — manual HTTP client over sockets
- [test_bits.fun](./test_bits/) — /rol/shl/xor/dec_to_hex/hex_to_dec bitwise utilities
- [thread_class_example.fun](./thread_class_example/) — define and run a thread class
- [threads_demo.fun](./threads_demo/) — threading building blocks
- [typeof.fun](./typeof/) — type inspection
- [typeof_features.fun](./typeof_features/) — type inspection of declared integer subtypes and runtime categories
- [type_safety.fun](./type_safety/) — static/dynamic type checks
- [type_safety_fails.fun](./type_safety_fails/) — static/dynamic type checks
- [types_overview.fun](./types_overview/) — language types tour
- [unix_socket_echo.fun](./unix_socket_echo/) — local domain socket echo demo
- [version.fun](./version/) — print VM/version info
- [while_test.fun](./while_test/) — simple while loop example
Tip: If a file name is listed above but not present on your build, it may depend on an extension you did not enable.
## Algorithms (./examples/algos)
- deduplicate.fun — removing duplicates from arrays/maps
- sort_and_search.fun — sorting and lookup patterns
- stack_queue.fun — basic stack and queue implementation
## Arrays (./examples/arrays)
- arrays.fun — create, index, slice; typical idioms
- arrays_iter.fun — iteration and enumeration
- arrays_advanced.fun — copying, filtering, transformations
## Basics (./examples/basics)
- boolean_decl.fun, booleans.fun — boolean values and operators
- builtins_conversions.fun — core builtins, type conversions
- collections.fun — arrays, maps, nested structures
- fibonacci.fun, fizzbuzz.fun — classic exercises
- hello_world.fun — the canonical first program
## CLI (./examples/cli)
- args_parse.fun — arguments parsing patterns for small CLIs
## Compose (./examples/compose)
Compositional patterns, small abstractions to combine behavior.
## Crypto (./examples/crypto)
Hashing and cryptographic helpers. Availability depends on whether OpenSSL/LibreSSL is enabled.
- openssl_md5.fun — MD5 via OpenSSL (if -DFUN_WITH_OPENSSL)
- libressl_md5.fun — MD5 via LibreSSL (if -DFUN_WITH_LIBRESSL)
- aes256.fun and hash samples if present on your build
## Data (./examples/data)
Static assets for example servers; not meant to be run directly.
- htdocumentation/ — files used by HTTP server examples (index.html, hello.fun, info.fun, form_post.fun, counter.fun, redirect.fun, json_like_api.fun)
## Error handling and diagnostics (./examples/error)
- debug_reporting.fun — enabling debug output and reading traces
- exit_example.fun — exit codes
- fail.fun — triggering and observing failures
- repl_on_error.fun — dropping into REPL on error
- rust_vm_access.fun — Rust opcode errors (if enabled)
- test_indent.fun — parser/indentation corner cases
- try_catch_with_error.fun — capturing error objects
## Extra integrations (./examples/extra)
These require optional external libraries. See documentation/external/.
- curl_* — cURL HTTP client examples (download, GET JSON, POST)
- ini_* — parsing INI files (simple to complex)
- json_showcase.fun — JSON helpers
- libsql_example.fun — libSQL client usage
- notcurses_* — rich TUI demos (if Notcurses enabled)
- pcre2_* — PCRE2 regex engine demos
- pcsc*.fun — smart card access via PC/SC
- sqlite_example.fun — SQLite usage
- tcp_echo_server*.fun — basic TCP echo server
- tk_* — Tcl/Tk GUI examples
- xml_* — XML parsing with libxml2
## Interactive (./examples/interactive)
- console_prompt.fun — simple prompt loop
- input_example.fun — reading user input
- input_hidden_example.fun, input_hidden_pam_auth.fun — hidden input/passwords
## IO (./examples/io)
- async_http_client.fun — nonblocking HTTP client
- await_http_client.fun — nonblocking HTTP client using lib/async/scheduler.fun (await-style helpers)
- csv_reader.fun — parse CSV files
- file_io.fun, read_write_file.fun — file operations
- word_count.fun — classic WC example
## Math (./examples/math)
Small, focused math helpers and demonstrations:
- math_ceil, math_floor, math_round, math_trunc, math_sign
- math_cos, math_sin, math_tan
- math_sqrt, math_isqrt
- math_exp_log
- math_fmin_fmax
- math_gcd_lcm
## Networking (./examples/net)
Servers and socket utilities. See documentation/examples/net/httpserver.md for the HTTP family.
- HTTP servers: [httpserver.md](./net/httpserver/) — endtoend walkthrough of all HTTP server variants in examples/net/
- http_static_server.fun — minimal static server over sockets
- http_server.fun — blocking static/CGI dispatcher using lib/net/http_server.fun
- http_server_cgi.fun — blocking server with CGI via lib/net/http_cgi_server.fun
- http_server_cgi_lib.fun — blocking server leveraging net/cgi.fun helpers
- http_mt_server.fun — threadperconnection static server
- http_mt_server_cgi.fun — threadperconnection with CGI support
## Patterns (./examples/patterns)
Small idioms and reusable patterns.
- assert_like.fun — assertstyle checks via language constructs
## Snippets (./examples/snippets)
Miscellaneous oneoff code snippets demonstrating particular opcodes or tricks.
## SQLite daemon (./examples/sqlited)
- Files related to running a small SQLitebacked service (see source for details)
## Strings (./examples/strings)
- base64_demo.fun — base64 encode/decode using encoding/base64
- split_join_trim.fun — string splitting and trimming
- templating_min.fun — barebones templating
- urlencode_decode.fun — percentencoding helpers
## Broken (./examples/broken)
Historical or intentionally broken examples kept for reference/regression.
- notcurses_* — experiments around Notcurses
- ripemd160* — legacy or experimental hash routines
### Running examples reliably
Prefer the local build when running from the repository root:
- ./build_debug/fun <path/to/example.fun>
- or: ./build_release/fun <path/to/example.fun>
Set up env if needed:
- export FUN_LIB_DIR="./lib" # to find stdlib
- export FUN_EXEC="./build_debug/fun" # used by CGI examples
- export FUN_HTDOCS="./examples/data/htdocs" # override docroot
When optional extensions are not enabled, their examples will not run; reconfigure the build with the required -D flags shown in documentation/external/.

View file

@ -1,28 +0,0 @@
---
layout: page
published: true
noToc: false
noComments: false
noDate: false
title: Fun - builtins_extended.fun — overview
subtitle: Documentation for builtins_extended.fun — overview
description: Documentation for builtins_extended.fun — overview
permalink: /documentation/examples/builtins_extended/
lang: en
tags:
- builtins_extended
- example
---
What it shows
- A tour of core builtins beyond the basics: printing, typing, math helpers, conversions, and utility functions commonly used in small scripts.
How to run
- From repo root with local build:
- export FUN_LIB_DIR="./lib"
- ./build_debug/fun examples/builtins_extended.fun
- Or, if installed: fun examples/builtins_extended.fun
Notes
- Exact behavior and outputs are documented inline at the top of the script; open the .fun file for details.

View file

@ -1,27 +0,0 @@
---
layout: page
published: true
noToc: false
noComments: false
noDate: false
title: Fun - builtins_maps_and_more.fun — overview
subtitle: Documentation for builtins_maps_and_more.fun — overview
description: Documentation for builtins_maps_and_more.fun — overview
permalink: /documentation/examples/builtins_maps_and_more/
lang: en
tags:
- builtins_maps_and_more
- example
---
What it shows
- Exploring builtins while working with maps and related data structures.
How to run
- export FUN_LIB_DIR="./lib"
- ./build_debug/fun examples/builtins_maps_and_more.fun
- Or: fun examples/builtins_maps_and_more.fun
Notes
- Open the .fun file to see the exact behaviors and printed output.

View file

@ -1,24 +0,0 @@
---
layout: page
published: true
noToc: false
noComments: false
noDate: false
title: Fun - byte_for_demo.fun — overview
subtitle: Documentation for byte_for_demo.fun — overview
description: Documentation for byte_for_demo.fun — overview
permalink: /documentation/examples/byte_for_demo/
lang: en
tags:
- byte_for_demo
- example
---
What it shows
- Iterating bytes with a for-loop; indexing and printing byte values.
How to run
- export FUN_LIB_DIR="./lib"
- ./build_debug/fun examples/byte_for_demo.fun
- Or: fun examples/byte_for_demo.fun

View file

@ -1,24 +0,0 @@
---
layout: page
published: true
noToc: false
noComments: false
noDate: false
title: Fun - byte_overflow_try_catch.fun — overview
subtitle: Documentation for byte_overflow_try_catch.fun — overview
description: Documentation for byte_overflow_try_catch.fun — overview
permalink: /documentation/examples/byte_overflow_try_catch/
lang: en
tags:
- byte_overflow_try_catch
- example
---
What it shows
- Error handling around byte/integer overflow using try/catch.
How to run
- export FUN_LIB_DIR="./lib"
- ./build_debug/fun examples/byte_overflow_try_catch.fun
- Or: fun examples/byte_overflow_try_catch.fun

View file

@ -1,24 +0,0 @@
---
layout: page
published: true
noToc: false
noComments: false
noDate: false
title: Fun - cast_demo.fun — overview
subtitle: Documentation for cast_demo.fun — overview
description: Documentation for cast_demo.fun — overview
permalink: /documentation/examples/cast_demo/
lang: en
tags:
- cast_demo
- example
---
What it shows
- Conversions and casting helpers; demonstrates changing between numeric and string types safely.
How to run
- export FUN_LIB_DIR="./lib"
- ./build_debug/fun examples/cast_demo.fun
- Or: fun examples/cast_demo.fun

View file

@ -1,24 +0,0 @@
---
layout: page
published: true
noToc: false
noComments: false
noDate: false
title: Fun - class_constructor.fun — overview
subtitle: Documentation for class_constructor.fun — overview
description: Documentation for class_constructor.fun — overview
permalink: /documentation/examples/class_constructor/
lang: en
tags:
- class_constructor
- example
---
What it shows
- Class basics and constructor behavior; initializing fields and using methods.
How to run
- export FUN_LIB_DIR="./lib"
- ./build_debug/fun examples/class_constructor.fun
- Or: fun examples/class_constructor.fun

View file

@ -1,27 +0,0 @@
---
layout: page
published: true
noToc: false
noComments: false
noDate: false
title: Fun - class_test.fun — overview
subtitle: Documentation for class_test.fun — overview
description: Documentation for class_test.fun — overview
permalink: /documentation/examples/class_test/
lang: en
tags:
- class_test
- example
---
What it shows
- Simple class usage and method invocation; small sanity checks around classes.
How to run
- export FUN_LIB_DIR="./lib"
- ./build_debug/fun examples/class_test.fun
- Or: fun examples/class_test.fun
Notes
- Open the script to see the exact behavior and outputs.

View file

@ -1,24 +0,0 @@
---
layout: page
published: true
noToc: false
noComments: false
noDate: false
title: Fun - class_without_object.fun — overview
subtitle: Documentation for class_without_object.fun — overview
description: Documentation for class_without_object.fun — overview
permalink: /documentation/examples/class_without_object/
lang: en
tags:
- class_without_object
- example
---
What it shows
- Class features that can be used without creating an instance (static-like usage patterns).
How to run
- export FUN_LIB_DIR="./lib"
- ./build_debug/fun examples/class_without_object.fun
- Or: fun examples/class_without_object.fun

View file

@ -1,24 +0,0 @@
---
layout: page
published: true
noToc: false
noComments: false
noDate: false
title: Fun - classes_demo.fun — overview
subtitle: Documentation for classes_demo.fun — overview
description: Documentation for classes_demo.fun — overview
permalink: /documentation/examples/classes_demo/
lang: en
tags:
- classes_demo
- example
---
What it shows
- Class basics and usage: defining classes, instantiating objects, calling methods.
How to run
- export FUN_LIB_DIR="./lib"
- ./build_debug/fun examples/classes_demo.fun
- Or: fun examples/classes_demo.fun

View file

@ -1,24 +0,0 @@
---
layout: page
published: true
noToc: false
noComments: false
noDate: false
title: Fun - cli_argv_dump.fun — overview
subtitle: Documentation for cli_argv_dump.fun — overview
description: Documentation for cli_argv_dump.fun — overview
permalink: /documentation/examples/cli_argv_dump/
lang: en
tags:
- cli_argv_dump
- example
---
What it shows
- Prints argv/argc handling to demonstrate CLI arguments parsing at a low level.
How to run
- export FUN_LIB_DIR="./lib"
- ./build_debug/fun examples/cli_argv_dump.fun --foo bar 123
- Or: fun examples/cli_argv_dump.fun --foo bar 123

View file

@ -1,24 +0,0 @@
---
layout: page
published: true
noToc: false
noComments: false
noDate: false
title: Fun - conversions_showcase.fun — overview
subtitle: Documentation for conversions_showcase.fun — overview
description: Documentation for conversions_showcase.fun — overview
permalink: /documentation/examples/conversions_showcase/
lang: en
tags:
- conversions_showcase
- example
---
What it shows
- Numbers, strings, and bytes conversions; typical idioms and edge cases.
How to run
- export FUN_LIB_DIR="./lib"
- ./build_debug/fun examples/conversions_showcase.fun
- Or: fun examples/conversions_showcase.fun

View file

@ -1,27 +0,0 @@
---
layout: page
published: true
noToc: false
noComments: false
noDate: false
title: Fun - cpp_add.fun — overview
subtitle: Documentation for cpp_add.fun — overview
description: Documentation for cpp_add.fun — overview
permalink: /documentation/examples/cpp_add/
lang: en
tags:
- cpp_add
- example
---
What it shows
- Calling into the optional C++ extension from Fun.
How to run
- export FUN_LIB_DIR="./lib"
- ./build_debug/fun examples/cpp_add.fun
- Or: fun examples/cpp_add.fun
Notes
- Requires the optional C++ extension to be enabled in your build; otherwise this example may be unavailable.

View file

@ -1,33 +0,0 @@
---
layout: page
published: true
noToc: false
noComments: false
noDate: false
title: Fun - counter.fun (CGI)
subtitle: Documentation for counter.fun (CGI)
description: Documentation for counter.fun (CGI)
permalink: /documentation/examples/data/htdocumentation/counter/
lang: en
tags:
- cgi
- counter
- example
---
- Location: examples/data/htdocumentation/counter.fun
- Category: CGI script used by HTTP server examples
Description
- Simple stateful counter example for CGI; demonstrates reading and updating a value across requests (implementation details in script).
How to run
- Through one of the HTTP server examples, e.g.:
- export FUN_LIB_DIR="./lib"
- export FUN_EXEC="./build_debug/fun"
- ./build_debug/fun examples/net/http_server_cgi.fun
- Open: http://127.0.0.1:8080/counter.fun
See also
- documentation/examples/httpserver.md (deep-dive)

View file

@ -1,33 +0,0 @@
---
layout: page
published: true
noToc: false
noComments: false
noDate: false
title: Fun - form_post.fun (CGI)
subtitle: Documentation for form_post.fun (CGI)
description: Documentation for form_post.fun (CGI)
permalink: /documentation/examples/data/htdocumentation/form_post/
lang: en
tags:
- cgi
- example
- form_post
---
- Location: examples/data/htdocumentation/form_post.fun
- Category: CGI script used by HTTP server examples
Description
- Demonstrates handling of POST form data via the CGI interface.
How to run
- Through one of the HTTP server examples, e.g.:
- export FUN_LIB_DIR="./lib"
- export FUN_EXEC="./build_debug/fun"
- ./build_debug/fun examples/net/http_server_cgi.fun
- Submit a form to: http://127.0.0.1:8080/form_post.fun
See also
- documentation/examples/httpserver.md (deep-dive)

View file

@ -1,33 +0,0 @@
---
layout: page
published: true
noToc: false
noComments: false
noDate: false
title: Fun - hello.fun (CGI)
subtitle: Documentation for hello.fun (CGI)
description: Documentation for hello.fun (CGI)
permalink: /documentation/examples/data/htdocumentation/hello/
lang: en
tags:
- cgi
- example
- hello
---
- Location: examples/data/htdocumentation/hello.fun
- Category: CGI script used by HTTP server examples
Description
- Simple CGI .fun script that prints a greeting, optionally using query parameters (e.g., ?name=Fun).
How to run
- Through one of the HTTP server examples, e.g.:
- export FUN_LIB_DIR="./lib"
- export FUN_EXEC="./build_debug/fun"
- ./build_debug/fun examples/net/http_server_cgi.fun
- Open: http://127.0.0.1:8080/hello.fun?name=Fun
See also
- documentation/examples/httpserver.md (deep-dive)

View file

@ -1,33 +0,0 @@
---
layout: page
published: true
noToc: false
noComments: false
noDate: false
title: Fun - info.fun (CGI)
subtitle: Documentation for info.fun (CGI)
description: Documentation for info.fun (CGI)
permalink: /documentation/examples/data/htdocumentation/info/
lang: en
tags:
- cgi
- example
- info
---
- Location: examples/data/htdocumentation/info.fun
- Category: CGI script used by HTTP server examples
Description
- CGI script that prints request/environment information, useful for debugging CGI variables.
How to run
- Through one of the HTTP server examples, e.g.:
- export FUN_LIB_DIR="./lib"
- export FUN_EXEC="./build_debug/fun"
- ./build_debug/fun examples/net/http_server_cgi.fun
- Open: http://127.0.0.1:8080/info.fun
See also
- documentation/examples/httpserver.md (deep-dive)

View file

@ -1,33 +0,0 @@
---
layout: page
published: true
noToc: false
noComments: false
noDate: false
title: Fun - json_like_api.fun (CGI)
subtitle: Documentation for json_like_api.fun (CGI)
description: Documentation for json_like_api.fun (CGI)
permalink: /documentation/examples/data/htdocumentation/json_like_api/
lang: en
tags:
- cgi
- example
- json_like_api
---
- Location: examples/data/htdocumentation/json_like_api.fun
- Category: CGI script used by HTTP server examples
Description
- Demonstrates returning JSON-like output from a CGI endpoint.
How to run
- Through one of the HTTP server examples, e.g.:
- export FUN_LIB_DIR="./lib"
- export FUN_EXEC="./build_debug/fun"
- ./build_debug/fun examples/net/http_server_cgi.fun
- Open: http://127.0.0.1:8080/json_like_api.fun
See also
- documentation/examples/httpserver.md (deep-dive)

View file

@ -1,33 +0,0 @@
---
layout: page
published: true
noToc: false
noComments: false
noDate: false
title: Fun - redirect.fun (CGI)
subtitle: Documentation for redirect.fun (CGI)
description: Documentation for redirect.fun (CGI)
permalink: /documentation/examples/data/htdocumentation/redirect/
lang: en
tags:
- cgi
- example
- redirect
---
- Location: examples/data/htdocumentation/redirect.fun
- Category: CGI script used by HTTP server examples
Description
- Demonstrates issuing HTTP redirects from a CGI script (setting Status and Location headers).
How to run
- Through one of the HTTP server examples, e.g.:
- export FUN_LIB_DIR="./lib"
- export FUN_EXEC="./build_debug/fun"
- ./build_debug/fun examples/net/http_server_cgi.fun
- Open: http://127.0.0.1:8080/redirect.fun
See also
- documentation/examples/httpserver.md (deep-dive)

View file

@ -1,24 +0,0 @@
---
layout: page
published: true
noToc: false
noComments: false
noDate: false
title: Fun - datetime_basic.fun — overview
subtitle: Documentation for datetime_basic.fun — overview
description: Documentation for datetime_basic.fun — overview
permalink: /documentation/examples/datetime_basic/
lang: en
tags:
- datetime_basic
- example
---
What it shows
- Basic time/date helpers and formatting.
How to run
- export FUN_LIB_DIR="./lib"
- ./build_debug/fun examples/datetime_basic.fun
- Or: fun examples/datetime_basic.fun

View file

@ -1,24 +0,0 @@
---
layout: page
published: true
noToc: false
noComments: false
noDate: false
title: Fun - datetime_extended.fun — overview
subtitle: Documentation for datetime_extended.fun — overview
description: Documentation for datetime_extended.fun — overview
permalink: /documentation/examples/datetime_extended/
lang: en
tags:
- datetime_extended
- example
---
What it shows
- Extended datetime helpers: parsing, arithmetic, timers, and formatting variants.
How to run
- export FUN_LIB_DIR="./lib"
- ./build_debug/fun examples/datetime_extended.fun
- Or: fun examples/datetime_extended.fun

View file

@ -1,24 +0,0 @@
---
layout: page
published: true
noToc: false
noComments: false
noDate: false
title: Fun - datetime_timer.fun — overview
subtitle: Documentation for datetime_timer.fun — overview
description: Documentation for datetime_timer.fun — overview
permalink: /documentation/examples/datetime_timer/
lang: en
tags:
- datetime_timer
- example
---
What it shows
- Measuring elapsed time and simple timers using datetime helpers.
How to run
- export FUN_LIB_DIR="./lib"
- ./build_debug/fun examples/datetime_timer.fun
- Or: fun examples/datetime_timer.fun

View file

@ -1,24 +0,0 @@
---
layout: page
published: true
noToc: false
noComments: false
noDate: false
title: Fun - echo_example.fun — overview
subtitle: Documentation for echo_example.fun — overview
description: Documentation for echo_example.fun — overview
permalink: /documentation/examples/echo_example/
lang: en
tags:
- echo_example
- example
---
What it shows
- Simple echo of input/args; prints back what you type or pass as arguments.
How to run
- export FUN_LIB_DIR="./lib"
- ./build_debug/fun examples/echo_example.fun hello world
- Or: fun examples/echo_example.fun hello world

View file

@ -1,24 +0,0 @@
---
layout: page
published: true
noToc: false
noComments: false
noDate: false
title: Fun - env_all.fun — overview
subtitle: Documentation for env_all.fun — overview
description: Documentation for env_all.fun — overview
permalink: /documentation/examples/env_all/
lang: en
tags:
- env_all
- example
---
What it shows
- Reading and listing environment variables.
How to run
- export FUN_LIB_DIR="./lib"
- ./build_debug/fun examples/env_all.fun
- Or: fun examples/env_all.fun

View file

@ -1,24 +0,0 @@
---
layout: page
published: true
noToc: false
noComments: false
noDate: false
title: Fun - error_handling.fun — overview
subtitle: Documentation for error_handling.fun — overview
description: Documentation for error_handling.fun — overview
permalink: /documentation/examples/error_handling/
lang: en
tags:
- error_handling
- example
---
What it shows
- Error patterns and handling strategies using try/catch/finally.
How to run
- export FUN_LIB_DIR="./lib"
- ./build_debug/fun examples/error_handling.fun
- Or: fun examples/error_handling.fun

View file

@ -28,7 +28,7 @@ All commands assume you are in the repository root.
## Prerequisites ## Prerequisites
- Build the interpreter (see handbook.md). Youll have `build/fun` (paths may vary by your setup/IDE). - Build the interpreter (see handbook/). Youll have `build/fun` (paths may vary by your setup/IDE).
- Set FUN_LIB_DIR to the repos lib directory when running without installation so `#include <...>` can find the standard library. - Set FUN_LIB_DIR to the repos lib directory when running without installation so `#include <...>` can find the standard library.
Example (Linux/macOS/BSD): Example (Linux/macOS/BSD):

View file

@ -1,24 +0,0 @@
---
layout: page
published: true
noToc: false
noComments: false
noDate: false
title: Fun - expressions_test.fun — overview
subtitle: Documentation for expressions_test.fun — overview
description: Documentation for expressions_test.fun — overview
permalink: /documentation/examples/expressions_test/
lang: en
tags:
- example
- expressions_test
---
What it shows
- Operator precedence and expression grouping tests/demonstrations.
How to run
- export FUN_LIB_DIR="./lib"
- ./build_debug/fun examples/expressions_test.fun
- Or: fun examples/expressions_test.fun

View file

@ -1,24 +0,0 @@
---
layout: page
published: true
noToc: false
noComments: false
noDate: false
title: Fun - features.fun — overview
subtitle: Documentation for features.fun — overview
description: Documentation for features.fun — overview
permalink: /documentation/examples/features/
lang: en
tags:
- example
- features
---
What it shows
- Grab bag of language features in a single script.
How to run
- export FUN_LIB_DIR="./lib"
- ./build_debug/fun examples/features.fun
- Or: fun examples/features.fun

View file

@ -1,24 +0,0 @@
---
layout: page
published: true
noToc: false
noComments: false
noDate: false
title: Fun - file_print_for_file_line_by_line.fun — overview
subtitle: Documentation for file_print_for_file_line_by_line.fun — overview
description: Documentation for file_print_for_file_line_by_line.fun — overview
permalink: /documentation/examples/file_print_for_file_line_by_line/
lang: en
tags:
- example
- file_print_for_file_line_by_line
---
What it shows
- Iterate a file line-by-line and print each line; basic file IO idioms.
How to run
- export FUN_LIB_DIR="./lib"
- ./build_debug/fun examples/file_print_for_file_line_by_line.fun path/to/file.txt
- Or: fun examples/file_print_for_file_line_by_line.fun path/to/file.txt

View file

@ -1,24 +0,0 @@
---
layout: page
published: true
noToc: false
noComments: false
noDate: false
title: Fun - floats.fun — overview
subtitle: Documentation for floats.fun — overview
description: Documentation for floats.fun — overview
permalink: /documentation/examples/floats/
lang: en
tags:
- example
- floats
---
What it shows
- Floating point operations and formatting details.
How to run
- export FUN_LIB_DIR="./lib"
- ./build_debug/fun examples/floats.fun
- Or: fun examples/floats.fun

View file

@ -1,24 +0,0 @@
---
layout: page
published: true
noToc: false
noComments: false
noDate: false
title: Fun - for_range_test.fun — overview
subtitle: Documentation for for_range_test.fun — overview
description: Documentation for for_range_test.fun — overview
permalink: /documentation/examples/for_range_test/
lang: en
tags:
- example
- for_range_test
---
What it shows
- Ranges and loops; iterating numeric ranges and verifying bounds.
How to run
- export FUN_LIB_DIR="./lib"
- ./build_debug/fun examples/for_range_test.fun
- Or: fun examples/for_range_test.fun

View file

@ -1,24 +0,0 @@
---
layout: page
published: true
noToc: false
noComments: false
noDate: false
title: Fun - functions_test.fun — overview
subtitle: Documentation for functions_test.fun — overview
description: Documentation for functions_test.fun — overview
permalink: /documentation/examples/functions_test/
lang: en
tags:
- example
- functions_test
---
What it shows
- Functions, closures, and return behavior; call semantics basics.
How to run
- export FUN_LIB_DIR="./lib"
- ./build_debug/fun examples/functions_test.fun
- Or: fun examples/functions_test.fun

View file

@ -1,24 +0,0 @@
---
layout: page
published: true
noToc: false
noComments: false
noDate: false
title: Fun - have_fun.fun — overview
subtitle: Documentation for have_fun.fun — overview
description: Documentation for have_fun.fun — overview
permalink: /documentation/examples/have_fun/
lang: en
tags:
- example
- have_fun
---
What it shows
- Playful demo showing off small language tricks.
How to run
- export FUN_LIB_DIR="./lib"
- ./build_debug/fun examples/have_fun.fun
- Or: fun examples/have_fun.fun

View file

@ -1,24 +0,0 @@
---
layout: page
published: true
noToc: false
noComments: false
noDate: false
title: Fun - have_fun_function.fun — overview
subtitle: Documentation for have_fun_function.fun — overview
description: Documentation for have_fun_function.fun — overview
permalink: /documentation/examples/have_fun_function/
lang: en
tags:
- example
- have_fun_function
---
What it shows
- A playful function-centric demo; small utility behaviors.
How to run
- export FUN_LIB_DIR="./lib"
- ./build_debug/fun examples/have_fun_function.fun
- Or: fun examples/have_fun_function.fun

View file

@ -1,24 +0,0 @@
---
layout: page
published: true
noToc: false
noComments: false
noDate: false
title: Fun - hex_example.fun — overview
subtitle: Documentation for hex_example.fun — overview
description: Documentation for hex_example.fun — overview
permalink: /documentation/examples/hex_example/
lang: en
tags:
- example
- hex_example
---
What it shows
- Hex encode/decode helpers; working with hexadecimal representations.
How to run
- export FUN_LIB_DIR="./lib"
- ./build_debug/fun examples/hex_example.fun
- Or: fun examples/hex_example.fun

View file

@ -1,24 +0,0 @@
---
layout: page
published: true
noToc: false
noComments: false
noDate: false
title: Fun - if_else_test.fun — overview
subtitle: Documentation for if_else_test.fun — overview
description: Documentation for if_else_test.fun — overview
permalink: /documentation/examples/if_else_test/
lang: en
tags:
- example
- if_else_test
---
What it shows
- Control flow with if/else; branching and comparisons.
How to run
- export FUN_LIB_DIR="./lib"
- ./build_debug/fun examples/if_else_test.fun
- Or: fun examples/if_else_test.fun

View file

@ -1,24 +0,0 @@
---
layout: page
published: true
noToc: false
noComments: false
noDate: false
title: Fun - include_lib.fun — overview
subtitle: Documentation for include_lib.fun — overview
description: Documentation for include_lib.fun — overview
permalink: /documentation/examples/include_lib/
lang: en
tags:
- example
- include_lib
---
What it shows
- Including modules from the standard library path using #include <...>.
How to run
- export FUN_LIB_DIR="./lib" # ensure stdlib is discoverable
- ./build_debug/fun examples/include_lib.fun
- Or: fun examples/include_lib.fun

View file

@ -1,24 +0,0 @@
---
layout: page
published: true
noToc: false
noComments: false
noDate: false
title: Fun - include_local.fun — overview
subtitle: Documentation for include_local.fun — overview
description: Documentation for include_local.fun — overview
permalink: /documentation/examples/include_local/
lang: en
tags:
- example
- include_local
---
What it shows
- Including local files relative to the script and reusing helpers.
How to run
- export FUN_LIB_DIR="./lib"
- ./build_debug/fun examples/include_local.fun
- Or: fun examples/include_local.fun

View file

@ -1,24 +0,0 @@
---
layout: page
published: true
noToc: false
noComments: false
noDate: false
title: Fun - include_local_util.fun — overview
subtitle: Documentation for include_local_util.fun — overview
description: Documentation for include_local_util.fun — overview
permalink: /documentation/examples/include_local_util/
lang: en
tags:
- example
- include_local_util
---
What it shows
- Local include mechanics with a small utility module.
How to run
- export FUN_LIB_DIR="./lib"
- ./build_debug/fun examples/include_local_util.fun
- Or: fun examples/include_local_util.fun

View file

@ -1,24 +0,0 @@
---
layout: page
published: true
noToc: false
noComments: false
noDate: false
title: Fun - inheritance_demo.fun — overview
subtitle: Documentation for inheritance_demo.fun — overview
description: Documentation for inheritance_demo.fun — overview
permalink: /documentation/examples/inheritance_demo/
lang: en
tags:
- example
- inheritance_demo
---
What it shows
- Simple class inheritance and method overriding examples.
How to run
- export FUN_LIB_DIR="./lib"
- ./build_debug/fun examples/inheritance_demo.fun
- Or: fun examples/inheritance_demo.fun

View file

@ -1,24 +0,0 @@
---
layout: page
published: true
noToc: false
noComments: false
noDate: false
title: Fun - loops_break_continue.fun — overview
subtitle: Documentation for loops_break_continue.fun — overview
description: Documentation for loops_break_continue.fun — overview
permalink: /documentation/examples/loops_break_continue/
lang: en
tags:
- example
- loops_break_continue
---
What it shows
- Loop control: break and continue; demonstrating control flow within loops.
How to run
- export FUN_LIB_DIR="./lib"
- ./build_debug/fun examples/loops_break_continue.fun
- Or: fun examples/loops_break_continue.fun

View file

@ -1,31 +0,0 @@
---
layout: page
published: true
noToc: false
noComments: false
noDate: false
title: Fun - maps.fun — overview
subtitle: Working with maps, construction, lookup/update, merging, iteration, and common patterns.
description: Working with maps, construction, lookup/update, merging, iteration, and common patterns.
permalink: /documentation/examples/maps/
lang: en
tags:
- common
- construction
- example
- iteration
- lookup
- maps
- merging
- patterns
- update
---
What it shows
- Working with maps: creation, indexing, iteration, and typical idioms.
How to run
- export FUN_LIB_DIR="./lib"
- ./build_debug/fun examples/maps.fun
- Or: fun examples/maps.fun

View file

@ -1,24 +0,0 @@
---
layout: page
published: true
noToc: false
noComments: false
noDate: false
title: Fun - match.fun — overview
subtitle: Documentation for match.fun — overview
description: Documentation for match.fun — overview
permalink: /documentation/examples/match/
lang: en
tags:
- example
- match
---
What it shows
- Pattern matching constructs and examples of branching by value/shape.
How to run
- export FUN_LIB_DIR="./lib"
- ./build_debug/fun examples/match.fun
- Or: fun examples/match.fun

View file

@ -1,24 +0,0 @@
---
layout: page
published: true
noToc: false
noComments: false
noDate: false
title: Fun - namespaced_mod.fun — overview
subtitle: Documentation for namespaced_mod.fun — overview
description: Documentation for namespaced_mod.fun — overview
permalink: /documentation/examples/namespaced_mod/
lang: en
tags:
- example
- namespaced_mod
---
What it shows
- Namespaced includes and using the "as" aliasing pattern for modules.
How to run
- export FUN_LIB_DIR="./lib"
- ./build_debug/fun examples/namespaced_mod.fun
- Or: fun examples/namespaced_mod.fun

View file

@ -1,24 +0,0 @@
---
layout: page
published: true
noToc: false
noComments: false
noDate: false
title: Fun - nested_loops.fun — overview
subtitle: Documentation for nested_loops.fun — overview
description: Documentation for nested_loops.fun — overview
permalink: /documentation/examples/nested_loops/
lang: en
tags:
- example
- nested_loops
---
What it shows
- Control flow with nested loops; inner/outer loop coordination.
How to run
- export FUN_LIB_DIR="./lib"
- ./build_debug/fun examples/nested_loops.fun
- Or: fun examples/nested_loops.fun

View file

@ -1,36 +0,0 @@
---
layout: page
published: true
noToc: false
noComments: false
noDate: false
title: Fun - http_mt_server.fun
subtitle: Documentation for http_mt_server.fun
description: Documentation for http_mt_server.fun
permalink: /documentation/examples/net/http_mt_server/
lang: en
tags:
- example
- http_mt_server
- network
---
- Location: examples/net/http_mt_server.fun
- Category: Networking / HTTP (multi-threaded)
Description
- Thread-per-connection HTTP server built on io/socket.fun and io/thread.fun. For each accepted client, spawns a thread and returns a small HTML page.
How to run
- From the repository root:
- export FUN_LIB_DIR="./lib"
- ./build_debug/fun examples/net/http_mt_server.fun
- Then open http://127.0.0.1:8080/ (or the port printed on start)
Requirements
- Uses stdlib io/socket.fun and io/thread.fun. No external extensions required.
See also
- documentation/examples/README.md
- documentation/examples/httpserver.md (deep-dive)

View file

@ -1,38 +0,0 @@
---
layout: page
published: true
noToc: false
noComments: false
noDate: false
title: Fun - http_mt_server_cgi.fun
subtitle: Documentation for http_mt_server_cgi.fun
description: Documentation for http_mt_server_cgi.fun
permalink: /documentation/examples/net/http_mt_server_cgi/
lang: en
tags:
- example
- http_mt_server_cgi
- network
---
- Location: examples/net/http_mt_server_cgi.fun
- Category: Networking / HTTP with CGI (multi-threaded)
Description
- Multi-threaded HTTP server (thread-per-connection) with CGI support. Serves static files from htdocs and executes .fun scripts as CGI using net/cgi.fun helpers.
How to run
- From the repository root:
- export FUN_LIB_DIR="./lib"
- export FUN_EXEC="./build_debug/fun" # optional; auto-detected if omitted
- export FUN_HTDOCS="./examples/data/htdocs" # optional
- ./build_debug/fun examples/net/http_mt_server_cgi.fun
- Try: http://127.0.0.1:8080/ and /hello.fun?name=Fun, /info.fun
Requirements
- Uses stdlib io/socket.fun, io/thread.fun, and net/cgi.fun. No external extensions required.
See also
- documentation/examples/README.md
- documentation/examples/httpserver.md (deep-dive)

View file

@ -1,40 +0,0 @@
---
layout: page
published: true
noToc: false
noComments: false
noDate: false
title: Fun - http_server.fun
subtitle: Documentation for http_server.fun
description: Documentation for http_server.fun
permalink: /documentation/examples/net/http_server/
lang: en
tags:
- example
- http_server
- network
---
- Location: examples/net/http_server.fun
- Category: Networking / HTTP (blocking)
Description
- Blocking HTTP server that serves static files and executes .fun CGI scripts via lib/net/http_server.fun.
How to run
- From the repository root:
- export FUN_LIB_DIR="./lib"
- ./build_debug/fun examples/net/http_server.fun
- Default docroot: ./examples/data/htdocs
- Visit: http://127.0.0.1:8080/
Notes
- For CGI .fun under htdocs, the server uses the Fun interpreter to execute them and forwards output as HTTP.
Requirements
- Uses io/socket.fun and strings.fun; no external extensions required.
See also
- documentation/examples/README.md
- documentation/examples/httpserver.md (deep-dive)

View file

@ -1,38 +0,0 @@
---
layout: page
published: true
noToc: false
noComments: false
noDate: false
title: Fun - http_server_cgi.fun
subtitle: Documentation for http_server_cgi.fun
description: Documentation for http_server_cgi.fun
permalink: /documentation/examples/net/http_server_cgi/
lang: en
tags:
- example
- http_server_cgi
- network
---
- Location: examples/net/http_server_cgi.fun
- Category: Networking / HTTP with CGI (blocking)
Description
- Minimal CGI-capable HTTP server (blocking) using lib/net/http_cgi_server.fun. Serves static files and executes .fun scripts as CGI.
How to run
- From the repository root:
- export FUN_LIB_DIR="./lib"
- export FUN_EXEC="./build_debug/fun" # optional; auto-detected if omitted
- export FUN_HTDOCS="./examples/data/htdocs" # optional
- ./build_debug/fun examples/net/http_server_cgi.fun
- Try: http://127.0.0.1:8080/ and /hello.fun, /info.fun
Requirements
- Uses stdlib io/socket.fun, strings.fun, and net/cgi.fun. No external extensions required.
See also
- documentation/examples/README.md
- documentation/examples/httpserver.md (deep-dive)

View file

@ -1,38 +0,0 @@
---
layout: page
published: true
noToc: false
noComments: false
noDate: false
title: Fun - http_server_cgi_lib.fun
subtitle: Documentation for http_server_cgi_lib.fun
description: Documentation for http_server_cgi_lib.fun
permalink: /documentation/examples/net/http_server_cgi_lib/
lang: en
tags:
- example
- http_server_cgi_lib
- network
---
- Location: examples/net/http_server_cgi_lib.fun
- Category: Networking / HTTP with CGI (blocking, stdlib helpers)
Description
- Blocking HTTP server that serves static files and runs .fun as CGI using helpers from lib/net/http_cgi_lib_server.fun and net/cgi.fun.
How to run
- From the repository root:
- export FUN_LIB_DIR="./lib"
- export FUN_EXEC="./build_debug/fun" # optional; auto-detected if omitted
- export FUN_HTDOCS="./examples/data/htdocs" # optional
- ./build_debug/fun examples/net/http_server_cgi_lib.fun
- Try: http://127.0.0.1:8080/ and /hello.fun, /info.fun
Requirements
- Uses stdlib io/socket.fun, strings.fun, net/cgi.fun. No external extensions required.
See also
- documentation/examples/README.md
- documentation/examples/httpserver.md (deep-dive)

View file

@ -1,36 +0,0 @@
---
layout: page
published: true
noToc: false
noComments: false
noDate: false
title: Fun - http_static_server.fun
subtitle: Documentation for http_static_server.fun
description: Documentation for http_static_server.fun
permalink: /documentation/examples/net/http_static_server/
lang: en
tags:
- example
- http_static_server
- network
---
- Location: examples/net/http_static_server.fun
- Category: Networking / Sockets
Description
- Minimal static HTTP server implemented directly on sockets. Accepts connections and always returns a small HTML page.
How to run
- From the repository root:
- export FUN_LIB_DIR="./lib"
- ./build_debug/fun examples/net/http_static_server.fun
- Then open http://127.0.0.1:8088/
Requirements
- Uses core IO/socket stdlib (io/socket.fun). No optional extensions required.
See also
- documentation/examples/README.md
- documentation/examples/httpserver.md (deep-dive over HTTP servers)

View file

@ -1,155 +0,0 @@
---
layout: page
published: true
noToc: false
noComments: false
noDate: false
title: Fun - HTTP server examples: architecture and how they work
subtitle: Documentation for HTTP server examples, architecture and how they work
description: Documentation for HTTP server examples, architecture and how they work
permalink: /documentation/examples/net/httpserver/
lang: en
tags:
- architecture
- example
- examples
- http
- network
- server
- they
- work
---
This guide explains the HTTP server examples under `./examples/net/http_*` and the supporting standard library modules under `./lib/net/`.
It covers what each example does, how to run it, and how the request handling/CGI pieces are implemented.
## Prerequisites
- Build the project so you have a `fun` executable, or ensure `fun` is on your PATH.
- Typical local builds: `./build_debug/fun` or `./build_release/fun`.
- For examples that serve files/CGI scripts, content is read from `./examples/data/htdocs` by default.
- Helpful env vars used by some examples:
- `FUN_LIB_DIR` — path to the stdlib (`./lib` when running from the repo).
- `FUN_EXEC` — override path to the `fun` interpreter used to run CGI children.
- `FUN_HTDOCS` — override htdocs directory for some examples (not all).
- `FUN_PORT` — override port for some examples (mainly the MT CGI one).
## Supporting stdlib modules (lib/net)
- `net/http_server.fun` — Simple blocking HTTP server class serving static files, with a very small built-in “CGI for .fun files” (spawns `fun` with `QUERY_STRING`/`POST_DATA`).
- `net/http_cgi_server.fun` — Blocking server with fuller CGI support using `net/cgi.fun` to translate CGI output into proper HTTP responses and richer request/header parsing.
- `net/http_cgi_lib_server.fun` — Variant of the CGI server with the same core behavior, explicitly wiring the Fun interpreter path and using `CGI().cgi_to_http_response()` from `net/cgi.fun`.
- `net/cgi.fun` — Helpers to work with CGI-style programs and to translate CGI output (headers + body) into full HTTP/1.1 responses.
See documentation/stdlib.md → net/ for a quick index of these modules.
## Example: http_static_server.fun
- File: `examples/net/http_static_server.fun`
- Purpose: Minimal, hand-written HTTP server that ignores the request path and always responds with a fixed HTML page.
- Key includes: `io/socket.fun`
- Port/backlog: hard-coded `8088`, backlog 10.
- Flow:
- Creates `TcpServer(port, backlog)``listen()` → loop on `accept()`
- `sock_recv()` reads and discards request
- Constructs a literal HTTP/1.1 200 response with `Content-Length` and `Connection: close`
- Sends the response with `sock_send()` and closes the client
- Run:
- `./examples/net/http_static_server.fun`
- Open http://127.0.0.1:8080/
## Example: http_server.fun (static + simple .fun CGI)
- File: `examples/net/http_server.fun`
- Uses: `#include <net/http_server.fun>` (class `HTTPServer`)
- Purpose: Blocking server that serves static files from an htdocs directory; if the requested path ends with `.fun`, it spawns `fun` to run the script and returns its output.
- Defaults in example:
- Port: `8080`
- Htdocs: `./examples/data/htdocs`
- Implementation highlights (see `lib/net/http_server.fun`):
- Parses request line to get `method` and `path`; `/` maps to `/index.html`.
- When path ends with `.fun`, builds a small environment:
- `QUERY_STRING` (for `?a=b`), `POST_DATA` (raw body when `POST`).
- Runs `proc_run("<env> fun <script>")` and uses `out` as response body.
- Otherwise reads the file from `htdocs` and serves it as-is.
- Sends basic HTTP/1.1 headers: 200/404, `Content-Type: text/html`, `Content-Length`, `Connection: close`.
- Run:
- `./examples/net/http_server.fun`
- Open http://127.0.0.1:8080/ and the sample CGI endpoints like `/hello.fun?name=Fun`.
## Example: http_server_cgi.fun (CGI via external interpreter)
- File: `examples/net/http_server_cgi.fun`
- Uses: `#include <net/http_cgi_server.fun>` (class `HTTPCGIServer`)
- Purpose: Blocking server that serves static files and executes `.fun` scripts under htdocs via a child Fun interpreter, with fuller CGI environment and header handling.
- Defaults in example:
- Port: `8080`
- Htdocs: `./examples/data/htdocs`
- Implementation highlights (see `lib/net/http_cgi_server.fun`):
- Robust request-line extraction and header parsing (case-normalized to uppercase).
- Path routing: `/``/index.html`; `.fun` → treat as CGI script.
- Builds CGI env including: `FUN_LIB_DIR`, `REQUEST_METHOD`, `QUERY_STRING`, `SCRIPT_NAME`, `PATH_INFO`, `SERVER_NAME`, `SERVER_PORT`, `SERVER_PROTOCOL`, `HTTP_HOST`, `HTTP_USER_AGENT`, `HTTP_COOKIE`, `CONTENT_TYPE`, `CONTENT_LENGTH`, and `POST_DATA` (if any).
- Interpreter selection priority: `$FUN_EXEC``./build_debug/fun``./build_release/fun``fun` from PATH.
- Uses `net/cgi.fun` to convert CGI output (headers + body) into a proper HTTP/1.1 response before sending.
- Run:
- `./examples/net/http_server_cgi.fun`
- Try: `/`, `/hello.fun?name=Fun`, `/info.fun` under http://127.0.0.1:8080/
## Example: http_server_cgi_lib.fun (CGI via stdlib wrapper)
- File: `examples/net/http_server_cgi_lib.fun`
- Uses: `#include <net/http_cgi_lib_server.fun>` (class `HTTPCGILibServer`)
- Purpose: Same goal as the previous example but split into a slightly different stdlib class; also uses `CGI().cgi_to_http_response()` for translating CGI output.
- Defaults and behavior mirror `HTTPCGIServer`: static files from htdocs, `.fun` as CGI with the same env block and interpreter selection logic.
- Run:
- `./examples/net/http_server_cgi_lib.fun`
- Try: `/`, `/hello.fun?name=Fun`, `/info.fun` under http://127.0.0.1:8080/
## Example: http_mt_server.fun (thread-per-connection)
- File: `examples/net/http_mt_server.fun`
- Uses: `io/socket.fun`, `io/thread.fun`
- Purpose: Hand-written multi-threaded server; main thread blocks in `accept()`, each connection handled in a new Fun thread.
- Behavior: Reads request, replies with a fixed HTML 200 response, then closes the connection.
- Defaults: `PORT = 8080`, `BACKLOG = 128` (note the comment mentions 8089 in a usage line; the code uses 8080).
- Run: `./examples/net/http_mt_server.fun` then open http://127.0.0.1:8080/
## Example: http_mt_server_cgi.fun (thread-per-connection + CGI)
- File: `examples/net/http_mt_server_cgi.fun`
- Uses: `io/socket.fun`, `io/thread.fun`, `net/cgi.fun`
- Purpose: Multi-threaded server that serves static files from htdocs and executes `.fun` scripts as CGI, implemented without higher-level string helpers to keep per-thread globals minimal.
- Defaults: `PORT = 8080`, `BACKLOG = 128`, `HTDOCS = ./examples/data/htdocs`.
- Request handling flow:
- Reads request bytes, extracts the request line, splits out `method` and `target`.
- Splits `path` and `query` on `?`; `/` becomes `/index.html`.
- Parses headers into a map (uppercase keys) and optionally reads a request body.
- Routing:
- If `path` ends with `.fun`: build CGI env; spawn a child `fun` to execute the script; capture stdout; translate to HTTP via `_cgi_to_http_response()`; send back.
- Else: attempt to read the static file from `HTDOCS + path`; send 200 or 404.
- CGI environment variables set (subset):
- `FUN_LIB_DIR`, `REQUEST_METHOD`, `QUERY_STRING`, `SCRIPT_NAME`, `PATH_INFO`, `SERVER_NAME`, `SERVER_PORT`, `SERVER_PROTOCOL`, `HTTP_HOST`, `HTTP_USER_AGENT`, `HTTP_COOKIE`, `CONTENT_TYPE`, `CONTENT_LENGTH`, `POST_DATA` (when present).
- Interpreter selection (similar to CGI examples): `$FUN_EXEC``./build_debug/fun``./build_release/fun``fun` from PATH.
- Notes:
- Allows overriding `HTDOCS` & port via `FUN_HTDOCS` and `FUN_PORT` environment variables.
- Implements its own small helpers (`_trim`, `_ends_with`, `_split_*`) to avoid heavy string utilities inside threads.
- Run: `./examples/net/http_mt_server_cgi.fun` then open http://127.0.0.1:8080/
## Example: http_server_test.fun
- File: `examples/net/http_server_test.fun`
- Purpose: Small test harness to exercise/verify server pieces (implementation details may change). Check the source for exact behavior.
## Common behaviors and notes
- Index handling: most servers map `/` to `/index.html` under the configured `htdocs` directory.
- Static files: served by reading from `<htdocs><path>`; a missing file returns `404 Not Found`.
- CGI scripts:
- Any path ending in `.fun` under `htdocs` is executed with the Fun interpreter as a child process.
- CGI output is expected to be a mix of optional headers and a body; the servers convert this to a valid HTTP/1.1 response (via `net/cgi.fun` or a local helper).
- To ensure the child can `#include` stdlib modules, `FUN_LIB_DIR` is populated (defaults to `./lib` when run from repo root).
- Content types: examples return `Content-Type: text/html; charset=utf-8` by default for dynamic responses; static file content types are not auto-detected in these examples.
- Connection handling: responses include `Connection: close`; examples do not implement keep-alive or HTTP/1.1 request pipelining.
- Security: these are demo servers. Do not expose them to untrusted networks. They lack path normalization, MIME sniffing, directory traversal protection, rate limiting, and TLS.
## How to point htdocs somewhere else
- For class-based servers: call `set_htdocs("/path/to/site")` on the server instance before `start()`.
- For the MT CGI example: set `FUN_HTDOCS=/path/to/site` in the environment before launch.
## Troubleshooting
- If a CGI request yields a 500 and you see “CGI produced no output”, run the target `.fun` directly with your `fun` interpreter and fix any errors.
- Confirm `FUN_LIB_DIR` points to the stdlib (especially when running CGI scripts that `#include` modules).
- If the server cannot start, another process might be using the chosen port.

View file

@ -1,24 +0,0 @@
---
layout: page
published: true
noToc: false
noComments: false
noDate: false
title: Fun - objects_basic.fun — overview
subtitle: Documentation for objects_basic.fun — overview
description: Documentation for objects_basic.fun — overview
permalink: /documentation/examples/objects_basic/
lang: en
tags:
- example
- objects_basic
---
What it shows
- OO basics: defining objects, fields, and invoking methods.
How to run
- export FUN_LIB_DIR="./lib"
- ./build_debug/fun examples/objects_basic.fun
- Or: fun examples/objects_basic.fun

View file

@ -1,24 +0,0 @@
---
layout: page
published: true
noToc: false
noComments: false
noDate: false
title: Fun - objects_more.fun — overview
subtitle: Documentation for objects_more.fun — overview
description: Documentation for objects_more.fun — overview
permalink: /documentation/examples/objects_more/
lang: en
tags:
- example
- objects_more
---
What it shows
- Additional object patterns: composition, methods, and utilities.
How to run
- export FUN_LIB_DIR="./lib"
- ./build_debug/fun examples/objects_more.fun
- Or: fun examples/objects_more.fun

View file

@ -1,24 +0,0 @@
---
layout: page
published: true
noToc: false
noComments: false
noDate: false
title: Fun - os_env.fun — overview
subtitle: Documentation for os_env.fun — overview
description: Documentation for os_env.fun — overview
permalink: /documentation/examples/os_env/
lang: en
tags:
- example
- os_env
---
What it shows
- Reading and writing environment variables from the operating system.
How to run
- export FUN_LIB_DIR="./lib"
- ./build_debug/fun examples/os_env.fun
- Or: fun examples/os_env.fun

View file

@ -1,24 +0,0 @@
---
layout: page
published: true
noToc: false
noComments: false
noDate: false
title: Fun - process_example.fun — overview
subtitle: Documentation for process_example.fun — overview
description: Documentation for process_example.fun — overview
permalink: /documentation/examples/process_example/
lang: en
tags:
- example
- process_example
---
What it shows
- Spawning and capturing subprocess output; simple process management.
How to run
- export FUN_LIB_DIR="./lib"
- ./build_debug/fun examples/process_example.fun
- Or: fun examples/process_example.fun

View file

@ -1,24 +0,0 @@
---
layout: page
published: true
noToc: false
noComments: false
noDate: false
title: Fun - progress.fun — overview
subtitle: Documentation for progress.fun — overview
description: Documentation for progress.fun — overview
permalink: /documentation/examples/progress/
lang: en
tags:
- example
- progress
---
What it shows
- Simple progress display in the terminal.
How to run
- export FUN_LIB_DIR="./lib"
- ./build_debug/fun examples/progress.fun
- Or: fun examples/progress.fun

View file

@ -1,24 +0,0 @@
---
layout: page
published: true
noToc: false
noComments: false
noDate: false
title: Fun - progress_inline.fun — overview
subtitle: Documentation for progress_inline.fun — overview
description: Documentation for progress_inline.fun — overview
permalink: /documentation/examples/progress_inline/
lang: en
tags:
- example
- progress_inline
---
What it shows
- Inline progress updates (same line updates) for simple terminal UIs.
How to run
- export FUN_LIB_DIR="./lib"
- ./build_debug/fun examples/progress_inline.fun
- Or: fun examples/progress_inline.fun

View file

@ -1,24 +0,0 @@
---
layout: page
published: true
noToc: false
noComments: false
noDate: false
title: Fun - random_demo.fun — overview
subtitle: Documentation for random_demo.fun — overview
description: Documentation for random_demo.fun — overview
permalink: /documentation/examples/random_demo/
lang: en
tags:
- example
- random_demo
---
What it shows
- Random number generator usage and seeding basics.
How to run
- export FUN_LIB_DIR="./lib"
- ./build_debug/fun examples/random_demo.fun
- Or: fun examples/random_demo.fun

View file

@ -1,24 +0,0 @@
---
layout: page
published: true
noToc: false
noComments: false
noDate: false
title: Fun - random_number_example.fun — overview
subtitle: Documentation for random_number_example.fun — overview
description: Documentation for random_number_example.fun — overview
permalink: /documentation/examples/random_number_example/
lang: en
tags:
- example
- random_number_example
---
What it shows
- Generating random numbers and printing them; small utility demo.
How to run
- export FUN_LIB_DIR="./lib"
- ./build_debug/fun examples/random_number_example.fun
- Or: fun examples/random_number_example.fun

View file

@ -1,27 +0,0 @@
---
layout: page
published: true
noToc: false
noComments: false
noDate: false
title: Fun - regex_demo.fun — overview
subtitle: Documentation for regex_demo.fun — overview
description: Documentation for regex_demo.fun — overview
permalink: /documentation/examples/regex_demo/
lang: en
tags:
- example
- regex_demo
---
What it shows
- Regex helpers usage; simple matching and replacement tasks.
How to run
- export FUN_LIB_DIR="./lib"
- ./build_debug/fun examples/regex_demo.fun
- Or: fun examples/regex_demo.fun
Notes
- Some regex examples depend on the optional PCRE2 extension; enable it in your build to run.

View file

@ -1,27 +0,0 @@
---
layout: page
published: true
noToc: false
noComments: false
noDate: false
title: Fun - regex_procedural.fun — overview
subtitle: Documentation for regex_procedural.fun — overview
description: Documentation for regex_procedural.fun — overview
permalink: /documentation/examples/regex_procedural/
lang: en
tags:
- example
- regex_procedural
---
What it shows
- Procedural approach to regex work: compiling patterns and iterating matches.
How to run
- export FUN_LIB_DIR="./lib"
- ./build_debug/fun examples/regex_procedural.fun
- Or: fun examples/regex_procedural.fun
Notes
- May require the optional PCRE2 extension in your build.

View file

@ -1,27 +0,0 @@
---
layout: page
published: true
noToc: false
noComments: false
noDate: false
title: Fun - rust_hello.fun — overview
subtitle: Documentation for rust_hello.fun — overview
description: Documentation for rust_hello.fun — overview
permalink: /documentation/examples/rust_hello/
lang: en
tags:
- example
- rust_hello
---
What it shows
- Using Rust opcodes from Fun (when built with Rust support).
How to run
- export FUN_LIB_DIR="./lib"
- ./build_debug/fun examples/rust_hello.fun
- Or: fun examples/rust_hello.fun
Notes
- Requires building with FUN_WITH_RUST; otherwise this example will be unavailable.

View file

@ -1,27 +0,0 @@
---
layout: page
published: true
noToc: false
noComments: false
noDate: false
title: Fun - rust_hello_args.fun — overview
subtitle: Documentation for rust_hello_args.fun — overview
description: Documentation for rust_hello_args.fun — overview
permalink: /documentation/examples/rust_hello_args/
lang: en
tags:
- example
- rust_hello_args
---
What it shows
- Passing arguments into Rust-backed opcodes and handling returns.
How to run
- export FUN_LIB_DIR="./lib"
- ./build_debug/fun examples/rust_hello_args.fun
- Or: fun examples/rust_hello_args.fun
Notes
- Requires building with FUN_WITH_RUST.

View file

@ -1,27 +0,0 @@
---
layout: page
published: true
noToc: false
noComments: false
noDate: false
title: Fun - rust_hello_args_return.fun — overview
subtitle: Documentation for rust_hello_args_return.fun — overview
description: Documentation for rust_hello_args_return.fun — overview
permalink: /documentation/examples/rust_hello_args_return/
lang: en
tags:
- example
- rust_hello_args_return
---
What it shows
- Demonstrates returning values from Rust-backed opcodes with arguments.
How to run
- export FUN_LIB_DIR="./lib"
- ./build_debug/fun examples/rust_hello_args_return.fun
- Or: fun examples/rust_hello_args_return.fun
Notes
- Requires building with FUN_WITH_RUST.

View file

@ -1,27 +0,0 @@
---
layout: page
published: true
noToc: false
noComments: false
noDate: false
title: Fun - serial_demo.fun — overview
subtitle: Documentation for serial_demo.fun — overview
description: Documentation for serial_demo.fun — overview
permalink: /documentation/examples/serial_demo/
lang: en
tags:
- example
- serial_demo
---
What it shows
- Serial port access and basic read/write (when available on your system).
How to run
- export FUN_LIB_DIR="./lib"
- ./build_debug/fun examples/serial_demo.fun
- Or: fun examples/serial_demo.fun
Notes
- Requires serial device access; may depend on platform support and permissions.

View file

@ -1,24 +0,0 @@
---
layout: page
published: true
noToc: false
noComments: false
noDate: false
title: Fun - short_circuit_test.fun — overview
subtitle: Documentation for short_circuit_test.fun — overview
description: Documentation for short_circuit_test.fun — overview
permalink: /documentation/examples/short_circuit_test/
lang: en
tags:
- example
- short_circuit_test
---
What it shows
- Boolean evaluation order and short-circuit behavior with && and ||.
How to run
- export FUN_LIB_DIR="./lib"
- ./build_debug/fun examples/short_circuit_test.fun
- Or: fun examples/short_circuit_test.fun

View file

@ -1,24 +0,0 @@
---
layout: page
published: true
noToc: false
noComments: false
noDate: false
title: Fun - signed_ints.fun — overview
subtitle: Documentation for signed_ints.fun — overview
description: Documentation for signed_ints.fun — overview
permalink: /documentation/examples/signed_ints/
lang: en
tags:
- example
- signed_ints
---
What it shows
- Signed integer types and operations; ranges and conversions.
How to run
- export FUN_LIB_DIR="./lib"
- ./build_debug/fun examples/signed_ints.fun
- Or: fun examples/signed_ints.fun

View file

@ -1,24 +0,0 @@
---
layout: page
published: true
noToc: false
noComments: false
noDate: false
title: Fun - stdlib_showcase.fun — overview
subtitle: Documentation for stdlib_showcase.fun — overview
description: Documentation for stdlib_showcase.fun — overview
permalink: /documentation/examples/stdlib_showcase/
lang: en
tags:
- example
- stdlib_showcase
---
What it shows
- Sampler of common standard library modules and utilities.
How to run
- export FUN_LIB_DIR="./lib"
- ./build_debug/fun examples/stdlib_showcase.fun
- Or: fun examples/stdlib_showcase.fun

View file

@ -1,24 +0,0 @@
---
layout: page
published: true
noToc: false
noComments: false
noDate: false
title: Fun - strings_test.fun — overview
subtitle: Documentation for strings_test.fun — overview
description: Documentation for strings_test.fun — overview
permalink: /documentation/examples/strings_test/
lang: en
tags:
- example
- strings_test
---
What it shows
- String helpers and edge cases; splitting, joining, trimming, and formatting.
How to run
- export FUN_LIB_DIR="./lib"
- ./build_debug/fun examples/strings_test.fun
- Or: fun examples/strings_test.fun

View file

@ -1,27 +0,0 @@
---
layout: page
published: true
noToc: false
noComments: false
noDate: false
title: Fun - tcp_http_get.fun — overview
subtitle: Documentation for tcp_http_get.fun — overview
description: Documentation for tcp_http_get.fun — overview
permalink: /documentation/examples/tcp_http_get/
lang: en
tags:
- example
- tcp_http_get
---
What it shows
- Manual HTTP client over raw TCP sockets: connect, write request, read response.
How to run
- export FUN_LIB_DIR="./lib"
- ./build_debug/fun examples/tcp_http_get.fun
- Or: fun examples/tcp_http_get.fun
Notes
- Requires network access to the target host used in the script.

View file

@ -1,27 +0,0 @@
---
layout: page
published: true
noToc: false
noComments: false
noDate: false
title: Fun - tcp_http_get_class.fun — overview
subtitle: Documentation for tcp_http_get_class.fun — overview
description: Documentation for tcp_http_get_class.fun — overview
permalink: /documentation/examples/tcp_http_get_class/
lang: en
tags:
- example
- tcp_http_get_class
---
What it shows
- Manual HTTP client implemented with a small helper class over sockets.
How to run
- export FUN_LIB_DIR="./lib"
- ./build_debug/fun examples/tcp_http_get_class.fun
- Or: fun examples/tcp_http_get_class.fun
Notes
- Requires network access to the target host used in the script.

View file

@ -1,24 +0,0 @@
---
layout: page
published: true
noToc: false
noComments: false
noDate: false
title: Fun - test_bits.fun — overview
subtitle: Documentation for test_bits.fun — overview
description: Documentation for test_bits.fun — overview
permalink: /documentation/examples/test_bits/
lang: en
tags:
- example
- test_bits
---
What it shows
- Bitwise utilities demonstration (and/or/xor/shifts) and small tests.
How to run
- export FUN_LIB_DIR="./lib"
- ./build_debug/fun examples/test_bits.fun
- Or: fun examples/test_bits.fun

View file

@ -1,24 +0,0 @@
---
layout: page
published: true
noToc: false
noComments: false
noDate: false
title: Fun - test_dec_to_hex.fun — overview
subtitle: Documentation for test_dec_to_hex.fun — overview
description: Documentation for test_dec_to_hex.fun — overview
permalink: /documentation/examples/test_dec_to_hex/
lang: en
tags:
- example
- test_dec_to_hex
---
What it shows
- Decimal to hexadecimal conversion helper/tests.
How to run
- export FUN_LIB_DIR="./lib"
- ./build_debug/fun examples/test_dec_to_hex.fun
- Or: fun examples/test_dec_to_hex.fun

View file

@ -1,24 +0,0 @@
---
layout: page
published: true
noToc: false
noComments: false
noDate: false
title: Fun - test_hex_to_dec.fun — overview
subtitle: Documentation for test_hex_to_dec.fun — overview
description: Documentation for test_hex_to_dec.fun — overview
permalink: /documentation/examples/test_hex_to_dec/
lang: en
tags:
- example
- test_hex_to_dec
---
What it shows
- Hexadecimal to decimal conversion helper/tests.
How to run
- export FUN_LIB_DIR="./lib"
- ./build_debug/fun examples/test_hex_to_dec.fun
- Or: fun examples/test_hex_to_dec.fun

View file

@ -1,24 +0,0 @@
---
layout: page
published: true
noToc: false
noComments: false
noDate: false
title: Fun - test_include.fun — overview
subtitle: Documentation for test_include.fun — overview
description: Documentation for test_include.fun — overview
permalink: /documentation/examples/test_include/
lang: en
tags:
- example
- test_include
---
What it shows
- Small include mechanics test; ensures local and stdlib includes work.
How to run
- export FUN_LIB_DIR="./lib"
- ./build_debug/fun examples/test_include.fun
- Or: fun examples/test_include.fun

View file

@ -1,24 +0,0 @@
---
layout: page
published: true
noToc: false
noComments: false
noDate: false
title: Fun - test_rol.fun — overview
subtitle: Documentation for test_rol.fun — overview
description: Documentation for test_rol.fun — overview
permalink: /documentation/examples/test_rol/
lang: en
tags:
- example
- test_rol
---
What it shows
- Bit rotation (ROL) helper/tests.
How to run
- export FUN_LIB_DIR="./lib"
- ./build_debug/fun examples/test_rol.fun
- Or: fun examples/test_rol.fun

View file

@ -1,27 +0,0 @@
---
layout: page
published: true
noToc: false
noComments: false
noDate: false
title: Fun - test_serial.fun — overview
subtitle: Documentation for test_serial.fun — overview
description: Documentation for test_serial.fun — overview
permalink: /documentation/examples/test_serial/
lang: en
tags:
- example
- test_serial
---
What it shows
- Serial port test; opens a port and exchanges a few bytes (when available).
How to run
- export FUN_LIB_DIR="./lib"
- ./build_debug/fun examples/test_serial.fun
- Or: fun examples/test_serial.fun
Notes
- Requires serial device access; may depend on platform support and permissions.

View file

@ -1,24 +0,0 @@
---
layout: page
published: true
noToc: false
noComments: false
noDate: false
title: Fun - test_shl.fun — overview
subtitle: Documentation for test_shl.fun — overview
description: Documentation for test_shl.fun — overview
permalink: /documentation/examples/test_shl/
lang: en
tags:
- example
- test_shl
---
What it shows
- Bit shift left (SHL) helper/tests.
How to run
- export FUN_LIB_DIR="./lib"
- ./build_debug/fun examples/test_shl.fun
- Or: fun examples/test_shl.fun

View file

@ -1,24 +0,0 @@
---
layout: page
published: true
noToc: false
noComments: false
noDate: false
title: Fun - test_types.fun — overview
subtitle: Documentation for test_types.fun — overview
description: Documentation for test_types.fun — overview
permalink: /documentation/examples/test_types/
lang: en
tags:
- example
- test_types
---
What it shows
- Type checks and simple assertions around type behavior.
How to run
- export FUN_LIB_DIR="./lib"
- ./build_debug/fun examples/test_types.fun
- Or: fun examples/test_types.fun

View file

@ -1,24 +0,0 @@
---
layout: page
published: true
noToc: false
noComments: false
noDate: false
title: Fun - test_xor.fun — overview
subtitle: Documentation for test_xor.fun — overview
description: Documentation for test_xor.fun — overview
permalink: /documentation/examples/test_xor/
lang: en
tags:
- example
- test_xor
---
What it shows
- Bitwise XOR helper/tests.
How to run
- export FUN_LIB_DIR="./lib"
- ./build_debug/fun examples/test_xor.fun
- Or: fun examples/test_xor.fun

View file

@ -1,24 +0,0 @@
---
layout: page
published: true
noToc: false
noComments: false
noDate: false
title: Fun - thread_class_example.fun — overview
subtitle: Documentation for thread_class_example.fun — overview
description: Documentation for thread_class_example.fun — overview
permalink: /documentation/examples/thread_class_example/
lang: en
tags:
- example
- thread_class_example
---
What it shows
- Threading building blocks using a small thread class; start/join patterns.
How to run
- export FUN_LIB_DIR="./lib"
- ./build_debug/fun examples/thread_class_example.fun
- Or: fun examples/thread_class_example.fun

View file

@ -1,24 +0,0 @@
---
layout: page
published: true
noToc: false
noComments: false
noDate: false
title: Fun - threads_demo.fun — overview
subtitle: Documentation for threads_demo.fun — overview
description: Documentation for threads_demo.fun — overview
permalink: /documentation/examples/threads_demo/
lang: en
tags:
- example
- threads_demo
---
What it shows
- Threading building blocks and concurrent execution demo.
How to run
- export FUN_LIB_DIR="./lib"
- ./build_debug/fun examples/threads_demo.fun
- Or: fun examples/threads_demo.fun

View file

@ -1,24 +0,0 @@
---
layout: page
published: true
noToc: false
noComments: false
noDate: false
title: Fun - try_catch_finally.fun — overview
subtitle: Documentation for try_catch_finally.fun — overview
description: Documentation for try_catch_finally.fun — overview
permalink: /documentation/examples/try_catch_finally/
lang: en
tags:
- example
- try_catch_finally
---
What it shows
- Structured error handling with try/catch/finally blocks.
How to run
- export FUN_LIB_DIR="./lib"
- ./build_debug/fun examples/try_catch_finally.fun
- Or: fun examples/try_catch_finally.fun

View file

@ -1,24 +0,0 @@
---
layout: page
published: true
noToc: false
noComments: false
noDate: false
title: Fun - type_safety.fun — overview
subtitle: Documentation for type_safety.fun — overview
description: Documentation for type_safety.fun — overview
permalink: /documentation/examples/type_safety/
lang: en
tags:
- example
- type_safety
---
What it shows
- Static/dynamic type checks and enforcing type safety in small examples.
How to run
- export FUN_LIB_DIR="./lib"
- ./build_debug/fun examples/type_safety.fun
- Or: fun examples/type_safety.fun

View file

@ -1,24 +0,0 @@
---
layout: page
published: true
noToc: false
noComments: false
noDate: false
title: Fun - type_safety_fails.fun — overview
subtitle: Documentation for type_safety_fails.fun — overview
description: Documentation for type_safety_fails.fun — overview
permalink: /documentation/examples/type_safety_fails/
lang: en
tags:
- example
- type_safety_fails
---
What it shows
- Examples that intentionally violate type expectations to illustrate safety checks.
How to run
- export FUN_LIB_DIR="./lib"
- ./build_debug/fun examples/type_safety_fails.fun
- Or: fun examples/type_safety_fails.fun

View file

@ -1,24 +0,0 @@
---
layout: page
published: true
noToc: false
noComments: false
noDate: false
title: Fun - typeof.fun — overview
subtitle: Documentation for typeof.fun — overview
description: Documentation for typeof.fun — overview
permalink: /documentation/examples/typeof/
lang: en
tags:
- example
- typeof
---
What it shows
- Type inspection using typeof and related helpers.
How to run
- export FUN_LIB_DIR="./lib"
- ./build_debug/fun examples/typeof.fun
- Or: fun examples/typeof.fun

View file

@ -1,24 +0,0 @@
---
layout: page
published: true
noToc: false
noComments: false
noDate: false
title: Fun - typeof_features.fun — overview
subtitle: Documentation for typeof_features.fun — overview
description: Documentation for typeof_features.fun — overview
permalink: /documentation/examples/typeof_features/
lang: en
tags:
- example
- typeof_features
---
What it shows
- A tour of typeof-related features and type introspection helpers.
How to run
- export FUN_LIB_DIR="./lib"
- ./build_debug/fun examples/typeof_features.fun
- Or: fun examples/typeof_features.fun

View file

@ -1,24 +0,0 @@
---
layout: page
published: true
noToc: false
noComments: false
noDate: false
title: Fun - types_integers.fun — overview
subtitle: Documentation for types_integers.fun — overview
description: Documentation for types_integers.fun — overview
permalink: /documentation/examples/types_integers/
lang: en
tags:
- example
- types_integers
---
What it shows
- Integer type families, ranges, and basic operations.
How to run
- export FUN_LIB_DIR="./lib"
- ./build_debug/fun examples/types_integers.fun
- Or: fun examples/types_integers.fun

View file

@ -1,24 +0,0 @@
---
layout: page
published: true
noToc: false
noComments: false
noDate: false
title: Fun - types_overview.fun — overview
subtitle: Documentation for types_overview.fun — overview
description: Documentation for types_overview.fun — overview
permalink: /documentation/examples/types_overview/
lang: en
tags:
- example
- types_overview
---
What it shows
- Overview of language types with small examples.
How to run
- export FUN_LIB_DIR="./lib"
- ./build_debug/fun examples/types_overview.fun
- Or: fun examples/types_overview.fun

Some files were not shown because too many files have changed in this diff Show more