A JVM written in Rust.

Overview

Kate

Kate is a JVM written in Rust, it's a passion project that aims to improve my knowledge of systems development and JVM internals.

Contributions are welcome (see CONTRIBUTING.md). Check the issues for any "up for grabs" issues.

This is still a very early stages project but documentation should be coming soon ™️ .

External resources

Comments
  • Minor CI improvments

    Minor CI improvments

    Confirmation

    Changes

    • [ ] Internal
    • [ ] Feature
    • [ ] Documentation
    • [x] Other: CI workflow

    Description

    Minor CI changes, adds names to workflows so it looks like Generate Documentation and not .github/workflows/docs.yml / generate-docs. Also makes the linting workflow not run when comments get made or edited, which cuts down on unnecessary runs.

    opened by dheerajpv 7
  • feat(ci): add automatic docs generation

    feat(ci): add automatic docs generation

    Confirmation

    Changes

    • [ ] Internal
    • [ ] Feature
    • [ ] Documentation
    • [x] Other: CI actions workflow

    Closes Issue: #22

    Description

    Add an actions workflow to generate documentation (using cargo doc) and host it on GitHub pages. Runs on the same triggers as the release workflow, and uses the code from the tagged commit. There's a preview available on my repository's page: https://dheerajpv.github.io/JVM/

    opened by dheerajpv 7
  • Style improvements

    Style improvements

    Confirmation

    Changes

    • [x] Internal
    • [ ] Feature
    • [ ] Documentation
    • [ ] Other: _____

    Closes Issue: NaN

    Description

    Various style improvements

    • Improved error handling, less unwrap
    • Semicolon consistency
    • Re-use locks, drop some locks earlier (could this somehow cause deadlocks or races?)
    • Algorithm improvements (make use of Vec::retain and Iterator::find)
    • Make use of nested OR-patterns
    • Other small style changes in 2b247f01ff57f418c1207f61da36031fdbdd6f7f
    • Adds FIXME for a logic error in util.rs

    TODOs:

    • [x] In heap/mod.rs / Heap::prune, can we find a better way to assign counter?
    • [x] Are the API changes in da6cd2735fa0ae902ea6952d119fda1351a1b1a1 reasonable? (in particular the changes to Stack::flip)
    • [x] Is there a logic error in areturn.rs? (see the TODO)
    • [x] Potentially avoid block comments as per RFC 1574
    • [x] Replace _keyword variable/field names with something like keyword_
    • [x] Test that this doesn't break anything
    opened by gpluscb 4
  • Actions workflow for automated releases

    Actions workflow for automated releases

    Confirmation

    Changes

    • [ ] Internal
    • [ ] Feature
    • [ ] Documentation
    • [x] Other: CI workflow

    Closes Issue: #15

    Description

    Adds a GitHub actions workflow to build a draft release when a tag (beginning with "v") is pushed.

    opened by dheerajpv 2
  • Try reading from filename without `.class` added

    Try reading from filename without `.class` added

    Confirmation

    Changes

    • [x] Internal
    • [ ] Feature
    • [ ] Documentation
    • [ ] Other: _____

    Closes Issue: NaN

    Description

    Previously the CLI expected the filename to be like examples/ExitCode and it would add the .class extension itself. But this interferes with shell autocompletion as shells would include the file extension. This PR fixes this inconvenience by trying to load the file without .class added to the end if the first attempt at reading it returns a ErrorKind::NotFound.

    opened by dheerajpv 1
  • Implement CI tools

    Implement CI tools

    Brief summary We should add compilation checks, linting, etc for PRs. This should be in the form of a github action. If a compilation error or linter warning occurs, the PR will not be mergeable.

    Progress

    • [ ] Compilation checks
    • [ ] Linting checks

    Status Ongoing

    up for grabs todo 
    opened by nullishamy 1
  • Actions workflow for building releases

    Actions workflow for building releases

    Brief summary Implement a GitHub Actions workflow that builds and creates a release draft when a tag is pushed.

    Progress

    • [x] Make workflow
    • [x] Make it create a draft release

    Status Ongoing

    up for grabs todo 
    opened by dheerajpv 1
  • Improve code style

    Improve code style

    This primarily normalizes naming with Rust conventions. It also applies rustfmt, addresses a couple misc warnings, and removes dead code warnings for development.

    opened by ThatsNoMoon 1
  • Host docs on GitHub Pages

    Host docs on GitHub Pages

    Brief summary We should host the documentation for the project on GitHub Pages, which gets updated by a GitHub Action. This action will base off of the docs branch for docs generation.

    The action should run only on release so that we only push stable docs to the docs repo, as not to add dev features to docs that aren't stabilised yet.

    The action should end up hosting the docs on https://amy.is-a.dev/JVM/ though this will require extra tooling as rust doc does not generate GH pages compatible HTML. If such a hosting solution is not possible, we will have to investigate renaming to make the URL usable.

    Progress

    • [x] Enable GitHub Pages for the repository
    • [x] Add action to build docs

    Status Ongoing

    documentation up for grabs todo 
    opened by nullishamy 0
  • Formatting and Clippy checks on PRs

    Formatting and Clippy checks on PRs

    Currently runs on push, but this is only for testing## Confirmation

    Changes

    • [ ] Internal
    • [ ] Feature
    • [ ] Documentation
    • [x] Other: CI

    Closes Issue: #17

    Description

    Add checks to pull requests, CI will check cargo fmt and cargo clippy when a PR is opened, edited, marked for review, or committed to.

    opened by dheerajpv 0
  • Document the project

    Document the project

    Confirmation

    Changes

    • [ ] Internal
    • [ ] Feature
    • [x] Documentation
    • [ ] Other: _____

    Closes Issue: #14

    Description

    This is a tracking PR which tracks the documentation of the project. We are aiming to have the entire project documented with examples.

    opened by nullishamy 1
  • Store the stdlib in Git

    Store the stdlib in Git

    Brief summary We need to store the stdlib in an easy to access location. At the minute, a JAR file is not possible because we cannot load those. Instead, we should use a Git sub module to store the stdlib until we can read JAR files.

    Progress

    • [ ] Create org
    • [ ] Create stdlib repository
    • [ ] Upload stdlib into versioned folders
    • [ ] Link stdlib repository into the JVM
    • [ ] Add conditional compilation for supported std versions

    Status Ongoing

    todo 
    opened by nullishamy 1
  • Working towards a

    Working towards a "Hello World"

    Brief summary This issue will track our progress toward a "Hello world" which will be the next major milestone for the project.

    Progress

    • [ ] Loading of constant strings
    • [ ] std[out/err/in]
    • [ ] PrintStream implementation

    Status Ongoing, requires: #3 (Native methods) #5 (Threading)

    todo 
    opened by nullishamy 1
  • Keypress listener will not start listening until VM closes

    Keypress listener will not start listening until VM closes

    Describe the bug The keypress listener, used to read keypresses and render the TUI, will not start listening until the VM ceases execution. This is problematic as it means the user cannot use the TUI whilst the VM is in operation. Lots of TUI features are designed around real time monitoring.

    To Reproduce Steps to reproduce the behavior:

    1. Launch VM with TUI enabled
    2. Attempt to use TUI
    3. Observe non responsive behaviour

    Expected behavior The TUI should respond to user input.

    Screenshots N/A

    Additional context https://github.com/nullishamy/JVM/blob/main/src/main.rs#L80 needs to be moved above start() and put into a task.

    bug up for grabs 
    opened by nullishamy 0
  • Documentation

    Documentation

    Brief summary Document the entire project. This includes inline comments for methods and structs, as well as general documentation for project design and data flow.

    Progress

    • [ ] Document methods
    • [ ] Document structs
    • [ ] Document interface
    • [ ] Document compiler flow
    • [ ] Document optimisation stages
    • [ ] Document memory management
    • [ ] Spec links #9

    Status Ongoing

    documentation up for grabs todo 
    opened by nullishamy 1
  • JAR file support

    JAR file support

    Brief summary In the future, we will add support for loading JAR files.

    Progress

    • [ ] Loading JAR files
    • [ ] Executing JAR files with a main class
    • [ ] Reading dependencies from JAR files
    • [ ] Classpath support

    Status Backburner

    todo frozen 
    opened by nullishamy 0
