首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么要在SpiderMonkey & JSC中转换字节码?

为什么要在SpiderMonkey & JSC中转换字节码?
EN

Stack Overflow用户
提问于 2014-10-17 18:31:13
回答 1查看 413关注 0票数 0

Javascript引擎通常用于从源code.then转换字节码,字节码转换为本机代码。

1)为什么要转换字节码??2)如果源代码非常简单(例如,a+b函数),源码直接转换原生代码好吗?

EN

回答 1

Stack Overflow用户

发布于 2014-10-17 20:41:01

复杂性和可移植性

从源代码到目标代码的转换,无论是虚拟机的字节码还是真实机器的机器代码,都是一个复杂的过程。字节码更接近于大多数真实机器所做的事情,因此更容易使用:更适合优化代码以更快地运行,转换为机器码以获得更大的提升,甚至在情况需要时转换为其他格式。

因此,通常更容易编写一个前端,它的唯一工作是将源代码转换为字节码(或其他中间语言),然后编写一个工作在中间语言上的后端:优化它,输出机器代码,以及所有这些东西。Java可以被认为是这一原则的一个不同寻常的应用:它的构建过程通常停止于中间表示(即字节码),然后开发人员将其发送出去,这样当用户运行它时,就可以“完成作业”。

除了使代码更容易使用之外,这种工作方式还有两大好处。第一个最大的优势是你可以重用后端来使用其他语言。对于JavaScript (它没有标准化的后端)来说,这并不重要,但这是像LLVM和GCC这样的项目最终如何成长为涵盖如此多不同语言的原因。编写前端是一项艰巨的工作,但比方说,我为Mozilla的JavaScript后端做了一个Lua前端。然后,我可以利用Mozilla在该后端投入的所有优化工作。这为我节省了很多工作。

另一个很大的优势是你可以重用前端来处理更多的机器。这一点对JavaScript确实有实际意义。如果我要写一个JavaScript解释器,我可能会为大多数PC使用的x86 -the架构编写我的第一个后端-因为我可能就是在那里做开发工作的。但是大多数手机不使用基于x86的架构,现在-ARM变得更普遍了-所以如果我想在手机上运行得更快,我需要添加一个ARM后端。但是我可以做到这一点,而不需要重写整个前端,所以再一次,我为自己节省了很多工作。如果我想在Wii U(或上一代游戏机,或老款Mac)上运行,那么我需要一个强大的后端,但同样,我可以在不重写前端的情况下做到这一点。

底线是,虽然做两个转换看起来更复杂,但从长远来看,它实际上是更容易的。这是软件设计中有时会出现的奇怪和不直观的事情之一,但好处是真实的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26423104

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档