jabsc
jabsc
is ABS compiler to Java source.
Usage
Maven Plugin
We have an example module to use Maven plugin for jabsc.
Java
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>
Tests
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.
Tests: compiler/must/
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 | |
Benchmarks
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:
Build Parser/Lexer
You need the following only if you modify src/main/resources/ABS.cf
to generate the Lexer and Parser:
- Ensure you have
bnfc
tool on yourPATH
- Run
clean.sh
- Run
build.sh
- The build should pass