jabsc is ABS compiler to Java source.
We have an example module to use Maven plugin for jabsc.
To the use the compiler API:
Compiler compiler = new Compiler(sourceDirectory, outputDirectory);
compiler.compile();and make sure you have the proper Maven dependency:
<dependency>
<groupId>com.github.crisposs</groupId>
<artifactId>jabsc</artifactId>
<version>${version.jabsc}</version>
</dependency>Please refer to jabsc-tests for a set of examples. In addition, the feature coverage of the compiler is testing using reference examples by Haskell compiler for ABS.
The legend for the following tables:
- ✅ ABS source is compiled to Java and its test passes.
- ❌ ABS source is compiled to Java but its test fails.
- ❗ ABS source is compiled to Java but its test hangs.
‼️ ABS source fails to compile to correct Java.
| Test | State | Comment |
|---|---|---|
| Arith | ✅ | |
| AsyncToSameCOG | ✅ | |
| AwaitOnThis | ✅ | |
| AwaitOnThis2 | ✅ | |
| BenchLists | ✅ | |
| BenchMaps | ✅ | |
| CatchClauseBugInOtherBackends | Unreachable code is generated. | |
| ClassDisjointInterfs | ✅ | |
| Cosimo1 | ✅ | |
| Cosimo2 | ❗ | Object's field reference to a "future" is changed; thus the future is lost. |
| Cosimo3 | ❗ | Same as Cosimo2 |
| Cosimo4 | ✅ | |
| CosimoAsyncRun | ✅ | |
| Equality | ✅ | |
| ExceptionCase | ✅ | |
| ExceptionMod | Local variable is not final. Structural pattern matching on exceptions not supported. | |
| ExceptionPos | Unreachable code is generated. | |
| Fail1 | ✅ | |
| Fail2 | ✅ | |
| FieldToFunc | ✅ | |
| FixBugMonadicStyle | ✅ | |
| ForeignImport | ||
| Futures | ✅ | |
| HiddenMethod | ✅ | |
| Inference | ||
| InferenceNum | ||
| Interfaces | ✅ | |
| LeaderElection | ✅ | |
| Module | ❌ | Multi-module in the same file not supported. |
| MultipleTasksPerObject | ✅ | |
| MultiScope | ✅ | |
| NonMethods | ✅ | |
| Null | Usage of Java keywords such as null. |
|
| Parens | ✅ | |
| PingPong | ✅ | |
| PromiseSimple | ❌ | No definitive semantics. |
| PureCode | ❌ | |
| RunAndNonMethods | ✅ | |
| StatefulOO | ✅ | |
| Subtyping | ✅ | |
| Subtyping2 | ✅ | |
| TestAwait | ✅ | |
| TestMaps | ✅ | |
| TestRefs | ✅ | |
| TestThis | ✅ | |
| ThisSwitching | ✅ | |
| TypeSym | ❌ | Parametric/Algebraic types not supported. |
| UpcastingInt | ❌ | Type information not available during compilation. |
| While | ✅ |
We use [abs-bench][4] repository to perform benchmarks on generated Java code from jabsc. To run the benchmarks:
- Checkout abs-bench and switch to "jabsc" branch
$ git clone https://github.com/abstools/abs-bench.git
$ cd abs-bench
abs-bench$ git checkout jabsc- Run the benchmarks from jabsc root source directory
$ cd /path/to/jabsc
jabsc$ ./jabsc benchmark /path/to/abs-bench/synthetic_par/
- The results in CSV format and a GNU Plot result will be generated in
/tmp.
The latest run of the benchmarks:
You need the following only if you modify src/main/resources/ABS.cf to generate the Lexer and Parser:
- Ensure you have
bnfctool on yourPATH - Run
clean.sh - Run
build.sh - The build should pass