Dart 如何在幕后实现库隐私?

How does dart implement library privacy under the hood?

当一个库名称以“_”为前缀时,它就变成对其库私有的。 dart vm 是如何实现这种隐私的?

据我所知,名称的前缀是每个图书馆唯一的随机字符串。

在内部,VM 为变量名添加了库独有的字符串作为后缀,因此 _foo 可能会变成 _foo@1238fa12@ 确保它不会与用户变量冲突,因为 @ 在普通标识符中无效。附加字符串后,VM 可以将该变量视为一个完全正常的变量,并且因为没有其他库可能引用该变量,所以它实际上是库私有的(尽管可能有一些极端情况它需要对私有名称更加聪明)。

这不是唯一可能的实施策略,但从一开始就设计了私有变量以使该策略成为可能。