平台

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 标准库实现从控制台上阻塞读取一行输入和其下的方法。
  • 运行时上的 unsafeRununsafeRunTaskunsafeRunSync 方法是不安全。所有这些方法均会同步将值返回并且可能阻塞,如果 effect 中包含异步步骤,包括运行时为保证执行公平性导入的摆出点,用户应改用unsafeRunAsyncunsafeRunAsync_unsafeRunToFuture方法。

Scala Native

目前对 Scala Native 的支持尚处于试验阶段。当支持 Scala Native 平台时,将添加更多详细信息。

Leave a Reply
Your email address will not be published.
*
*

BACK TO TOP