Questions tagged «virtual-machine»

虚拟机是程序和OS之间的仿真层,它向应用程序提供了要在其中运行的专用环境(而不是OS提供的原始环境)。

6
为什么没有其他可编译为Python字节码的编程语言?
在Java中,有多种语言可以编译为Java字节码,并且可以在JVM上运行-Clojure,Groovy和Scala是我能记住的主要语言。 但是,在由Python解释器运行之前,Python也会转换为字节码(.pyc文件)。我可能只是一无所知,但是为什么没有其他可编译为python字节码的编程语言呢? 仅仅是因为没有人打扰,还是因为某种固有的限制或障碍使得这样做变得如此困难?

25
关于使用虚拟机进行开发的思考
我将作为一家初创公司的开发负责人,并且建议我们使用VM进行开发。我并不是说每个开发人员都拥有一个带有用于测试/开发的虚拟机的桌面,我的意思是拥有一个管理所有虚拟机的服务器机架,并让开发人员在本地甚至从他们的家中通过microPC(ChromeOS都可以吗?)工作。电脑。 对我来说,好处是它具有极高的可扩展性,从长期来看更便宜,易于管理,并且我们利用了硬件的最大潜力。至于缺点,除了我们需要有人来设置/维护所述设置之外,我再也没有想到任何其他的热门产品。 我希望你们中的某些人可能在您的工作地点也有类似的设置,并且能够加深您的意见。谢谢。

3
什么是类型系统?
背景 我正在设计一种语言,作为辅助项目。我有一个工作正常的汇编器,静态分析器和虚拟机。由于我已经可以使用构建的基础结构来编译和运行非平凡的程序,因此我考虑在大学里做一个演讲。 在我的演讲中,我提到VM提供了一种类型系统,有人问“ 您的类型系统用于什么? ”。回答后,我被问这个问题的人嘲笑。 因此,即使我几乎肯定会因提出这个问题而声名狼藉,但我还是去找程序员。 我的理解 据我了解,类型系统用于提供有关程序中实体的附加信息层,以便运行时,编译器或任何其他机器知道如何处理其所操作的位字符串。它们还有助于维护合同-编译器(或代码分析器,运行时或任何其他程序)可以验证程序在任何给定的点上以程序员期望其操作的值运行。 类型也可以用于向那些人类程序员提供信息。例如,我找到以下声明: function sqrt(double n) -> double; 比这更有用 sqrt(n) 前者提供了大量信息:sqrt标识符是一个函数,以一个double作为输入,并产生另一个double作为输出。后者告诉您它可能是一个带有单个参数的函数。 我的答案 因此,在被问到“您的类型系统是干什么的?”之后 我回答如下: 类型系统是动态的(类型被分配给值,而不是分配给包含它们的变量),但是强大,没有令人惊讶的强制规则(您不能将字符串添加到整数,因为它们表示不兼容的类型,但是您可以将整数添加到浮点数) 。 VM使用类型系统来确保指令的操作数有效。可供程序员使用,以确保传递给其函数的参数有效(即类型正确)。 类型系统支持子类型化和多重继承(这两种功能均可供程序员使用),并且在对对象使用动态方法分配时会考虑类型-VM使用类型来检查针对给定类型实现的给定消息的功能是什么。 后续问题是“如何将类型分配给值?”。因此,我解释了所有值都装在框内,并有一个指向类型定义结构的指针,该结构提供有关类型名称,其响应的消息以及其继承的类型的信息。 在那之后,我被嘲笑了,我的回答被“那不是一个真正的类型系统”打断了。 所以-如果我所描述的不符合“真实类型系统”的条件,那会是什么?那个人对我提供的内容不能视为类型系统是正确的吗?

4
为什么VM需要是“堆栈计算机”或“注册计算机”等?
(这是一个极其新手的问题)。 我一直在研究有关虚拟机的知识。 事实证明,其中许多设计与物理或理论计算机非常相似。 例如,我读到JVM是一个“堆栈机”。这意味着(如果我错了,请纠正我)是它将所有的“临时内存”存储在堆栈中,并对所有操作码在该堆栈上进行操作。 例如,源代码2 + 3将被转换为类似于以下内容的字节码: push 2 push 3 add 我的问题是这样的: JVM可能是使用C / C ++等编写的。如果是这样,JVM为什么不执行以下C代码:2 + 3..?我的意思是,为什么它需要堆栈,或在其他虚拟机“寄存器”中(例如在物理计算机中)? 底层的物理CPU负责所有这些工作。VM编写者为什么不使用VM编程所使用的语言简单地使用“通常”指令执行解释后的字节码? 当实际的硬件已经为我们做到了时,为什么虚拟机需要仿真硬件? 同样,非常新手的问题。谢谢你的帮助

