Moss Manual


Command-line options

moss [options] [file [arguments]]

Options:
-i file     Include and execute a file before normal execution.
            Multiple files are possible: '-i file1 -i file2'.

-m          Math mode: use moss as a calculator.

-e "1+2"    Evaluate some Moss code inline.

-d          Debug mode: compile assert statements.

-unsafe     Unsafe mode: run the interpreter in privileged mode,
            which allows write access to files, network access
            and execution of shell commands. Running an untrusted
            module in unsafe mode is a security hazard.

Building

Linux

Obtain Ubuntu, or else Debian, or else another fancy Linux, or else a fancy POSIX system, or else Windows. If some dependency cannot be fulfilled, set up a minimal build and then add feature after feature until some error occurs.

Windows is currently not supported. If you want to port to Windows, edit the operating system interface:

src/system/system-windows.rs

and send upstream pull request to:

github.com/JohnBSmith/moss

Install dependencies:
sudo apt install rustc
sudo apt install cargo


Alternatively (enables cross compilation):
sudo apt install curl
curl https://sh.rustup.rs -sSf | sh


Install optional dependencies:
sudo apt install libgmp-dev
sudo apt install libsdl2-dev
sudo apt install libsdl2-ttf-dev


Currently unused optional dependencies:
sudo apt install libblas-dev
sudo apt install liblapacke-dev


For the first compilation,
Cargo needs network connection:
[dependencies]
libc = "0.2"
termios = "0.2"


Configure optional dependencies in Cargo.toml:
# Minimal
# default = ["long-none"]

# Basic
# default = ["long-none", "math-la", "math-sf"]

# Full
default = ["long-gmp", "math-la", "math-sf", "graphics"]


Run one of the following:
cargo check
cargo build
cargo build --release
sh make.sh

Cross compilation, target: x86-64

rustup target add x86_64-unknown-linux-gnu
sudo apt install qemu-user

sudo apt install gcc-multilib
# Workaround for a bug:
# /usr/bin/ld: cannot find Scrt1.o: No such file or directory
# /usr/bin/ld: cannot find crti.o: No such file or directory

cargo build --target x86_64-unknown-linux-gnu
qemu-x86_64 ./moss

Cross compilation, target: Windows

rustup target add i686-pc-windows-gnu
sudo apt install wine

# Workaround for a linker bug:
# Add these lines to .cargo/config:
[target.x86_64-pc-windows-gnu]
linker = "/usr/bin/x86_64-w64-mingw32-gcc"
[target.i686-pc-windows-gnu]
linker = "/usr/bin/i686-w64-mingw32-gcc"
rustflags = "-C panic=abort"

cargo build --target i686-pc-windows-gnu
wine ./moss

Installation

Set up the latest development version:

Maybe you need to switch your operating system account to have system administration access. Then also run sh install-lib.sh on your user account to install the moss library locally. The library will be found at:

/home/account/.moss

Development tools

# IDE
sudo apt install geany

# Debugger, dynamic program analysis
sudo apt install valgrind
sudo apt install kcachegrind
sudo apt install gdb

# Emulator for cross compiler output
sudo apt install wine

# Compare a file and its modification
sudo apt install kompare

# Find all occurrences of a pattern
egrep -nrwi "regex" ./
  () | [] . * ?
  {n} {min,} {,max} {min,max}
  ^ $ \< \> \w \b

# GNU Scientific Library
sudo apt install libgsl-dev