标签: scalac

如何运行Fast Scala Compiler远程服务器?

我想设置一个在盒子上运行的fsc进程,然后我可以远程访问它.

我知道我需要共享一个临时目录.

但是,我很难在笔记本电脑上使用它.

我尝试着:

fsc -Djava.io.tmpdir=/tempscala -server 127.0.0.1:8080
Run Code Online (Sandbox Code Playgroud)

但它只是给了我使用选项......

救命?

java scala scalac fsc

5
推荐指数
1
解决办法
1106
查看次数

scala不会警告未使用的计算或值

我有这个小scala示例:

object Test {
  def add(x: Int, y: Int) = {
    val z = x - y
    x match {
      case 0 => 0 - y
      case 1 => 1 - y
      case _ => x - y
    }
    x + y
  }

  def main(args: Array[String]) {
    println(add(5, 6))
  }
}
Run Code Online (Sandbox Code Playgroud)

我觉得scala应警告'z'和'x匹配......'未被使用.我没有注意到任何编译器选项可以打开更多警告.我正在使用scala 2.10.1.

思考?谢谢!

compiler-construction warnings scala scalac

5
推荐指数
1
解决办法
713
查看次数

编译scala时,maven"重新运行-feature"

我最近注意到scala编译器警告maven生成的内容如下所示:

[警告]警告:有4个弃用警告; 使用-deprecation重新运行以获取详细信息

[警告]警告:有3个功能警告; 重新运行-feature以获取详细信息

[警告]发现两个警告

我没有立即明白如何遵循警告的说明,因此我可以获得有关如何更改代码的详细信息.

compiler-warnings maven-3 scalac scala-maven-plugin

5
推荐指数
2
解决办法
6119
查看次数

类型如何在Scala中流经模式匹配?

这个要点(这个Haskell无标记解释器的部分Scala端口)用scalac2.11.1 编译,但是用新的 2.11.6 失败:

typechecker.scala:55: error: type mismatch;
  found   : Expr[B] where type B
  required: Expr[Int]
       case (lhs ::: RInt, rhs ::: RInt) => Add(lhs, rhs) ::: RInt
...
Run Code Online (Sandbox Code Playgroud)

如何scalac通过模式匹配传播类型:::?改变2.11.12.11.6什么?我试着寻找看的输出scalac -printscalac -Xprint-types,但还没有发现他们有帮助.

请参阅要点以获取完整的代码,但是,粗略地说,我们有

// ADT for untyped expressions
sealed trait UExpr
case class UAdd(lhs: UExpr, rhs: UExpr) extends UExpr

// GADT for typed expressions
sealed trait Expr[T]
case class …
Run Code Online (Sandbox Code Playgroud)

scala scalac scala-2.11

5
推荐指数
0
解决办法
201
查看次数

针对不变性的Scala编译器优化

scala编译器是否通过将refs删除为val仅在块中使用一次来优化内存使用?

想象一个对象保存一些巨大的数据 - 达到克隆数据或其衍生物可能会刮掉JVM /机器的最大内存量的大小.

一个最小的代码示例,但想象一下更长的数据转换链:

val huge: HugeObjectType
val derivative1 = huge.map(_.x)
val derivative2 = derivative1.groupBy(....)
Run Code Online (Sandbox Code Playgroud)

编译后的编译器是否会huge标记为有资格进行垃圾收集derivative1?或者它会保持活着,直到包裹块退出?

理论上不变性很好,我个人觉得它上瘾.但是要适应那些无法在当前操作系统上逐项进行流处理的大数据对象 - 我认为它本身就具有与合理内存利用率不匹配的阻抗,因为JVM上的大数据应用程序不是不,编译器会针对这种情况进行优化.

scala scalac scala-compiler

5
推荐指数
1
解决办法
572
查看次数

scala编译器中的8位模拟器是什么以及如何启动它?

我正在读这个问题并看到:

scalac包括一个全武装和可操作战斗站的8位模拟器,可在GenICode编译阶段使用魔法组合键CTRL-ALT-F12进行查看.

为了显示编译阶段scalac,我用过scalac -Xshow-phases.

phase name  id  description
----------  --  -----------
<  ...  >
     icode  23  generate portable intermediate code
Run Code Online (Sandbox Code Playgroud)

似乎是相关阶段.

我编译了一个Hello-world程序

object Hello {
  def main(args: Array[String]): Unit = {
    println("Hello, world!")
  }
}
Run Code Online (Sandbox Code Playgroud)

通过scalac Hello.scala并按下CTRL-ALT-F12一路.没啥事儿.尝试scalac -Xprint:icode Hello.scala使用CTRL-ALT-F12,没什么特别的.

如何触发模拟器?这有什么作用?

在scala 2.11.8和OS X 10.11.5上

scala scalac

5
推荐指数
0
解决办法
312
查看次数

Scala Range包含(elem:Any)方法

显然Range有一个方法可以检查它是否包含Any类型的值.我知道它来自SeqLike,但会引起一些问题.

例如,我从joda.DateTime匹配小时:

DateTime.now match {
    case d if 0 to 12 contains d.hourOfDay() => ...
Run Code Online (Sandbox Code Playgroud)

这里d.hourOfDay()返回DateTime.Property,而不是Int,但代码仍然编译,因为contains(elem: Any).有没有办法在编译时检查这样的调用?

scala scalac

4
推荐指数
2
解决办法
1220
查看次数

如何正确使用scalac -Xlint

scalax -Xlint help提供以下信息:

$ scalac -Xlint:help
Enable or disable specific warnings
  adapted-args               Warn if an argument list is modified to match the receiver.
  nullary-unit               Warn when nullary methods return Unit.
  inaccessible               Warn about inaccessible types in method signatures.
  nullary-override           Warn when non-nullary `def f()' overrides nullary `def f'.
  infer-any                  Warn when a type argument is inferred to be `Any`.
  missing-interpolator       A string literal appears to be missing an interpolator id.
  doc-detached               A Scaladoc comment appears to be detached from its …
Run Code Online (Sandbox Code Playgroud)

scala compiler-flags scalac scala-compiler

4
推荐指数
1
解决办法
2660
查看次数

Java Void 到 Scala 单元

我有一个 java 库方法需要一个类Void作为参数。例如,在com.mongodb.async.client.MongoCollection

void insertOne(TDocument document, SingleResultCallback<Void> callback);
Run Code Online (Sandbox Code Playgroud)

我正在从 Scala 访问此方法。Scala 使用该类型Unit作为等价物Void(如果我错了请纠正我)

如何将 a SingleResultCallback[Unit](而不是SingleResultCallback[Void])传递给此方法?编译器不允许这样做。不应该捡这个吗?

java scala void scalac scala-compiler

4
推荐指数
1
解决办法
1795
查看次数

在 Scala 中传递惰性参数有什么帮助吗?

这听起来像是一个新手错误,但我做了很多。在将惰性求值块或值传递给函数时,如果我忘记以某种方式使该函数的相应参数变为惰性(按名称传递/调用),乍一看会引起一些混乱,因为它强制求值。

lazy val a = {println("a");1}
def myfunc(b:Int){println("hello")}
myfunc(a);
Run Code Online (Sandbox Code Playgroud)

输出:

a
Hello
Run Code Online (Sandbox Code Playgroud)

所以我的问题是,这个问题是否有任何编译器帮助?(标志等)或者这是我应该处理的事情?

scala lazy-evaluation scalac

3
推荐指数
1
解决办法
913
查看次数