问题标签 [scalac]
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.
sbt - 您可以从 sbt 提示符注入编译器插件吗?
在 sbt 中,您可以从 sbt 提示符而不是从构建定义文件中注入编译器插件吗?
动机:
能够将您自己开发的编译器插件注入到作为您的测试套件一部分的项目中,而无需编辑它们的构建定义。我发现自动编辑构建定义以连接插件是相当不确定的......
额外的动机:
使用和不使用特定编译器插件进行灵活编译,无需编辑文件,也无需使用只需要在特定时间使用的编译器插件污染团队 git。例如考虑https://github.com/sksamuel/scalac-scapegoat-plugin。
如果所有其他方法都失败了,您可以通过全局安装sbt plugin
来引入新的 sbt 命令吗?
scala - Scala:不推荐使用 `-` [dash, minus] 命令以支持 `onFailure`,并将在 0.14.0 中删除
当我在做sbt compile -feature
我的 Scala 项目时,我收到了一个神秘的警告:
我不知道那个破折号/减号命令是什么或它可能在哪里使用。在谷歌上搜索它是不可能的,以及为它寻找代码库(只有 /so/ /many/ /dashes/)。
如果至少我知道它是在哪里定义的。我在 scala 文档中也找不到任何东西。
java - Scala 删除通用类型信息
我有一个生成 jar 的 scala 项目。我正在尝试在 Java 项目中使用 jar。奇怪的是,方法签名在编译为 .class 文件时会丢失通用类型信息。
Lscala/collection/immutable/List<Ljava/lang/Object;>
在其 .class 文件中生成一个方法。
这是一样的
.class 文件说方法签名是
Ljava/util/List<Ljava/lang/Object;>
真正的问题是,当我在 Java 项目中使用这个 jar 时,我必须使用List<Object>
而不是List<Long>
像我想要的那样使用。当然我可以施放它,但我宁愿不用。有任何想法吗?
我正在使用 scala 版本 2.11.7
jvm - sbt 的第一步
scalac <some file>
我只是想避免在andrun <some class>
循环中缓慢的 JVM 启动和清理。也就是说,我要求一个可以加载一次然后多次编译和运行我的应用程序的环境。在#scala 频道,我得到了使用sbt
.
我曾经在#progfun 课程中使用过现成的 sbt 脚本,但我自己从未编写过 sbt。它看起来像一个地狱。您如何轻松地为我的任务配置它?
scala - Scala 编译器优化不变性
scala 编译器是否通过删除val
块中仅使用一次的 s 的引用来优化内存使用?
想象一个对象聚合了一些巨大的数据——达到一个克隆数据或其衍生数据的大小可能会划伤 JVM/机器的最大内存量。
一个最小的代码示例,但想象一个更长的数据转换链:
编译器是否会在计算后留下huge
标记为符合垃圾收集的条件derivative1
?还是在退出包装块之前它会保持活动状态?
不变性在理论上很好,我个人觉得它很容易上瘾。但是要适合在当前操作系统上无法逐项进行流处理的大数据对象 - 我会声称它本质上是阻抗与合理的内存利用率不匹配的,因为 JVM 上的大数据应用程序是不是这样,除非编译器针对这种情况进行了优化..
sbt - 通过 sbt 插件添加库依赖项 - 每个子项目
我正在尝试通过 sbt 插件添加库依赖项。应该将依赖项添加到每个子项目的二进制 scala 版本中,因此我遍历每个子项目。
但是,这不起作用 - 打印的输出显示没有通过 附加库依赖项的痕迹libraryDependencies in projRef +=
,也没有发出任何错误,留下后续步骤来故障转移丢失的依赖项。这种技术可能有什么问题?
你会问为什么首先需要这样做?为什么要通过这样的 sbt 插件添加库依赖项?
尽管我们有 sbt addCompilerPlugin
,但它不能用于具有参数的编译器插件(-Xplugin
必须将 jar 的路径指定为 scalac,以便它接受编译器插件参数,就实验显示而言)。因此,我们需要在将编译器插件-Xplugin
解析为库依赖项之后注入编译器插件(然后调整其文件路径位置以检查结果update
)。因此,我们确实需要通过 sbt 插件添加库依赖项。我们还需要为每个子项目执行此操作,因为多项目构建可能包含不同 scala 版本的子项目——每个子项目都必须注入一个二进制兼容的编译器插件,以保持二进制兼容性。
顺便说一句,这可能会照亮我在黑暗中的一些事情:当在projectSettings
根项目的覆盖中添加库依赖项时 - 如下所示 - 依赖项似乎解决了,但这没用,因为它会应用相同的所有子项目的二进制版本,这违背了手头任务的性质(一些子项目自然会因二进制不兼容而崩溃)。另外我认为它会覆盖根的设置,而这里的目标是附加一个设置而不是覆盖现有设置。
一对线索?
为每个子项目附加 scalacOptions - 使用相同的技术 - 简单有效。
应用
+=
到libraryDepenencies
上面,甚至不会影响 的输出inspect libraryDependencies
,这与在 an 的一个override lazy val projectSettings
块中使用相同的习语不同AutoPlugin
。
scala - Scala编译类分析
对于我的一个包含编译器的爱好项目,我需要分析由 scalac 生成的类文件。
具体来说,我需要执行以下操作:
- 查找类 inkl 的通用参数。高阶种类
- 查找带有特定注释的方法
- 查找方法 inkl 的 Scala 特定签名。高阶种类
我知道,我可以使用 scala Reflection,但如果可能的话,我不希望在编译时加载类,因为这会在编译时将所有运行时依赖项都放在类路径上,并且可能会执行静态初始化程序。
他们是任何可以简化scala类文件分析任务的库或其他工具。
scala - 如何通过命令行将 scalacOptions (Xelide-below) 传递给 sbt
我试图从命令行调用 sbt程序集,将 scalac 编译器标志传递给 elides(elide-below 1)。
通过将此行添加到 build.sbt,我设法使标志在 build.sbt 中工作
scalacOptions ++= Seq("-Xelide-below", "1")
当我启动 sbt 并运行以下命令时,它工作正常:
但是我想知道在启动 sbt 时如何传递它,以便我的 CI 工作可以在执行不同的组装目标(即 dev/test/prod)时使用它。
scala - 为什么反引号构造函数参数中的空格会破坏编译器?
空格和排序以及参数名称中的反引号的某种组合,其中反引号名称与另一个参数具有相同的前导字符,似乎会误导编译器产生编译错误:
宣言
导致
这个问题似乎取决于参数的顺序和类型以及声明的类型,因为以下所有编译都很好:
这是一个错误还是以某种方式预期的?
斯卡拉 2.11.7