我正在阅读与yacc和lex有关的东西以及其他一些编译器实现,似乎它们都使用全局状态,因此使用多线程情况确实不安全,因此很难将它们嵌入其他程序中。我知道GNU Bison和Flex可以用于重新进入,但是为什么默认情况下不启用它们?
答案 0 :(得分:2)
因为许多年前定义了Lex和Yacc的接口,所以使用Globals更为普遍。可重入更改了接口,可重入接口从未进行过正式的标准化(考虑到游戏的状态,可能也是如此)。当时,多线程并不是很普遍,主要是因为一台典型的计算机几乎没有资源进行一次编译(有时甚至没有;进行编译过程以顺序加载可执行文件也很普遍)。
因此,默认值继续是不可重入的标准化接口。无论我们是否喜欢它,它都可能会保持这种状态。