Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
research:software:effscript [2015/06/04 13:43] – mtoro | research:software:effscript [2015/08/19 14:02] (current) – mtoro | ||
---|---|---|---|
Line 1: | Line 1: | ||
====== EffScript: Practical Effects for Scala ====== | ====== EffScript: Practical Effects for Scala ====== | ||
+ | |||
+ | {{bib> | ||
EffScript is a small domain-specific language for writing tailored effect disciplines for Scala. In addition to being customizable, | EffScript is a small domain-specific language for writing tailored effect disciplines for Scala. In addition to being customizable, | ||
Line 8: | Line 10: | ||
The implementation of the Practical Effect system is developed as a compiler plugin for the Scala programming language. The plugin is based on the plugin developed by Rytz //et al// and is composed of two sub plugins to implement bidirectional checking: the effect inference plugin, and the effect checking plugin. The effect inference plugin is a modification of the one developed by Rytz //et al//, extended with support for gradual effects and the customizable effect system. In relation to bidirectional checking, Scala has inference of effect, therefore there are cases where there is absence of effect annotations. The effect inference plugin is necessary to annotate function abstractions that do not have effect annotations. This information about effect inference is used by the effect checking plugin to check and adjust | The implementation of the Practical Effect system is developed as a compiler plugin for the Scala programming language. The plugin is based on the plugin developed by Rytz //et al// and is composed of two sub plugins to implement bidirectional checking: the effect inference plugin, and the effect checking plugin. The effect inference plugin is a modification of the one developed by Rytz //et al//, extended with support for gradual effects and the customizable effect system. In relation to bidirectional checking, Scala has inference of effect, therefore there are cases where there is absence of effect annotations. The effect inference plugin is necessary to annotate function abstractions that do not have effect annotations. This information about effect inference is used by the effect checking plugin to check and adjust | ||
+ | ===== Getting Started Guide ===== | ||
==== The implementation ==== | ==== The implementation ==== | ||
- | The code and examples can be downloaded [[http:// | + | |
+ | The code and examples | ||
+ | |||
+ | Alternatively, | ||
+ | Access with username: ubuntu and password: ubuntu, all the code and examples can be found inside folder '' | ||
To run the examples, you need to have installed Scala (http:// | To run the examples, you need to have installed Scala (http:// | ||
Line 50: | Line 58: | ||
bottom: @simpleNoIO | bottom: @simpleNoIO | ||
- | pointcuts: | + | effspecs: |
def views.html.dummy.apply() prod @simpleNoIO | def views.html.dummy.apply() prod @simpleNoIO | ||
def views.html.foo.apply[T]() prod @simpleNoIO | def views.html.foo.apply[T]() prod @simpleNoIO | ||
Line 71: | Line 79: | ||
chmod +x copyCompilerLibs.sh #make sure the file has execution permissions | chmod +x copyCompilerLibs.sh #make sure the file has execution permissions | ||
./ | ./ | ||
- | </ | + | </ |
- Creating the symbolic links manually \\ Alternatively we can create the symbolic links manually. The '' | - Creating the symbolic links manually \\ Alternatively we can create the symbolic links manually. The '' | ||
cd playground | cd playground | ||
Line 177: | Line 185: | ||
</ | </ | ||
+ | ====== Step by Step Instructions ====== | ||
===== Architectural Constraints in Play ===== | ===== Architectural Constraints in Play ===== | ||
- | The effscript | + | The effscript |
To modify the discipline, just edit the '' | To modify the discipline, just edit the '' | ||
Line 345: | Line 353: | ||
* '' | * '' | ||
* '' | * '' | ||
- | * | + | |
For instance: | For instance: | ||
Line 363: | Line 371: | ||
sbt "run 2" | sbt "run 2" | ||
</ | </ | ||
+ | |||
+ | ===== Plotting the results ===== | ||
+ | To plot the benchmark results we have provided a zip file with the required files [[http:// | ||
+ | |||
+ | |||
+ | You will need the following python libraries (I recommend install them using " | ||
+ | - numpy | ||
+ | - matplotlib | ||
+ | |||
+ | Place the content of the zip file inside the benchmark folder. Then, edit '' | ||
+ | |||
+ | <code bash> | ||
+ | #!/bin/bash | ||
+ | n=1 | ||
+ | ... | ||
+ | </ | ||
+ | |||
+ | < | ||
+ | <p style=" | ||
+ | Before running the benchmarks we recommend re packaging the CollsSimple project. The reason for this is that at the moment of the artifact submission, CollsSimple was compiled and packaged using the bit vector version of the compiler plugins. Later we updated the effect compiler plugins but we did not repackage the project.</ | ||
+ | </ | ||
+ | <code bash> | ||
+ | cd CollsSimple | ||
+ | sbt package | ||
+ | </ | ||
+ | |||
+ | To run the benchmarks, at the root of the benchmarks folder run: | ||
+ | <code bash> | ||
+ | ./ | ||
+ | </ | ||
+ | |||
+ | The execution will output the results in '' | ||
+ | |||
+ | To plot the results just run: | ||
+ | <code bash> | ||
+ | python buildGraph.py | ||
+ | </ | ||
+ | It will generate a '' | ||
+ | |||