AbstractMachinesLab / Lam

Licence: apache-2.0
🚀 a lightweight, universal actor-model vm for writing scalable and reliable applications that run natively and on WebAssembly

Programming Languages

rust
11053 projects
elixir
2628 projects
erlang
1774 projects

Projects that are alternatives of or similar to Lam

Awesome Wasm Runtimes
A list of webassemby runtimes
Stars: ✭ 490 (+178.41%)
Mutual labels:  webassembly, wasm, virtual-machine, vm
cabasa
Haxe Framework for WebAssembly
Stars: ✭ 30 (-82.95%)
Mutual labels:  virtual-machine, webassembly, wasm
Alchemyvm
WebAssembly Virtual Machine Built In Elixir
Stars: ✭ 176 (+0%)
Mutual labels:  webassembly, wasm, vm
Wasm3
🚀 The fastest WebAssembly interpreter, and the most universal runtime
Stars: ✭ 4,375 (+2385.8%)
Mutual labels:  webassembly, wasm, virtual-machine
Wac
WebAssembly interpreter in C
Stars: ✭ 372 (+111.36%)
Mutual labels:  webassembly, wasm, native
Customasm
💻 An assembler for custom, user-defined instruction sets! https://hlorenzi.github.io/customasm/web/
Stars: ✭ 211 (+19.89%)
Mutual labels:  webassembly, virtual-machine, vm
Lunatic
Lunatic is an Erlang-inspired runtime for WebAssembly
Stars: ✭ 2,074 (+1078.41%)
Mutual labels:  webassembly, wasm, vm
E4vm
A small portable virtual machine that would run Erlang on embedded systems
Stars: ✭ 124 (-29.55%)
Mutual labels:  beam, virtual-machine, vm
Seed
A Rust framework for creating web apps
Stars: ✭ 3,069 (+1643.75%)
Mutual labels:  webassembly, wasm
Edit Text
Collaborative rich text editor for the web. Written in Rust + WebAssembly.
Stars: ✭ 171 (-2.84%)
Mutual labels:  webassembly, wasm
Carton
📦 Watcher, bundler, and test runner for your SwiftWasm apps
Stars: ✭ 171 (-2.84%)
Mutual labels:  webassembly, wasm
Wasmer Java
☕ WebAssembly runtime for Java
Stars: ✭ 152 (-13.64%)
Mutual labels:  webassembly, wasm
Deno Sqlite
Deno SQLite module
Stars: ✭ 151 (-14.2%)
Mutual labels:  webassembly, wasm
Spec
WebAssembly for Proxies (ABI specification)
Stars: ✭ 150 (-14.77%)
Mutual labels:  webassembly, wasm
Wain
WebAssembly implementation from scratch in Safe Rust with zero dependencies
Stars: ✭ 160 (-9.09%)
Mutual labels:  webassembly, wasm
Blazor Samples
Explore and learn Syncfusion Blazor components using large collection of demos, example applications and tutorial samples
Stars: ✭ 156 (-11.36%)
Mutual labels:  webassembly, wasm
Libarchivejs
Archive library for browsers
Stars: ✭ 145 (-17.61%)
Mutual labels:  webassembly, wasm
Quickjs
QuickJS是一个小型并且可嵌入的Javascript引擎,它支持ES2020规范,包括模块,异步生成器和代理器。
Stars: ✭ 2,199 (+1149.43%)
Mutual labels:  virtual-machine, vm
Wag
WebAssembly compiler implemented in Go
Stars: ✭ 177 (+0.57%)
Mutual labels:  webassembly, wasm
Wasmvm
An unofficial standalone WebAssembly process virtual machine
Stars: ✭ 164 (-6.82%)
Mutual labels:  webassembly, virtual-machine
LAM logo

 

Main workflow

LAM is a lightweight, universal virtual machine for writing scalable and reliable applications that run natively and on WebAssembly.

It is inspired by Erlang and Lua, and it is compatible with the Erlang VM.

LAM lets you reuse the same programming paradigm, known for being productive, across your entire application stack.

Come join us on Discord! (Ps: we share a server with Caramel)

Features

  • Runs Natively and on WebAssembly -- pick and choose your runtime!
  • Easy to Target -- a small and specified bytecode with a text and binary format
  • Erlang VM compatibility -- run your existing Erlang, Elixir, Caramel, and Gleam code
  • Seamless multi-core -- built to scale from one to thousands of cores for free
  • Extreme reliability -- use Erlang's OTP supervision patterns

Status

Still under heavy development!

There's plenty of work to be done for it to be fully usable, but we keep a few tracking issues here:

The Erlang and Elixir ecosystem compatibility is tracked here:

Getting Started

You can download the latest binary from the releases page. After unpacking it you should be able to add it to your PATH env and start playing around with the lam binary.

Like this:

# in this example I'm running linux with glibc
$ wget https://github.com/AbstractMachinesLab/lam/releases/download/v0.0.7/lam-v0.0.7-x86_64-unknown-linux-gnu.tar.gz
$ tar xzf lam-*
$ export PATH=$(pwd)/lam/bin:$PATH

Now we can do a quick test. Make a file test.erl with this contents:

-module(test).

-export([main/1]).

main([]) -> ok;
main([Name|T]) ->
  io:format(<<"Hello, ~p!\n">>, [Name]),
  main(T).

And we can compile it to BEAM byte code and use LAM to build a binary for it, like this:

$ erlc test.erl
$ lam build test.beam --output test.exe --target native --entrypoint test
$ ./test.exe Joe Robert Mike
Hello, Joe!
Hello, Robert!
Hello, Mike!

How does it work?

LAM compiles your .beam files ahead of time into a representation that's optimized for running them.

Then it bundles that with the appropriate target runtime into some binary output.

                       binary
                    instructions
                   +------------+              output
 .beam files +---->| 1001101110 |-----+    +-----------+
                   +------------+     |    | .exe      |
                                      |--->| .wasm     |
                   +-------------+    |    | .wasm/.js |
                   | LAM RunTime |----+    +-----------+
                   +-------------+
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].