11
是否有任何理由不接受可作为虚拟机交付的软件?
这是有关物流的问题,而不是技术问题。 我公司已将一些嵌入式软件工作外包。具体来说,由于我们没有足够的内部知识来自己完成这项工作(我们只有桌面应用程序开发人员),因此我们已经向承包商支付了开发嵌入式系统的费用。 因此,承包商已经完成了软件,并询问是否可以通过虚拟机将其交付给我们。VM是一台Windows 8计算机,其中包含预配置的CodeWarrior IDE,并将源代码作为CodeWarrior项目。想法是,这将使我们能够在已配置用于该项目进一步开发的VM中更改代码。 与让他们逐步引导我们如何配置自己的开发机器以对项目进行代码更改相比,这样做有什么弊端吗?我可以预见的唯一问题是VM运行缓慢,并且在进行代码更改时重建项目需要很长时间。但是另一方面,我喜欢获得预配置的嵌入式系统开发环境的想法,因此不必在台式机应用程序开发计算机上添加另一个IDE。 我真的想不起来为什么不接受VM交付的很好的理由,但是我只是想由这个社区来运行它,以防万一我丢失了某些东西。

8
重写Object.finalize()真的不好吗?
反对重写的两个主要论点Object.finalize()是: 您不必决定何时调用它。 它可能根本不会被调用。 如果我正确理解了这一点,我认为这些理由不足以令人讨厌Object.finalize()。 由VM实施和GC决定何时分配对象的正确时间,而不是开发人员。为什么决定何时Object.finalize()打电话很重要? 通常,如果我错了,请纠正我,唯一的一次Object.finalize()调用是在GC有机会运行之前终止应用程序的时间。但是,无论如何,当应用程序的进程终止时,对象都会被释放。因此Object.finalize()没有被调用,因为它不需要被调用。开发人员为什么要关心? 每次我使用必须手动关闭的对象(例如文件句柄和连接)时,我都会感到非常沮丧。我必须不断检查对象是否具有的实现close(),并且我肯定在过去的某些时候错过了对它的一些调用。为什么不把它放到VM和GC中,而是通过将close()实现放入其中来处置这些对象,这将变得更加简单,安全Object.finalize()呢?

7
用纯Java编写的Java IDE?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为软件工程堆栈交换的主题。 6年前关闭。 是否有用Java编写的Java IDE? 今天我刚刚在学校得到了9年级的DET笔记本电脑,并且设置了各种限制。令人烦恼的是,除了系统上已经安装的可执行文件之外,您无法运行任何可执行文件(由于某些原因,它们没有禁用命令提示符,PowerShell或注册表编辑器,这很奇怪)。它们允许您运行Java可执行文件,所以我认为这是在学校笨拙的笔记本电脑上进行编程的唯一方法(自然地,当我完成所有工作后):D 编辑: 用Java编写的意思是,用于运行程序的可执行文件的文件扩展名为“ .jar”,因此可以在JVM上运行。 编辑2: 我尝试了DrJava IDE,并且效果很好,谢谢(我可以编译和执行程序)!关于使用命令“ java -jar“ C:/ Users ... / org.eclipse ...”“通过命令行运行Eclipse。这导致生成日志说文件的错误,主要错误是: 消息自动激活捆绑软件org.eclipse.ui.workbench(182)时发生错误。 如何解决此错误(与其他任何IDE相比,我更喜欢使用Eclipse)? 编辑3: 关于我的最后编辑,只需忽略它:D。我通过下载最新版本的Eclipse解决了该问题。

3
使用堆栈表示函数调用语义的替代方法有哪些?
我们都知道并喜欢函数调用通常是使用堆栈来实现的。有框架,返回地址,参数等等。 但是,堆栈是实现细节:调用约定可能会做不同的事情(例如,x86快速调用使用(某些)寄存器,MIPS和跟随器使用寄存器窗口,等等),优化甚至可以做其他事情(内联,帧指针省略,尾调用优化..)。 当然,许多机器(如JVM和CLR这样的VM,以及带有PUSH / POP等的x86等实际机器)上都存在方便的堆栈指令,可以很方便地将其用于函数调用,但是在某些情况下,这是可能的以不需要调用堆栈的方式进行编程(我在这里考虑的是Continuation Passing Style,或者消息传递系统中的Actor) 因此,我开始感到奇怪:是否可以在没有堆栈的情况下实现函数调用语义,或者更好地使用不同的数据结构(可能是队列,或者是关联映射?) ,当然,我知道堆栈非常有用。方便(它无处不在的一个原因),但是最近我碰到了一个使我感到奇怪的实现。 你们是否知道是否曾经用任何语言/机器/虚拟机完成过这项工作?如果有的话,有哪些显着的区别和缺点? 编辑:我的直觉是不同的子计算方法可以使用不同的数据结构。例如,lambda演算不是基于堆栈的(函数应用程序的想法通过简化来体现),但是我正在查看一种真实的语言/机器/示例。这就是为什么我要问...