Releases(v0.1)
Owner
Amy
i do code things. trans-femme (she/her)
Amy
Native Ruby extensions written in Rust

Ruru (Rust + Ruby) Native Ruby extensions in Rust Documentation Website Have you ever considered rewriting some parts of your slow Ruby application? J

Dmitry Gritsay 812 Dec 26, 2022
A script language like Python or Lua written in Rust, with exactly the same syntax as Go's.

A script language like Python or Lua written in Rust, with exactly the same syntax as Go's.

null 1.4k Jan 1, 2023
An npm scripts runner written in Rust.

dum replaces npm run. Instead of waiting 200ms for your npm client to start, it will start immediately. ?? You can help the author become a full-time

EGOIST 1.3k Jan 9, 2023
swc is a super-fast compiler written in rust; producing widely-supported javascript from modern standards and typescript.

Make the web (development) faster. SWC (stands for Speedy Web Compiler) is a super-fast TypeScript / JavaScript compiler written in Rust. It's a libra

swc 25.4k Dec 31, 2022
A Web-App written in Rust with Yew, using the same SyntaxHighlighter from Google Code Archive as planetb.ca

PlanetB SyntaxHighlighter About This is a small app, providing static files to have a frontend to format your code so you can paste it with styles to

Christof Weickhardt 2 Dec 14, 2022
A simple Pascal interpreter written in rust.

