ZIO在最大程度上提供了跨平台的一致接口,从而允许开发人员编写一次代码并将其部署到任何地方。但是,要注意的平台之间存在一些不可避免的差异。
JVM
ZIO支持 Java 版本 8 和更高版本以及 Scala 版本 2.11、2.12、2.13 和 Dotty。
在JVM上,Blocking
服务可用于将 effect 锁定在阻塞线程池,它已经包含在 ZEnv
中。有关阻塞同步副作用的进一步讨论,请参见关于 创建 Effects 的文档。
Scala.js
ZIO 支持 Scala.js 1.0.
尽管 ZIO 是零依赖的库,但这是建立在假设平台具有一些基本功能的基础上。特别是,由于 Scala.js 中缺少某些 java.time
方法的实现,因此用户必须自定义自己的java.time
依赖关系。 ZIO在其自己的内部测试套件中使用的是 scala-java-time。可以将其添加为依赖项,如下所示:
libraryDependencies ++= Seq(
"io.github.cquiroz" %%% "scala-java-time" % "2.0.0"
"io.github.cquiroz" %%% "scala-java-time-tzdb" % "2.0.0"
)
由于其单线程执行模型,Scala.js 不支持阻塞操作。因此,Blocking
服务不可用,也不包含在 ZEnv
中。另外,有一些方法 Scala.js 或者不支持,或者它们是不安全:
- 不支持
Console
服务中的readLine
方法,因为 Scala.js 没有使用 Scala 标准库实现从控制台上阻塞读取一行输入和其下的方法。 - 运行时上的
unsafeRun
,unsafeRunTask
和unsafeRunSync
方法是不安全。所有这些方法均会同步将值返回并且可能阻塞,如果 effect 中包含异步步骤,包括运行时为保证执行公平性导入的摆出点,用户应改用unsafeRunAsync
,unsafeRunAsync_
或unsafeRunToFuture
方法。
Scala Native
目前对 Scala Native 的支持尚处于试验阶段。当支持 Scala Native 平台时,将添加更多详细信息。