glebbash / LO

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

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

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 sample

AOC 2020 sample

Dark Maze gif

πŸš€ 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
  • 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
    • Install nightly: rustup toolchain install nightly
    • Add WASM target: rustup +nightly 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

  • Requirements:

    • Install Node.js for running tests
  • Run ./utils.mjs test

    This runs tests defined in utils.mjs. Test programs are located in examples/test

About

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

License:MIT License


Languages

Language:Rust 79.0%Language:JavaScript 13.5%Language:TypeScript 7.5%Language:Shell 0.1%