rascal A simple Pascal interpreter written in rust. Usage Download the latest rascal executable from the release page. Run the executable. rascal.exe

null 47 Dec 7, 2022
My 'Lugli' language compiler for learning purposes, written in rust. 🥰🤠

Lugli language compiler My 'Lugli' language compiler for learning purposes, written in rust. This language is to be a subset for other purposes, for e

Vinicios Lugli 3 Nov 2, 2022
A parser, compiler, and virtual machine evaluator for a minimal subset of Lua; written from scratch in Rust.

lust: Lua in Rust This project implements a parser, compiler, and virtual machine evaluator for a minimal subset of Lua. It is written from scratch in

Phil Eaton 146 Dec 16, 2022
RustPython - A Python Interpreter written in Rust

RustPython A Python-3 (CPython >= 3.9.0) Interpreter written in Rust ?? ?? ?? . Usage Check out our online demo running on WebAssembly. RustPython req

null 13.3k Jan 2, 2023
A simple interpreter language written in Rust.

Glang Backstory Hello and welcome to the Glang git repository. Game Slang or in short Glang is a super simple interpreted language written in Rust wit

null 6 Nov 12, 2022
A lightweight sandbox sim written in Rust.

Rusty Sandbox A lightweight sandbox sim written in Rust. Play via Browser (WASM) | Compile by yourself This is a quick hobby project written to practi

JSKitty 25 Oct 23, 2022
⚡ Fast Web Security Scanner written in Rust based on Lua Scripts 🌖 🦀

⚡ Fast Web Security Scanner written in Rust based on Lua Scripts ?? ??

Rusty Sec 14 Nov 28, 2022
Lua bytecode parser written in Rust using nom, part of metaworm's lua decompiler

luac-parser (中文) lua字节码解析器, 目前支持 lua51, lua53, lua54 这是目前效果最好的lua反编译器 metaworm's luadec 的一部分 可以基于此代码定制你所需的lua字节码解析器,编译成WASM,让metaworm's luadec加载使用,来反编

metaworm 4 Mar 16, 2023
Freeze.rs is a payload toolkit for bypassing EDRs using suspended processes, direct syscalls written in RUST

Freeze.rs More Information If you want to learn more about the techniques utilized in this framework, please take a look at SourceZero Blog and the or

Optiv Security 385 May 9, 2023
Slitter is a C- and Rust-callable slab allocator implemented primarily in Rust, with some C for performance or to avoid unstable Rust features.

Slitter is a less footgunny slab allocator Slitter is a classically structured thread-caching slab allocator that's meant to help write reliable long-

Backtrace Labs 133 Dec 5, 2022
A Rust crate for automatically generating C header files from Rust source file.

Please be aware that this crate is no longer actively maintained, please look into the much more feature rich cbindgen instead. rusty-cheddar rusty-ch

Sean Marshallsay 190 Nov 12, 2022
Rust-ffi-guide - A guide for doing FFI using Rust

Using unsafe for Fun and Profit A guide to traversing the FFI boundary between Rust and other languages. A rendered version is available here. This gu

Michael Bryan 261 Dec 1, 2022
Rust library for build scripts to compile C/C++ code into a Rust library

A library to compile C/C++/assembly into a Rust library/application.

Alex Crichton 1.3k Dec 21, 2022
Rust based WASM/JS bindings for ur-rust

ur-wasm-js WASM/JS bindings for the ur-rust rust library Getting started Installation Either build the library yourself with wasm-pack or install for

Lightning Digital Entertainment 5 Feb 28, 2024