虚拟机如何工作?

Mar*_*tin 18 stack dynamic-typing vm-implementation

我一直在研究编程语言是如何工作的,其中一些有一个所谓的虚拟机.我知道这是在另一种编程语言中对编程语言进行仿真的某种形式,并且它的工作方式与使用堆栈执行编译语言的方式相同.我做对了吗?

根据我所做的附带条件,让我感到困惑的是,许多非编译语言允许使用"自由"类型系统的变量.以Python为例,我可以这样写:

x = "Hello world!"
x = 2**1000
Run Code Online (Sandbox Code Playgroud)

字符串和大整数是完全不相关的,并且在内存中占用不同的空间,那么这个代码如何在基于堆栈的环境中表示?这到底发生了什么?x是否指向堆栈中的新位置并且旧的字符串数据未被引用?这些语言不使用堆栈吗?如果没有,它们如何在内部表示变量?

Meh*_*ari 7

或许,您的问题应该标题为" 动态语言如何工作?"

这很简单,它们将变量类型信息与它一起存储在内存中.这不仅在解释或JIT编译语言中完成,而且还在Objective-C等本机编译语言中完成.

  • 对象的实际内容可以存储在其他地方,只有一个引用存储在适当的位置.有很多技术可以实现动态语言.真正发生的事情取决于您的语言的具体实现. (2认同)