Additional remark for using Z3 with Free Arrays: At the moment, Z3 must still be downloaded and included manually. Releases for Z3 can be retrieved here.
Constraint-logic object-oriented programming: Combine the flexibility of OO/imperative languages with the expressiveness of constraint-logic programming! Muli builds upon Java and extends it with features adapted from constraint-logic programming. Muli offers free variables, constraints, encapsulated search, and a JVM-based runtime environment that executes your Muli programs.
Muli (the Münster Logic-Imperative Language) is a research project at the Chair for Practical Computer Science, ERCIS, University of Münster. In this project, we investigate the opportunities that result from combining imperative programming with constraint (logic) programming. To that end, we are developing a programming language that combines and integrates the two paradigms, thus facilitating constraint-logic object-oriented programming. In this GitHub project, you can find a compiler and a runtime environment that you need to get started with Muli.
Our progress and findings have been published in various outlets. See a selection (in reverse chronological order) below.
- Dageförde, J. C., & Teegen, F. (2019). Structured Traversal of Search Trees in Constraint-logic Object-oriented Programming. In Proceedings of the Declare 2019, Cottbus, Germany. arXiv:1908.10264 (open access)
- Dageförde, J. C., & Kuchen, H. (2019). A Compiler and Virtual Machine for Constraint-logic Object-oriented Programming with Muli. Journal of Computer Languages, 53, 63–78. doi:10.1016/j.cola.2019.05.001
- Dageförde, J. C., & Kuchen, H. (2019). Retrieval of Individual Solutions from Encapsulated Search with a Potentially Infinite Search Space. In Proceedings of the 34th ACM/SIGAPP Symposium On Applied Computing, Limassol, Cyprus. doi:10.1145/3297280.3298912
- Dageförde, J. C. (2019). Reference Type Logic Variables in Constraint-logic Object-oriented Programming. In Silva, J. (Ed.), Functional and Constraint Logic Programming (pp. 131–144). Lecture Notes in Computer Science: Vol. 11285. Springer. doi:doi.org/10.1007/978-3-030-16202-3_8, arXiv:1808.08185 (open access)
- Dageförde, J. C., & Kuchen, H. (2018). A Constraint-logic Object-oriented Language. In Proceedings of the 33rd ACM/SIGAPP Symposium On Applied Computing, Pau, Frankreich, 1185–1194. doi:10.1145/3167132.3167260
- Dageförde, J. C., & Kuchen, H. (2018). An Operational Semantics for Constraint-logic Imperative Programming. In Seipel, D., Hanus, M., & Abreu, S. (Eds.), Declarative Programming and Knowledge Management. WFLP 2017, WLP 2017, INAP 2017. (pp. 64–80). Lecture Notes in Computer Science: Vol. 10997. Cham: Springer. doi:10.1007/978-3-030-00801-7_5
- JDK Version 8 (e.g. OpenJDK 1.8.0)
- Git (e.g. git 2.14.1)
- Clone the repository and
cd
into it. - Install dependencies:
make
. - Develop the runtime inside the
muli-env
directory. There, use./gradlew run
to execute Muli; arguments (e. g., class to execute) can be added via-Dexec.args="..."
. - Develop the compiler inside
muli-lang
. There, run./gradlew jar
to package the compiler and run the created jar.
- Clone the repository and
cd
into it. - Run
make muli-env.zip
. The created filemuli-env.zip
is a full archive containing the Muli runtime and its dependencies. - Deploy that file where you need it by extracting its contents.
- Use a starter from
muli-env-*/bin/
according to your OS. - Run
make muli-lang.jar
. The jar archive contains the Muli compiler, ready for use.