Programming languages 所有解释的/动态类型的语言都存储在堆上吗?

Programming languages 所有解释的/动态类型的语言都存储在堆上吗?,programming-languages,heap,allocation,Programming Languages,Heap,Allocation,我首先想知道,当一种语言有严重的性能代价时,为什么它会将所有东西都存储在堆上。例如,Java人员避免创建不必要的对象,因为我发现像和这样的语言都是对象,它们都是解释型和动态类型的语言。所以我想知道堆是否是这些语言的共同点。是和否。是的,简单的解释器和字节码编译器将存储堆上的每个对象;CPython就是这么做的。不,存在动态语言的智能实现,可以将一些堆分配转换为堆栈分配 这是为Scheme做的,也是为Python做的,也许有一个JavaScript实现也可以执行这种优化 它们都是解释语言和动态类型

我首先想知道,当一种语言有严重的性能代价时,为什么它会将所有东西都存储在堆上。例如,Java人员避免创建不必要的对象,因为我发现像和这样的语言都是对象,它们都是解释型和动态类型的语言。所以我想知道堆是否是这些语言的共同点。

是和否。是的,简单的解释器和字节码编译器将存储堆上的每个对象;CPython就是这么做的。不,存在动态语言的智能实现,可以将一些堆分配转换为堆栈分配

这是为Scheme做的,也是为Python做的,也许有一个JavaScript实现也可以执行这种优化

它们都是解释语言和动态类型语言


解释不是语言的特性,而是语言实现的特性,正如Lisp社区几十年前所展示的那样。Python在其参考实现中被编译成字节码,就像Java一样。

是和否。是的,简单的解释器和字节码编译器将存储堆上的每个对象;CPython就是这么做的。不,存在动态语言的智能实现,可以将一些堆分配转换为堆栈分配

这是为Scheme做的,也是为Python做的,也许有一个JavaScript实现也可以执行这种优化

它们都是解释语言和动态类型语言


解释不是语言的特性,而是语言实现的特性,正如Lisp社区几十年前所展示的那样。Python在其参考实现中被编译成字节码,就像Java一样。

最后一段让我有点困惑。你说“Lisp…”到底指的是什么?@Foreigner:Lisp社区为他们的语言构建了各种编译器和解释器,并率先提出了将两者结合起来的想法。在一些交互式的Lisp“解释器”中,您实际上可以动态编译代码,并进行充分优化。最后一段让我有点困惑。你说“Lisp…”到底指的是什么?@Foreigner:Lisp社区为他们的语言构建了各种编译器和解释器,并率先提出了将两者结合起来的想法。在一些交互式Lisp“解释器”中,您可以实时编译代码,并进行充分优化。