Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/coffeeeatnight/lunavm
π LunaVM β A lightweight virtual machine with a custom memory allocator and MoonlightScript integration, designed for executing compiled opcodes or creating an extensible virtualized platform for 2D and 3D applications! πβ¨
https://github.com/coffeeeatnight/lunavm
Last synced: about 1 month ago
JSON representation
π LunaVM β A lightweight virtual machine with a custom memory allocator and MoonlightScript integration, designed for executing compiled opcodes or creating an extensible virtualized platform for 2D and 3D applications! πβ¨
- Host: GitHub
- URL: https://github.com/coffeeeatnight/lunavm
- Owner: CoffeeeAtNight
- License: mit
- Created: 2024-11-04T00:11:37.000Z (3 months ago)
- Default Branch: main
- Last Pushed: 2024-11-25T23:43:06.000Z (about 2 months ago)
- Last Synced: 2024-11-26T00:28:10.606Z (about 2 months ago)
- Language: Makefile
- Homepage:
- Size: 39.7 MB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# π LunaVM
Welcome to **LunaVM**, a unique virtual machine built from scratch in **C**, designed to execute **MoonlightScript** programs, manage memory efficiently, and act as a foundation for a lightweight operating system or a virtualized platform. π
---
## π₯οΈ Features
### **1. MoonlightScript Integration**
LunaVM serves as the runtime environment for **MoonlightScript**, a statically typed, lightweight programming language designed to create system-level applications for LunarVM. MoonlightScript compiles to LunarVM opcodes, which the VM executes, providing a seamless bridge between high-level scripting and low-level execution.Key features of MoonlightScript:
- Static typing with type inference.
- Clean, intuitive syntax for systems programming.
- Compiles to binary opcodes for LunarVM (`.lvmb` format).
- MoonlightScript programs can manipulate memory, render graphics, and even build multi-app systems.---
### **2. Custom Memory Management with Starlock**
LunaVM uses a custom-built **Starlock allocator** for dynamic memory management. Unlike traditional `malloc`-based allocation, Starlock:
- Allocates memory in arenas to prevent fragmentation.
- Tracks ownership and lifetimes of memory blocks to minimize memory leaks.
- Ensures optimal performance for LunarVM programs.---
### **3. Lightweight Virtual Machine**
LunaVM interprets opcodes generated by the **MoonlightScript Compiler (MLSC)** and executes them in a secure, isolated environment. The VM provides:
- A fetch-decode-execute cycle to handle instructions.
- A stack-based and register-based hybrid architecture for flexibility.
- Built-in support for key opcodes like `MOV`, `ADD`, `PRINT`, `HLT`.---
### **4. Graphics Rendering with Raylib (Planned Integration)**
Future versions of LunaVM will support **Raylib** to enable rendering of 2D/3D graphics directly from MoonlightScript programs, making it possible to:
- Create windowed or fullscreen applications with dynamic content.
- Develop interactive 3D games or simulations.
- Bind MoonlightScript functions to Raylibβs rendering pipeline.---
## π System Architecture
### **MoonlightScript Workflow**
The development pipeline for LunaVM applications looks like this:1. **Write MoonlightScript Code**
Example `example.mls`:
```moonlightscript
fun main() (Void) {
var message: String = "Hello, Lunar World!";
print(message);
}
```2. **Compile with MoonlightScript Compiler (MLSC)**
- Generates `.lvmb` (binary) and `.lvs` (source-debug) files:
- `.lvmb`: Binary file of opcodes for LunarVM.
- `.lvs`: Optional source file for debugging and introspection.3. **Run on LunaVM**
- Load the `.lvmb` file into LunaVMβs memory and execute:
```bash
lunarvm example.lvmb
```---
## π Virtual Machine Highlights
1. **Opcodes**
LunaVM currently supports the following opcodes:
- `MOV`: Move data into registers.
- `ADD`: Perform arithmetic.
- `PRINT`: Display strings or numbers.
- `HLT`: Halt execution.Example LunarVM program in assembly-like pseudocode:
```
0x01 0x01 0x10 // MOV R1, 0x10
0x02 0x01 0x01 // ADD R1, R1
0x03 // PRINT R1
0xFF // HLT
```2. **Memory Management**
- **Starlock** provides efficient allocation with ownership models and arena-based allocation.
- LunarVMβs memory can be extended dynamically via Starlock, enabling applications to manage memory flexibly.3. **Planned Multitasking**
- LunaVM will eventually support multiple loaded programs in separate memory spaces, enabling multitasking.---
## π The Vision
The long-term goal of LunaVM is to evolve into a **general-purpose virtual operating system** capable of running multitasking applications, integrating features like:
- A basic task scheduler to manage multiple processes.
- Networking capabilities for communication between applications.
- A file management system for `.lvmb` binaries and data.---
## π Example Use Case
1. **MoonlightScript Application Development**
Write applications like games, utilities, or simulations using MoonlightScript.2. **Virtualized Operating System**
Build a lightweight OS using MoonlightScript to run multiple `.lvmb` programs concurrently on LunarVM.3. **Graphics and Game Development**
Integrate Raylib to build interactive games or dynamic simulations in MoonlightScript.---
## β Contribution Policy
This project is a personal learning and exploration journey, so contributions are not currently accepted. However, feel free to fork and explore the code!
---
## β€οΈ Special Thanks
Thanks for checking out **LunaVM** and supporting this exciting journey into virtual machines, memory management, and custom programming languages. π---
Let me know if youβd like to tweak anything further!
![image](https://github.com/user-attachments/assets/d8768ff0-185a-4096-8b5a-ab6ba9b6b36c)
![image](https://github.com/user-attachments/assets/bb2312e3-d0da-4910-a2e8-e77e6431b4e7)