ScalaLoci is a distributed programming language embedded into Scala. The language provides a coherent model based on placement types that enables reasoning about distributed data flows, supporting multiple software architectures via dedicated language features and abstracting over low-level communication details and data conversions. ScalaLoci simplifies developing distributed systems, reduces error-prone communication code and favors early detection of bugs.
-
Enable support for macro annotations in your
build.sbt
:-
for Scala 2.13
scalacOptions += "-Ymacro-annotations"
-
for Scala 2.11 or 2.12 (Macro Paradise Plugin)
addCompilerPlugin("org.scalamacros" % "paradise" % "2.1.1" cross CrossVersion.patch)
-
-
Add the ScalaLoci dependencies that you need for your system to your
build.sbt
:-
ScalaLoci language (always required)
libraryDependencies ++= Seq( "io.github.scala-loci" %% "scala-loci-language" % "0.5.0" % "compile-internal", "io.github.scala-loci" %% "scala-loci-language-runtime" % "0.5.0")
-
Transmitter for the types of values to be accessed remotely (built-in Scala types and standard collections are directly supported without additional dependencies)
-
REScala reactive events and signals
libraryDependencies += "io.github.scala-loci" %% "scala-loci-language-transmitter-rescala" % "0.5.0"
-
-
Network communicators to connect the different components of the distributed system
-
TCP [JVM only]
libraryDependencies += "io.github.scala-loci" %% "scala-loci-communicator-tcp" % "0.5.0"
-
WebSocket (using web browser APIs) [JS only, client only]
libraryDependencies += "io.github.scala-loci" %% "scala-loci-communicator-ws-webnative" % "0.5.0"
-
WebSocket (using Akka HTTP) [JVM only]
libraryDependencies += "io.github.scala-loci" %% "scala-loci-communicator-ws-akka" % "0.5.0"
-
WebSocket (Play integration using Akka HTTP) [JVM only]
libraryDependencies += "io.github.scala-loci" %% "scala-loci-communicator-ws-akka-play" % "0.5.0"
-
WebSocket (using Javalin) [JVM only, server only]
libraryDependencies += "io.github.scala-loci" %% "scala-loci-communicator-ws-javalin" % "0.5.0"
-
WebSocket (using Jetty) [JVM only]
libraryDependencies += "io.github.scala-loci" %% "scala-loci-communicator-ws-jetty" % "0.5.0"
-
WebRTC (using web browser APIs) [JS only]
libraryDependencies += "io.github.scala-loci" %% "scala-loci-communicator-webrtc" % "0.5.0"
-
-
Serializer for network communication
-
µPickle serialization
libraryDependencies += "io.github.scala-loci" %% "scala-loci-serializer-upickle" % "0.5.0"
-
Circe serialization
libraryDependencies += "io.github.scala-loci" %% "scala-loci-serializer-circe" % "0.5.0"
-
Jsoniter Scala serialization
libraryDependencies += "io.github.scala-loci" %% "scala-loci-serializer-jsoniter-scala" % "0.5.0"
-
-
ScalaLoci’s underlying network communication library abstracting over different network protocols can be used directly without ScalaLoci’s language abstractions. The library provides pluggable communicators for different network protocols and transmitters implementing the remote transmission semantics for values of different types.
Add the ScalaLoci dependencies that you need for your system to your build.sbt
:
-
ScalaLoci communication library (always required)
libraryDependencies += "io.github.scala-loci" %% "scala-loci-communication" % "0.5.0"
-
Transmitter for the types of values to be accessed remotely (built-in Scala types and standard collections are directly supported without additional dependencies)
-
REScala reactive events and signals
libraryDependencies += "io.github.scala-loci" %% "scala-loci-transmitter-rescala" % "0.5.0"
-
-
Network communicators to connect the different components of the distributed system (same as above)
-
Serializer for network communication (same as above)
-
Examples
Simple: Simple showcases of ScalaLoci using small examples
Variants: More complete examples implemented in different variants
-
Case Studies
Flink: Reimplementation of the task distribution system of Apache Flink in ScalaLoci
Gearpump: Reimplementation of the worker assignment logic of Apache Gearpump in ScalaLoci
Play Scala.js: Reimplementation of the Play Framework with Scala.js Showcase in ScalaLoci