问题标签 [scala-compiler]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
150 浏览

scala - scala编译器插件开发最佳实践

迭代我的编译器插件的代码,我在每次编译它(通过)后将我的编译器插件发布到我的本地常春藤存储库publishLocal,然后运行我的另一个项目,其中对这个插件的依赖是通过定义的addCompilerPlugin。开发编译器插件是否有更简洁的做法?

当然,我可以将两者聚合成一个多项目构建定义。但是学习更多用于迭代插件代码的轻量级实践可能会很好......

我至少可以依赖编译器插件而不将它变成一个库吗?从它允许的语法addCompilerPlugin看来,必须(?)创建和添加一个库,而不是仅仅依赖于类文件。

0 投票
1 回答
216 浏览

scala - 是否可以覆盖内联函数?

我假设 Scala 编译器将在被覆盖后内联该函数。

0 投票
2 回答
720 浏览

scala - Scala 编译器优化不变性

scala 编译器是否通过删除val块中仅使用一次的 s 的引用来优化内存使用?

想象一个对象聚合了一些巨大的数据——达到一个克隆数据或其衍生数据的大小可能会划伤 JVM/机器的最大内存量。

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

编译器是否会在计算后留下huge标记为符合垃圾收集的条件derivative1?还是在退出包装块之前它会保持活动状态?

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

0 投票
1 回答
545 浏览

java - 调用目标异常。无法将 X 类转换为 X 类。当通过 spark-submit 在 Scala Imain 中调用时

所以,我有以下用例。

我通过提供类似 DSL 的接口来简化特定域的 Spark 数据帧的使用。所有这些代码都放在一个由 maven shade 插件创建的胖罐子里。(胖 jar = 没有 spark 和 hadoop 依赖项)

这个胖 jar 有一个主类,我们称之为 JavaMain。

在 JavaMain 中,我进行了一次休息调用以获取内容为有效 DSL 的字符串。

我用初始设置对象实例化一个 IMain 对象。我绑定了一些变量。使用 imain.bind 方法。

但是,此绑定失败并出现以下错误:

更多背景:

尝试此操作时,我遇到了类路径问题。虽然我似乎无法解决所有问题。

早些时候在创建设置对象时,我正在做这样的事情:

但是,这似乎不起作用,因为在提交 spark 时,类路径上只有 spark 和 hadoop 相关的 jar。

然后我将以下内容添加到类路径中:

并做了以下事情:

这是我用来绑定对象的代码:

这会引发我之前附加的异常。有趣的是,以下代码有效:(即在解释器中导入和新建同一对象不会导致问题)

我知道并困扰我的另一个细节是 IMain 在内部确实更改了类加载器。不确定这是否是导致问题的原因。

任何帮助都非常感谢。

0 投票
1 回答
186 浏览

scala - 使用非交互式 scala.tools.nsc.Global 将文件解析为 AST

scala.tools.nsc.interactive.Global,有一种parseTree方法。我想从使用文件中获取 AST scala.tools.nsc.Global。查看parseTree定义,我写了

但这会产生

如何正确初始化编译器?斯卡拉版本 2.11.7。

0 投票
1 回答
461 浏览

scala - Scala编译器抛出“内部”类型不匹配错误而不给出错误位置

我正在使用 scala 2.10.5 编译一个包含 77 个 Scala 文件的项目。

我收到 0 个警告和 1 个奇怪的错误消息:

错误信息并没有指出错误的位置,所以我认为这是一个scalac内部错误。我应该怎么做才能调试它?

非常感谢您的帮助。

更新:我启用了调试模式并查看了完整的堆栈跟踪:

这有助于识别问题吗?

0 投票
1 回答
263 浏览

shapeless - Functor 错过参数实例的隐式值(仅在 sbt clean 之后)

我对小猫(https://github.com/milessabin/kittens)做了一些实验,但在编译我的代码时遇到了问题。我收到以下错误。

完整文件如下

我在 ScalaTest 中使用了几乎相同的代码,它编译没有任何问题。

我的 build.sbt 看起来如下 name := "shapeless-experiments"

最有趣的是,它作为增量编译的一部分进行编译。

如果我注释第 16、23 和 32 行,然后执行“sbt compile”,然后再次删除注释并执行它编译的“sbt compile/package”,我什至可以执行程序。但是一旦我运行“sbt clean”,它就不再编译了。

AdtDefns 对象基本上是https://github.com/milessabin/kittens/blob/master/core/src/test/scala/cats/derived/adtdefns.scala 的副本,相关部分是

PS:如果有人可以为 scala-kittens 创建一个标签会很好

0 投票
1 回答
898 浏览

scala - 在 Scala 中,如何规避“推断类型参数不符合”错误?

我有一个带有隐式 TypeTag 参数的反射函数:

哪个由于未知原因不起作用(请参阅如何使 Scala 类型推断功能强大到足以发现泛型类型参数?):

我推测它是由 Option[R] 推断 R 引起的,所以我对其进行了一些改进:

这次更糟,甚至没有编译,错误清楚地推断出 scala 不够聪明,无法分析类型:

那么如何临时规避这个编译问题呢?(当然我可以在 Lightbend 问题跟踪器上报告它,但它太慢了)

附录:这个问题本身是一个尝试规避如何使 Scala 类型推断功能强大到足以发现泛型类型参数?,这可能不会被修复。在我的情况下,我不介意获得类型 R 或 Option[R] 的 TypeTag,无论工作如何。

0 投票
1 回答
3849 浏览

scala - 如何正确使用 scalac -Xlint

scalax -Xlint help 提供以下信息:

有没有办法启用所有检查?的语义是scalac -Xlint什么?它会启用所有功能吗?默认设置(哪个)?什么都不会?

注意:Scala 2.11.8 和 sbt 0.13.9

如果较新的版本提供不同的行为/功能,请告诉我,因为更新它们不是问题

0 投票
1 回答
631 浏览

scala - 在 IntelliJ IDEA 中调试 Scala 编译器插件

我想为scalac编写我的编译器插件,但我在开发的早期阶段遇到了一个问题,因为我无法从 IntelliJ IDEA 运行和调试我的代码。

我使用这些教程来实现一个虚拟插件:

我的目标是在 IDEA 的调试模式下以某种方式运行我的插件以遇到断点。

更新:

下面的答案对我有很大帮助,但实际上,我为JAVA_OPTS环境变量添加了调试参数,并带有挂起直到远程调试器连接选项。然后我启动scalac并运行下面描述的远程调试器。