Giter Club home page Giter Club logo

jacobin's Introduction

Go version Workflow GitHub commit activity

jacobin

A more-than-minimal JVM written in Go.

Status

Intended feature set:

  • Java 17 functionality, but...
  • No JNI (Oracle intends to replace it; see JEP 389)
  • No security manager (Oracle intends to remove it; see JEP 411)
  • No JIT
  • Somewhat less stringent bytecode verification
  • Does not enforce Java 17's sealed classes

What we've done so far and what we need to do:

Command-line parsing

  • Gets options from the three environment variables. Details here
  • Parses the command line; identify JVM options and application options
  • Responds to most options listed in the java -help output

To do:

  • Handling @files (which contain command-line options)
  • Parsing complex classpaths

Class loading

  • Correctly reads and parses most classes
  • Extracts bytecode and parameters needed for execution
  • Automated pre-loading of core Java classes (Object, etc.)
  • java.*, javax.*, jdk.*, sun.* classes are loaded from the JAVA_HOME directory (i.e., from JDK binaries)
  • Handles JAR files

To do:

  • Handle more-complex classes
  • Handle interfaces
  • Handle inner classes

Verification, Linking, Preparation, Initialization

  • Performs format check of class file.
  • Linking, preparation, and initialization -- minimally and only as needed at execution time

To do:

  • Verification
  • Robust preparation and initialization

Execution

  • Execution of bytecodes โœ๏ธ The primary focus of current coding work
    191 bytecodes fully operational, including one- and multi-dimensional arrays
  • Static initialization blocks
  • Throwing exceptions
  • Running native functions (written in go). Details here.

To do:

  • invokedynamic
  • Calls to superclasses
  • Inner and nested classes
  • Exception-tree walking
  • Annotations

Instrumentation

  • Instruction-level tracing (use -trace:inst to enable this feature)
  • Extensive logging data (use -verbose:finest to enable. Caveat: this produces a lot of data)

To do:

  • Emit instrumented data to a port, for reading/display by a separate program.

Garbage Collection

GC is handled by the golang runtime, which has its own GC

Understanding the Code

A detailed roadmap to the code base can be found in the wiki.

If you want to test Jacobin

At present, we're not looking for testers because we know the missing features and we're working on them. Testing, at this point, will likely result in frustration. However, if for your own enjoyment, you still want to try it out, see directions and cautions on our Release Page. (If you want some fun, run your program on Jacobin with the -trace:inst option and watch the executing Java bytecodes whiz by along with the changing contents of the op stack.)

We expect/hope/trust that in 2024, we'll be ready to ask interested users to test Jacobin on real programs and share their feedback with us.

Thanks

The project's home page carries a lengthy note at the bottom that expresses our thanks to vendors and programmers who have made the Jacobin project possible. They are many and we are deeply grateful to them.

jacobin's People

Contributors

platypusguy avatar texadactyl avatar suresk avatar felixonmars avatar eltociear avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.