Dart 如何在幕后实现库隐私?
How does dart implement library privacy under the hood?
当一个库名称以“_”为前缀时,它就变成对其库私有的。 dart vm 是如何实现这种隐私的?
据我所知,名称的前缀是每个图书馆唯一的随机字符串。
在内部,VM 为变量名添加了库独有的字符串作为后缀,因此 _foo
可能会变成 _foo@1238fa12
。 @
确保它不会与用户变量冲突,因为 @
在普通标识符中无效。附加字符串后,VM 可以将该变量视为一个完全正常的变量,并且因为没有其他库可能引用该变量,所以它实际上是库私有的(尽管可能有一些极端情况它需要对私有名称更加聪明)。
这不是唯一可能的实施策略,但从一开始就设计了私有变量以使该策略成为可能。
当一个库名称以“_”为前缀时,它就变成对其库私有的。 dart vm 是如何实现这种隐私的?
据我所知,名称的前缀是每个图书馆唯一的随机字符串。
在内部,VM 为变量名添加了库独有的字符串作为后缀,因此 _foo
可能会变成 _foo@1238fa12
。 @
确保它不会与用户变量冲突,因为 @
在普通标识符中无效。附加字符串后,VM 可以将该变量视为一个完全正常的变量,并且因为没有其他库可能引用该变量,所以它实际上是库私有的(尽管可能有一些极端情况它需要对私有名称更加聪明)。
这不是唯一可能的实施策略,但从一开始就设计了私有变量以使该策略成为可能。