Skip to content

the0cp/pico

Repository files navigation

PiCo

A small, compact scripting language and virtual machine implemented in C. pico includes a compiler, virtual machine, REPL, and a set of core modules for working with values, objects, and I/O.

Features

  • Register-based bytecode VM
  • REPL
  • Functions and closures
  • Classes and methods
  • Modules
  • Lists, maps, strings, and slicing
  • Small standard library
  • Manual / automatic GC modes

See the included manual.md for a detailed language reference and usage examples: https://github.com/the0cp/pico/blob/master/manual.md

What it looks like

# A tiny PiCo demo: 

func slug(s) {
    return s.trim().lower().replace(" ", "-");
}

func badge(s) {
    return "[" + s + "]";
}

func makeCounter(prefix) {
    var n = 0;

    return func(name) {
        n++;
        return "${prefix}-${n}: ${name}";
    };
}

var next = makeCounter("demo");
var topics = [" Register VM ", " Pipe Operator ", " Path Join "];

for (var topic : topics) {
    var name = topic |> slug |> badge;
    print next(name);
}

print "path: ${"examples" / "data" / "sample.txt"}";
print "slice: ${"register-vm"[0:8]}, reverse: ${"PiCo"[::-1]}";

$> echo hello from the host shell
print "shell exit code = ${_exit_code}";

Examples

More examples are available in examples/.

Try more examples:

./build/debug/pico examples/tour.pcs
./build/debug/pico examples/file_indexer.pcs
./build/debug/pico examples/modules/main.pcs
# ...

Building

Requirements: gcc and CMake. The code uses GCC-specific techniques such as computed goto / dispatch table, so GCC is required. On Windows, GCC can be installed through MinGW-w64, Chocolatey, or MSYS2.

Clone the repo:

git clone --recursive https://github.com/the0cp/pico.git

Configure and build a debug version:

cmake --preset debug
cmake --build --preset debug

Configure and build a release version:

cmake --preset release
cmake --build --preset release

On Windows:

cmake --preset release-windows
cmake --build --preset release-windows

The executable is generated under the corresponding build directory, for example:

build/debug/pico
build/release/pico
build/release-windows/pico.exe

Testing

Run the test suite with CTest:

ctest --preset debug --output-on-failure

or for release:

ctest --preset release --output-on-failure

Usage

Run the interactive REPL:

./build/release/pico

Run a script:

./build/release/pico path/to/script.pcs

For a debug build, use:

./build/debug/pico path/to/script.pcs

Check manual.md for language syntax, built-in functions, and examples.

License

This project is distributed under the GNU GPL v3. See gpl-3.0.txt for details.

About

A small, compact, register-based scripting language and virtual machine implemented in C. Inspired by clox.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Contributors

Languages