A just-for-fun™ JVM implementation in Rust

Related tags

Command-line CaoRVM
Overview

Caoimhe's Rust JVM (CaoRVM)

This is a just-for-fun™ JVM implementation in Rust. This project was inspired by one of my previous C++ projects, CaoVM.

Status

I am currently working on Class File Parsing.

Why?

I've been coding in Java for almost 10 years now (wow), it was the first language I learned after I was introduced to coding when I was 7 years old. I was always fascinated by how it worked, but never looked too deep into it until I explored the world of SpongePowered/Mixin, ASM, and other runtime class modification utilities.

These utilities made me want to know more about Java and the JVM, so I made my own mediocre runtime modification library - Injector. This satisfied my quest for knowledge at the time, but I eventually just wanted to implement my own JVM. This sparked me to make CaoVM :^)

What was wrong with CaoVM?

Whilst I didn't get far with the project, I felt like I was being restrained by some of the shortcomings of C++:

  • It was a lot of effort to implement something, the Lagom collection of libraries helped a lot, but everything still felt like it could be done better.
  • Rust enums are superior to C++'s enum system, or even Java's enum system. When I'm implementing the actual virtual machine, I feel like the enum system will help a lot when dealing with values, etc.
  • I want to learn more Rust! I love C++, and I will still use it for my operating systems projects, and of course contributing to SerenityOS. But, it just didn't feel right for this project. Rust feels like a much better candidate, and I feel like there's so much that I still have to learn about Rust.

Goals

  • To create a JVM implementation which is able to run a hello world program.
    • This doesn't have to neccessarily be spec-compliant, however we should try to implement of the fundemental details in the Java Virtual Machine spec to try to be as compatible as possible.
  • To have fun! This project isn't serious, it's just something I've been interested in for so long.

License

This project is licensed under the MIT license.

You might also like...
Just a UNIX's cat copy, but less bloated and in Rust.
Just a UNIX's cat copy, but less bloated and in Rust.

RAT The opposite of UNIX's cat, less bloated, and in Rust. About the project The idea of this CLI is "A CLI program that is basically UNIX's cat comma

A simple CLI I made while practicing rust to easily make QR codes with just one command, all in your terminal.
A simple CLI I made while practicing rust to easily make QR codes with just one command, all in your terminal.

Welcome to rust-qrcode-cli 👋 A CLI I made while practicing rust to easily make QR codes with just one command, all in your terminal. Install git clon

Just a collection of tiny Rust projects I've did. None warrant a whole repo rn

Daily Rust I try to write some tiny programs daily to gradually improve my Rust skills! Current Program Descriptions first_prog.rs: My first program a

A visual novel engine written by Rust. Just Ayaka.
A visual novel engine written by Rust. Just Ayaka.

Ayaka Ayaka is currently a project for OSPP 2022. About the name The frontend is Ayaka. The runtime is Ayaka. The script is Ayaka. Just Ayaka. What we

Just a simple object renderer, written in under 500 lines using Rust.
Just a simple object renderer, written in under 500 lines using Rust.

All cargoes that the project runs are: bitflags: a crate for defining bitflag types cfg-if: a small macro crate for defining cfg-based - conditional c

Rust low-level minimalist APNG writer and PNG reader with just a few dependencies with all possible formats coverage (including HDR).

project Wiki https://github.com/js29a/micro_png/wiki at glance use micro_png::*; fn main() { // load an image let image = read_png("tmp/test.

Python package for topological data analysis written in Rust. Not limited to just H0 and H1.

Topological Data Analysis (TDA) Contents Installation Compiling from source Roadmap TDA is a python package for topological data analysis written in R

🤖 just is a handy way to save and run project-specific commands.

just just is a handy way to save and run project-specific commands. (非官方中文文档,这里,快看过来!) Commands, called recipes, are stored in a file called justfile

zman is a CLI year (time) progress that small, fast, and just one single binary.
zman is a CLI year (time) progress that small, fast, and just one single binary.

zman zman is a CLI year (time) progress that small, fast, and just one single binary. Features Show year progress Show month, and week progress Show r

Owner
Caoimhe Ní Bhroin
Caoimhe Ní Bhroin
A rust binary that will flip one or more bits of a file (mostly for messing with images for fun).

file-bitflipper A rust binary that will flip one or more bits of a file (mostly for messing with images for fun). Example (bitflipped bentley) Usage $

null 1 Aug 31, 2022
A fun rust terminal program so you can make Christmas trees!

Xmastree 2021 A fun christmas tree where you can add ornaments! Then, you can export the file into either: a rust file a txt file About Taking a break

Junhao 2 Dec 21, 2021
82 fun and easy to use, lightweight, spinners for Rust, with minimal overhead.

Spinners for Rust 82 fun and easy to use, lightweight, spinners for Rust, with minimal overhead, all the way from simple dots, to fun emoji based "spi

Juliette Cordor 2 May 17, 2022
Rust port of https://github.com/hunar4321/life_code with some fun features.

Smarticles A Rust port of Brainxyz's Artificial Life simulator with some fun features. A simple program to simulate primitive Artificial Life using si

Chevy Ray Johnston 15 Dec 24, 2022
collaboration project focusing on rust. Made for fun

Collaboration space for on rust project(s) setup Pull down the repo first then do the following steps cd into lil-devils cargo fetch cargo build cargo

Blake Costa 2 Nov 8, 2022
An operating system written in Rust (for fun and educational purposes)

Prestige Prestige is an operating system written for fun and educational purposes in Rust. It targets the x86-64 architecture and can run on common em

binds 3 Nov 14, 2022
🚀 TaskFly - The Fun Cron Alternative

?? TaskFly - The Fun Job Scheduler Daemon Experience a whole new way of scheduling tasks with TaskFly. Representing tasks' urgency with emojis, TaskFl

Zohar Yzgiaev 4 Jul 1, 2023
Simple Programming Language for fun.

Chap Chap is an Easy to learn, dynamic, interpretive, isolated, and keywordless scripting language written in Rust. It is useful when you want your us

Ali Ghahremani 36 Oct 6, 2023
My own image file format created for fun! Install the "hif_opener.exe" to open hif files. clone the repo and compile to make your own hif file

Why am i creating this? I wanted to create my own image format since I was 12 years old using Windows 7, tryna modify GTA San Andreas. That day, when

hiftie 3 Dec 17, 2023
A fun app for all purposes!

Setup Install cargo-mobile2 cargo install --git https://github.com/tauri-apps/cargo-mobile2 To update the libray just run: cargo mobile update Now in

null 3 Aug 12, 2024