我正在用C实现一个基于堆栈的虚拟机。
几乎每个函数都使用以下变量:
通常情况下,我会避免使用全局词。但是,在这种情况下,在函数之间进行这些操作似乎很麻烦,特别是我需要传入指向指针和计数器的指针才能更新它们。
我也可以把它们放在一个结构里,然后把它放在周围。
考虑到现代处理器的速度,这绝不是性能受限的VM。
在这种特殊情况下,使用全局是一种可接受的或典型的权衡吗?
发布于 2020-11-20 05:43:20
如果这个“基于堆栈的虚拟机”是整个程序,并且“几乎所有函数都使用...variables”的语句是真的(也不夸张),那么使这些变量全局化是完全正确的。
但是,如果这个“基于堆栈的虚拟机”只是一个较大程序的模块,我建议不要让上述变量在全球可见。
如果“基于堆栈的虚拟机”作为一个程序开始,并在以后的某个时间点成为一个较大程序的一个模块,那么一旦可以预见到第二个情况,就应该花时间重构任何“全局”。
发布于 2020-11-20 05:41:32
由于程序的全部目的是用硬件定义的、不可更改的全局可用资源集来模拟系统,因此将这些资源建模为一组固定的全局可用资源是非常好的;它准确地反映了域对象的结构。
当然,您可能仍然希望将所有这些都封装在不完全全局的级别上,而是作为对整个机器的一个实例进行建模的类的成员。毕竟,虚拟化现在随处可见,而且您通常会使用几个实例,这些实例都是您曾经发誓一次只出现一次的。但是,既然你说你是用C写的,这很难用来创建这样的类,我认为现在这将是过度工程。
发布于 2021-12-22 22:33:52
看看要素语言 (维基百科条目),它是一种基于堆栈的语言,有一个用C语言实现的虚拟机,他的语言非常优秀,有许多语言特性可以由库实现。我相信他的小VM是用全局语言编写的,但我不确定。但是,这并不重要,因为语言不能访问vm的任何内部组件(除非它们是故意在语言中公开的)。你应该很好的使用球体。VM必须是可执行的,并且使用globals会有所帮助。
另一种要研究的语言是pForth (便携式Forth),另一种基于堆栈的语言具有用C编写的VM,其余语言用基于第四的堆栈语言编写,这是一种很好的语言(有一个名为ANS的标准化版本)。
https://softwareengineering.stackexchange.com/questions/419190
复制