Dart 允许循环导入。
我的总体理解是循环导入(文件a导入文件b,文件b导入文件a)是一种不好的做法,一般是为了释放资源,以及垃圾回收。然而,dart 中甚至没有警告,所以我想知道它是否会导致不良行为。
对垃圾收集有影响吗?它会导致问题吗?
循环进口也不错。
Dart 的循环导入与垃圾收集无关。这一切都是为了在编译时使名称可供其他库使用。
运行时数据结构中的循环可以使对象保持活动状态(但是,与其他一些语言不同,只要循环中没有对任何对象的外部引用,Dart 的垃圾收集就可以收集整个循环)。
库不是运行时的数据结构,它们仅在编译时才真正存在。
无论如何,所有导入的库都存在于程序中。如果程序使用库 A,并且库 A 导入库 B,那么这两个库都将成为程序的一部分(它们的各个成员可能会或可能不会被树摇动,具体取决于它们是否实际使用,但这与库依赖项。)
如果库 B 然后也导入库 A,则不会改变任何内容。这两个库仍然是该计划的一部分。它所做的只是允许库 B 的成员引用库 A 的成员声明。
循环依赖确实会影响高效的模块化编译。为了编译一个库,您还需要编译其所有依赖项(至少在某种程度上,包括类型推断),否则您无法检查该库是否正确使用其依赖项。
如果您有单向依赖项,那么您可以(可能)在开始查看导入它的库之前完全编译该依赖项。有时,构建系统甚至允许对库进行一次编译,然后在依赖于它的多个其他程序中重用。
如果库依赖关系中有一个循环,那么模块化编译器需要在同一编译步骤中编译该循环的所有库,因为它们中的任何一个都不能在其他库之前编译。因此,对于模块化提前编译器来说,周期会影响模块化编译的粒度。我建议避免跨多个包的循环。在一个包装内,它非常好。
它在运行时仍然没有区别。
| 归档时间: |
|
| 查看次数: |
585 次 |
| 最近记录: |