3
为什么虚拟机上的更多CPU内核会降低编译时间?
[edit#2]如果来自VMWare的任何人都可以使用VMWare Fusion的副本来打我,我很乐意做与VirtualBox与VMWare比较的相同操作。我以某种方式怀疑VMWare虚拟机管理程序将针对超线程进行更好的调整(也请参见我的答案) 我看到一些奇怪的东西。随着我在Windows 7 x64虚拟机上增加内核数量,总体编译时间会增加而不是减少。编译通常非常适合并行处理,因为在中间部分(后依赖映射)中,您可以简单地在每个.c / .cpp / .cs /任何文件上调用一个编译器实例,以建立供链接器使用的部分对象过度。所以我以为编译实际上可以很好地扩展内核数。 但是我看到的是: 8核:1.89秒 4核心:1.33秒 2核心:1.24秒 1核心:1.15秒 这仅仅是由于特定供应商的虚拟机管理程序实现(在我的情况下为type2:virtualbox)导致的设计工件,还是在更多的VM上更普遍地使虚拟机管理程序实现更简单?有这么多因素,我似乎能够为这种行为辩护和反对-因此,如果有人比我更了解这一点,我很想读您的答案。 谢谢席德 [ 编辑:解决评论 ] @MartinBeckett:冷编译被丢弃了。 @MonsterTruck:找不到直接编译的开源项目。太棒了,但现在不能搞定我的开发环境。 @Mr Lister,@philosodad:使用VirtualBox时有8个硬件线程,因此应该以1:1映射而不进行仿真 @Thorbjorn:我有6.5GB的虚拟机和一个较小的VS2012项目-我换入/换出垃圾页面文件的可能性很小。 @All:如果有人可以指向一个开源VS2010 / VS2012项目,那么这可能比我(专有)VS2012项目更好的社区参考。Orchard和DNN似乎需要调整环境才能在VS2012中进行编译。我真的很想看看使用VMWare Fusion的人是否也看到了这一点(针对VMWare与VirtualBox划分) 测试细节: 硬件:Macbook Pro Retina CPU:Core i7 @ 2.3Ghz(四核,超线程= Windows任务管理器中的8核) 记忆体:16 GB 磁盘:256GB SSD 主机操作系统:Mac OS X 10.8 VM类型:VirtualBox 4.1.18(类型2虚拟机管理程序) 来宾操作系统:Windows 7 …

1
元循环解释器,虚拟机和提高的性能之间有什么关系?
我已经在网上阅读了有关元循环解释器(包括SICP)的信息,并且研究了一些实现的代码(例如PyPy和Narcissus)。 我已经阅读了很多有关两种语言的文章,它们充分利用了元循环评估Lisp和Smalltalk。据我了解,Lisp是第一个自托管的编译器,而Smalltalk具有第一个“真正的” JIT实现。 我尚未完全了解的一件事是,那些解释器/编译器如何才能获得如此出色的性能,或者换句话说,为什么PyPy比CPython更快?是因为反射吗? 而且,我的Smalltalk研究使我相信JIT,虚拟机和反射之间存在联系。诸如JVM和CLR之类的虚拟机允许进行大量的类型自省,我相信它们可以在实时(我想是AOT)编译中大量使用。但是据我所知,虚拟机有点像CPU,因为它们具有基本的指令集。虚拟机是否有效,因为它们包含类型和参考信息,从而可以实现与语言无关的反映? 我之所以这么问,是因为现在许多解释型语言和编译型语言都将字节码用作目标(LLVM,Parrot,YARV,CPython),并且传统的VM(例如JVM和CLR)已经获得了令人难以置信的性能提升。有人告诉我它与JIT有关,但据我所知,自从Smalltalk和Sun自己的Self从事Java以来​​,JIT并不是什么新鲜事物。我不记得过去的VM表现特别出色,JVM和.NET之外的非学术类VM并不多,而且它们的性能绝对不如现在好(我希望可以提出这一主张,但我想从个人经验谈起)。 然后突然之间,在2000年代末,情况发生了变化,甚至对于既定的语言,也出现了许多具有良好性能的VM。是否发现了有关JIT实现的信息,该信息使几乎每个现代VM的性能都飙升了?可能是纸还是书?

1
不基于数组的计算机体系结构
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 4年前关闭。 瓦德勒(Wadler)撰写的有关函数式编程Monad(Haskell)的原始论文 历史悠久的另一个问题是,是否需要使程序基于数组更新。由于在基于数组的算法和体系结构开发方面投入了大量精力,因此我们将回避这一辩论,并简单地假设答案是肯定的。 没有引用或暗示其他可能的体系结构。我听说过一些适合Lisp的体系结构。有人可以指导我一些关于如何/如何开始该主题的解释和指导。非常感谢您可以简要介绍不同的体系结构。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.