Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/louisjenkinscs/llvm-jvm
[W.I.P] A Just-In-Time Java Virtual Machine written in Haskell
https://github.com/louisjenkinscs/llvm-jvm
bytecode educational haskell interpreter java java-bytecode jvm language monad monadic scala virtual-machine
Last synced: 3 days ago
JSON representation
[W.I.P] A Just-In-Time Java Virtual Machine written in Haskell
- Host: GitHub
- URL: https://github.com/louisjenkinscs/llvm-jvm
- Owner: LouisJenkinsCS
- License: bsd-3-clause
- Created: 2016-10-23T01:51:58.000Z (about 8 years ago)
- Default Branch: master
- Last Pushed: 2021-08-23T19:06:23.000Z (about 3 years ago)
- Last Synced: 2023-03-01T06:32:31.633Z (over 1 year ago)
- Topics: bytecode, educational, haskell, interpreter, java, java-bytecode, jvm, language, monad, monadic, scala, virtual-machine
- Language: Haskell
- Homepage:
- Size: 47.8 MB
- Stars: 22
- Watchers: 2
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# LLVM-JVM
**Code for Functional Bytecode Interpreter (Proof-of-Concept) has been moved here: https://github.com/LouisJenkinsCS/Functional-JVM-Bytecode-Interpreter**
LLVM-JVM is an attempt at creating a Java Virtual Machine with Just-In-Time compilation
that uses LLVM as the backend, similar to [Azul System's](https://www.azul.com/called-new-jit-compiler-falcon/).
This project, however, is an educational one and likely will never be production-ready.
This project has been funded by Bloomsburg University's Professional Experience Grant (PEG).## Note
**Warning:** The code is a complete and utter mess! You've been warned!
LLVM-JVM uses a ripped and modified version of [MateVM](https://github.com/MateVM/MateVM)'s runtime, while
supplying its own frontend to LLVM. As such, everything contained in the 'MateVMRuntime'
folder is code that belongs to the original authors, and I do not take credit for anything
other than the modest changes I make, if any.### Why not just fork the MateVM project?
The MateVM project has been inactive for ~5 years, and considering that I would need to
strip a lot of it away, such as Hoopl and Harpy, I would just take the best parts of
them and give proper attribution. This not only saves me considerable time, which
is something I have very little of, but also allows me to have access to the issue-tracker
as well as other things.## Progress
Note: the criteria for progress is bars minimum, such as basic integer arithmetic and if-else statements. If it is checked it does not mean support for all of it, just that the ground work is done and can easily be extended on.
- [X] Basic Arithmetic
- [X] Integer
- [ ] Float
- [ ] Double
- [ ] Long
- [X] Basic Control Flow
- [X] Loops
- [X] Conditionals
- [X] LLVM optimization passes
- [X] Global Variables
- [X] Static Fields
- [ ] Instance Fields
- [ ] Dynamic ClassLoading
- [ ] JIT at Runtime
- [ ] Garbage Collection
- [ ] Boehms## Building
**Requirements:**
1. LLVM w/ llvm-config
2. Haskell
3. Java7+ (for GUI)To build, run 'cabal install' and 'ghc Main.hs -o Main.exe', then 'java -jar GUI/llvm-jvm-frontend.jar'
if you desire the GUI.