Skip to content

Maven plugin that applies a number of optimizations to your Bytecode, using EOLANG and ๐œ‘-calculus, trying to make it work faster

License

Notifications You must be signed in to change notification settings

objectionary/hone-maven-plugin

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

Bytecode Optimizing Maven Plugin

mvn Maven Central Javadoc License Hits-of-Code Lines of code codecov

This Apache Maven plugin may optimize your Bytecode after compilation, to make it work faster. Just add this to your pom.xml file (you must have Docker installed too):

<project>
  [..]
  <build>
    <plugins>
      <plugin>
        <groupId>org.eolang</groupId>
        <artifactId>hone-maven-plugin</artifactId>
        <version>0.0.16</version>
        <executions>
          <execution>
            <goals>
              <goal>build</goal>
              <goal>optimize</goal>
              <goal>rmi</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
</project>

The plugin will do exactly the following:

  1. Take Bytecode .class files from the target/classes/ directory and copy all of them to the target/classes-before-hone/ directory (as a backup).
  2. Using jeo-maven-plugin, transform .class files to .xmir format, which is EO in XML, and place them into the target/generated-sources/jeo-disassemble/ directory.
  3. Using eo-maven-plugin, convert .xmir files to .phi files with ๐œ‘-calculus expressions, and place them into the target/generated-sources/phi/ directory.
  4. Using normalizer, apply a number of optimizations to ๐œ‘-calculus expressions in the .phi files and place new .phi files into the target/generated-sources/phi-optimized/ directory.
  5. Using eo-maven-plugin, convert .phi files back to .xmir files and place them into the target/generated-sources/unphi/ directory.
  6. Using jeo-maven-plugin, transform .xmir files back to Bytecode and place .class files into the target/classes/ directory.

The effect of the plugin should be performance-positive (your code should work faster) along with no functionality degradation (your code should work exactly the same as it worked before optimizations). If any of these is not true, submit a ticket, we will try to fix.

How to Contribute

Fork repository, make changes, then send us a pull request. We will review your changes and apply them to the master branch shortly, provided they don't violate our quality standards. To avoid frustration, before sending us your pull request please run full Maven build:

mvn clean install -Pqulice

You will need Maven 3.3+, Java 11+, and Docker installed.

You may also want to run this (having GNU Make installed):

make quick

This will do exactly what is happening in Docker container, but without Docker. This may be a faster way to check how the pipeline works.

The versions of EO, JEO, and OPEO are defined in the in-docker-pom.xml file.