How to Contribute
Yay, we are happy that you want to contribute to the language. Here is how you get started:
While this document might age and become outdated, the most current and up-to-date instructions can always be found in the Github Actions workflow file. It might be a bit tricky to read but does contain all the necessary information.
You need to have the following software installed to build and use Effekt:
- JDK >= 1.8 and Maven
- sbt (https://www.scala-sbt.org)
- npm (to package and install the Effekt compiler)
- (Maven – only for creating releases)
Depending on the backend you want to use / work on, you also need:
- JS backend (default): Node.js (>= 10) and npm
- Chez-Scheme backend: Chez Scheme
- LLVM backend (wip): LLVM > 12 and gcc
Why three package management tools? The main build tool we use is sbt, but we use Maven to extract dependencies and aggregate license files of the library dependencies. Finally, we use npm simply as a way to deploy the language as an npm package.
Compiling the Effekt Compiler
Great that you have made it this far! We can now finally compile the Effekt project. To do so, first clone the repository as well as all of its submodule dependencies:
$ git clone --recurse-submodules firstname.lastname@example.org:effekt-lang/effekt.git
Note: We recommend you to use the following git config that will always keep the submodules in sync with the current branch that you are working on:
git config --global submodule.recurse true
If despite your best efforts the submodule still resides in an undesirable state, you can always re-initialize it:
$ rm -rf kiama/ && git submodule update
Inside the repository’s root, enter an
sbt shell, select your platform of
choice and run all unit tests to verify your setup:
$ cd effekt $ sbt sbt:root> project effektJVM sbt:effekt> test ...
Ignoring a handful of spurious warnings, a wall of green text should indicate all tests passing.
As mentioned before, the Effekt compiler can be run as a Java program, but
with two projects:
Locally Installing your Compiler Build
The easiest way to install your version of Effekt is by running
$ sbt sbt:root> project effektJVM sbt:effekt> install ...
Please note that this also requires
mvn to generate license files.
Generating the Effekt Binary
The Effekt binary is actually just a simple wrapper that invokes
java -jar effekt.jar.
To generate the jar file and assemble everything simply run:
$ sbt deploy
Afterwards, you can find the
effekt.jar in the
Working on the “Standard Library”
The Effekt standard library is still in its infancy. If you want to work on
it, we recommend the following workflow: Check out the effekt repository
and start the repl in the project directory. This will enable using the
library in folder
lib instead of the bundled one.
You can now go ahead and create a test file in
examples that uses
your new / improved library module, like
module examples/mynewmoduletester import io/mynewmodule def main() = mynewfunction()
This makes sure that you are always interacting with the most up-to-date version of the standard library you are currently working on.