问题标签 [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.
scala - scala编译器插件开发最佳实践
迭代我的编译器插件的代码,我在每次编译它(通过)后将我的编译器插件发布到我的本地常春藤存储库publishLocal
,然后运行我的另一个项目,其中对这个插件的依赖是通过定义的addCompilerPlugin
。开发编译器插件是否有更简洁的做法?
当然,我可以将两者聚合成一个多项目构建定义。但是学习更多用于迭代插件代码的轻量级实践可能会很好......
我至少可以依赖编译器插件而不将它变成一个库吗?从它允许的语法addCompilerPlugin
看来,必须(?)创建和添加一个库,而不是仅仅依赖于类文件。
scala - 是否可以覆盖内联函数?
我假设 Scala 编译器将在被覆盖后内联该函数。
scala - Scala 编译器优化不变性
scala 编译器是否通过删除val
块中仅使用一次的 s 的引用来优化内存使用?
想象一个对象聚合了一些巨大的数据——达到一个克隆数据或其衍生数据的大小可能会划伤 JVM/机器的最大内存量。
一个最小的代码示例,但想象一个更长的数据转换链:
编译器是否会在计算后留下huge
标记为符合垃圾收集的条件derivative1
?还是在退出包装块之前它会保持活动状态?
不变性在理论上很好,我个人觉得它很容易上瘾。但是要适合在当前操作系统上无法逐项进行流处理的大数据对象 - 我会声称它本质上是阻抗与合理的内存利用率不匹配的,因为 JVM 上的大数据应用程序是不是这样,除非编译器针对这种情况进行了优化..
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 在内部确实更改了类加载器。不确定这是否是导致问题的原因。
任何帮助都非常感谢。
scala - 使用非交互式 scala.tools.nsc.Global 将文件解析为 AST
中scala.tools.nsc.interactive.Global
,有一种parseTree
方法。我想从使用文件中获取 AST scala.tools.nsc.Global
。查看parseTree
定义,我写了
但这会产生
如何正确初始化编译器?斯卡拉版本 2.11.7。
scala - Scala编译器抛出“内部”类型不匹配错误而不给出错误位置
我正在使用 scala 2.10.5 编译一个包含 77 个 Scala 文件的项目。
我收到 0 个警告和 1 个奇怪的错误消息:
错误信息并没有指出错误的位置,所以我认为这是一个scalac内部错误。我应该怎么做才能调试它?
非常感谢您的帮助。
更新:我启用了调试模式并查看了完整的堆栈跟踪:
这有助于识别问题吗?
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 创建一个标签会很好
scala - 在 Scala 中,如何规避“推断类型参数不符合”错误?
我有一个带有隐式 TypeTag 参数的反射函数:
哪个由于未知原因不起作用(请参阅如何使 Scala 类型推断功能强大到足以发现泛型类型参数?):
我推测它是由 Option[R] 推断 R 引起的,所以我对其进行了一些改进:
这次更糟,甚至没有编译,错误清楚地推断出 scala 不够聪明,无法分析类型:
那么如何临时规避这个编译问题呢?(当然我可以在 Lightbend 问题跟踪器上报告它,但它太慢了)
附录:这个问题本身是一个尝试规避如何使 Scala 类型推断功能强大到足以发现泛型类型参数?,这可能不会被修复。在我的情况下,我不介意获得类型 R 或 Option[R] 的 TypeTag,无论工作如何。
scala - 如何正确使用 scalac -Xlint
scalax -Xlint help 提供以下信息:
有没有办法启用所有检查?的语义是scalac -Xlint
什么?它会启用所有功能吗?默认设置(哪个)?什么都不会?
注意:Scala 2.11.8 和 sbt 0.13.9
如果较新的版本提供不同的行为/功能,请告诉我,因为更新它们不是问题
scala - 在 IntelliJ IDEA 中调试 Scala 编译器插件
我想为scalac编写我的编译器插件,但我在开发的早期阶段遇到了一个问题,因为我无法从 IntelliJ IDEA 运行和调试我的代码。
我使用这些教程来实现一个虚拟插件:
我的目标是在 IDEA 的调试模式下以某种方式运行我的插件以遇到断点。
更新:
下面的答案对我有很大帮助,但实际上,我为JAVA_OPTS环境变量添加了调试参数,并带有挂起直到远程调试器连接选项。然后我启动scalac并运行下面描述的远程调试器。