LO - small programming language targeting WASM that aims to be as simple as possible

???? Goals

Make both the language and the compiler small and easy to understand

Have little to no dependencies

Be easy to use and modify

Emit WASM to have the biggest target coverage with little code

???? Development Log

???? Parts [0..6] - Building the initial compiler. (text based blog)

???? Parts [7..] - Building the self-hosted compiler. (YouTube playlist)

???? Overview

Check out example .lo programs including standard library sources and WIP self-hosted compiler in the ./examples folder.

Here are some of them with syntax highlighting from the LO VS Code extension:

Hello world (source):

Advent of Code 2020 Day 1 (source):

Dark Maze (WASM-4 demo game) play it here or check the source:

???? Getting started

Option 1 (recommended): Using VS Code extension only

This option also works in vscode.dev

Install the LO VS Code extension

To create a new project: Open empty folder, execute Command Palette: LO: Initialize project in current workspace

To run currently open file: execute Command Palette: LO: Run current file , or press ▶️ button in the top toolbar

, or press button in the top toolbar Compiling files: Open Web Shell: execute Command Palette: Terminal: Create New Web Shell Run: run lo.wasm <input>.lo > <output>.wasm

Option 2: Using wasmtime

Install wasmtime

Compiling files: wasmtime --dir=. lo.wasm <input>.lo > <output>.wasm

Getting diagnostics (in json format): wasmtime --dir=. lo.wasm <input>.lo --inspect

Option 3: Using Node.js

Install Node.js

Compiling files: ./utils.mjs compile <input>.lo > <output>.wasm

Compiling & running files: ./utils.mjs run <input>.lo

???? Building the initial compiler

Requirements: Install rustup Switch to nightly: rustup toolchain install nightly Add WASM target: rustup target add wasm32-unknown-unknown You can also find configs for GitHub Codespaces and GitPod in this repo

Run ./build.sh This will build the compiler with cargo, putting resulting WASM binary into lo.wasm

???? Running tests