gpt4 book ai didi

scala - 有多个 `package` 声明会减慢编译器的速度吗?

转载 作者:行者123 更新时间:2023-12-02 03:29:18 33 4
gpt4 key购买 nike

我知道将包声明拆分成多行会创建隐式导入。所以这个:

package com.me.project
package module

等于:

package com.me.project.module
import com.me.project._

但是,如果project包中的对象发生变化,是否会触发sbt重新编译当前文件,还是取决于是否实际调用了变化的对象在当前范围内?基本上,我想知道是否更明确,例如:

package com.me.project.module
import com.me.project.UtilClass
import com.me.project.Rng

与前两种方法相比,是否有助于加快编译时间?

最佳答案

不,加速任何事情都无济于事。实际上,这可能意味着您的编译时间甚至会增加,因为进行单次导入意味着编译器必须解析更多代码行。但是因为这仍然只需要纳秒,所以它并不算数。

导入声明只不过是向编译器提供有关在何处查找声明的信息。除非您从代码中引用它,否则编译器不需要对该信息做任何事情。在这种情况下,编译器也必须编译该文件,以便能够确定您的代码是否会进行类型检查。

换句话说,如果您实际上使用了数百个声明中的两个声明,那么它们是唯一会在更改时触发源代码重新编译的声明。

我并不是说这是唯一可能的行为,因为它可以以任何方式实现,但是以一种方式实现编译器,当对应于导入声明的代码发生更改时,它会触发代码的重新编译没有多大意义,仔细想想,这就是为什么它非常肯定地说它不会做的原因。因为,会发生什么?每个源文件都可能包含一个包声明和一些导入。如果您的代码因为通配符导入范围内的声明之一发生更改而被重新编译,那么所有其他文件也需要发生这种情况。并且因为您可以确定在每个应用程序中所有现有的导入或多或少跨越整个类路径,所以整个类路径需要重新编译仅仅因为一个文件更改,这不是期望的行为。

关于scala - 有多个 `package` 声明会减慢编译器的速度吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28069891/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com