Skip to content

alinalihassan/Lesma

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

1,341 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Lesma Programming Language
Lesma

License: MIT Version Platform Build

Lesma is a compiled, statically typed, imperative, and object-oriented programming language with a focus on expressiveness, elegance, and simplicity without sacrificing performance.

πŸ“ Features

  • πŸš€ Fast Compilation: compiling at a rate of β‰ˆ230k loc/s, because waiting for code to compile is a thing of the past
  • ⚑ Blazing Fast Execution: because it should be, it's as fast as C, using LLVM's state-of-the-art optimizations, but it won't ever oblige you to make an extra effort just for the sake of performance
  • πŸ”¬ Statically Typed: because IDE completion is like heaven, while unknown behaviour and runtime exceptions are like hell
  • πŸ§‘β€πŸŽ¨ Simple: because the code should be easily readable, and it shouldn't make you guess what it does or take long to learn

✍️ Example

Lesma Fibonacci

πŸ“– Documentation

Installation

Every Lesma release contains archives with the binary and standard library which you can grab. Alternatively, you can use the installer script to do all the work for you. The get-lesma.sh script downloads and installs the latest release.

Run the following in your terminal:

bash -c "$(curl -fsSL https://raw.githubusercontent.com/alinalihassan/Lesma/main/scripts/get-lesma.sh)"

πŸ”§ Build

In order to build Lesma, you need a C++23 compiler, LLVM (21 recommended; see AGENTS.md), lld, and Ninja installed. We recommend using Clang as the host C++ compiler. It's currently only supported on Linux and macOS. For a more comprehensive guide, and more information on how to install the prerequisites, read the documentation on Getting Started

Prerequisites

Required:

  • CMake 3.24+
  • Ninja
  • C++23 compiler (Clang recommended)
  • LLVM 21 (recommended; same generation as linked libraries)
  • lld

vcpkg (submodule)

vcpkg is included as a git submodule for dependency management. After cloning Lesma, init and bootstrap it:

git submodule update --init --recursive
cd vcpkg
./bootstrap-vcpkg.sh  # On Linux/macOS
cd ..

Installing LLVM

Option 1: Homebrew (macOS)

brew install llvm lld
export LLVM_DIR=$(brew --prefix llvm)/lib/cmake/llvm

Option 2: Package Manager (Linux)

# Ubuntu/Debian
sudo apt-get install llvm-dev lld clang

# Or for a specific version (e.g., LLVM 17)
sudo apt-get install llvm-17-dev lld-17 clang-17

Option 3: Build LLVM via vcpkg (Any platform)

This option builds LLVM from source using vcpkg. It takes significant time (~1-2 hours) but works on any platform.

# Configure with LLVM build enabled
cmake . -Bbuild -DLESMA_BUILD_LLVM=ON -G Ninja
cmake --build build

Building Lesma

  1. Clone the repository and init the vcpkg submodule

    git clone --recurse-submodules https://github.com/alinalihassan/Lesma
    cd Lesma

    If you already cloned without --recurse-submodules, run git submodule update --init --recursive and bootstrap vcpkg (see above).

  2. Run CMake to configure and build

    # Using presets (recommended)
    cmake --preset Debug
    cmake --build --preset Debug
    
    # Or manually
    cmake . -Bbuild -DCMAKE_TOOLCHAIN_FILE="$(pwd)/vcpkg/scripts/buildsystems/vcpkg.cmake" -G Ninja
    cmake --build build
  3. Run tests (optional)

    cd build/Debug  # or build/Release
    ctest --output-on-failure

Benchmark suite (optional)

Enable LESMA_BUILD_BENCHMARKS in CMake, build the benchmark target, then from the repository root run the integration wall-clock harness (it spawns lesma run per test and writes JSON plus an optional Vega-Lite chart spec):

./build/Debug/benchmark suite ./build/Debug/lesma \
  --vega-lite-out suite.vl.json \
  --json-out bench.json

Timings in bench.json are in milliseconds (milliseconds per test; total_wall_milliseconds / mean_milliseconds_per_test in aggregate). Render a static SVG with Vega-Lite’s CLI (no native canvas required); redirect stdout so the SVG is not printed in the terminal:

npx -p vega-lite vl2svg suite.vl.json > chart.svg

See AGENTS.md for flags (--suite, --opt, GitHub Actions JSON, and PNG options).

πŸ’¬ Contributing

Pull requests are welcome. For major changes, please open an issue to discuss your proposal and what you'd like to change.

Repository tooling lives under tools/:

  • tools/docs contains the Fumadocs (Vite + React Router) documentation site, including the in-app playground at /playground, and is built into the unified container image.

  • tools/playground includes wrangler.jsonc + worker.ts + Dockerfile for Cloudflare Workers + Containers: one image serves the combined docs SPA at / (playground route included) and the compiler API at /api.

  • tools/vscode contains the VS Code extension that launches the native lesma-lsp server.

  • To keep updated with releases, consider starring the project.

  • Check the code of conduct and contributing guidelines

πŸ“Ž License

This software is licensed under the MIT Β© Alin Ali Hassan.

About

The Lesma Programming Language

Topics

Resources

License

Code of conduct

Contributing

Stars

Watchers

Forks

Contributors