【发布时间】:2013-01-16 01:25:11
【问题描述】:
我一直在思考机器代码是如何特定于架构的,以及 Javascript 如何在(几乎)每个浏览器中工作。 我一直在从事一个必须进行一些严肃计算的项目,它是基于 Javascript 的,需要一整分钟才能完成计算。它让我渴望 C 的速度。但项目使用 Javascript 的全部原因是为了简单和可移植。
这给了我这个想法,如果有一种类似于 Javascript 的语言在每个架构上都可移植并作为可执行文件运行,那会怎样? 大多数人会指向 Java,但我在想一些开销更少并由操作系统处理的东西。不是字节码,而是本机机器码。
做了一些研究和思考来解决这个任务的不可能性。您如何使可执行文件与针对特定架构的普通 C 编写的应用程序一样小,并且在每个架构上都以与在 C 中针对该架构进行本地编译一样的速度运行?
这是我的下一个想法。本机机器代码是特定于架构的,每种架构都有某些特殊功能,有时处理相同的任务会有所不同。此外,某些优化是特定于每个架构的。 如果有通用机器码怎么办?当操作系统将指令加载到内存中时,它会自动转换指令以适应架构。或者也许(更疯狂的想法)CPU 可以包含接收通用机器码并自动将通用机器码适应其本机机器码的能力?
通用机器码规范必须足够通用以涵盖正常的机器码功能。
当然,如果通用机器代码确实有效,那么人们可能会想要一种可以被所有操作系统处理的通用可执行格式。这样,可执行文件不需要跨操作系统更改。这导致需要专门制作跨机器通用的框架。更重要的是操作系统特定的功能,以及超出我所知的输入和输出能力。
通用机器码编译可执行文件:
优点:
- 与本地编译的可执行文件几乎相同的大小
- 与本地编译的可执行文件的性能几乎相同
缺点:
- 加载速度稍慢(希望不存在),因为它在将可执行文件加载到 ram 中时会将通用机器代码转换为本机机器代码
可行吗?
编辑:
我用过Java,用它做了一个游戏。它不像我想要的那样普遍,也不友好。 * 它是它自己的编程语言,由 Oracle 维护。专有的,有点太大了。需要在某些机器上安装。
更具体地说,我不是在谈论拥有一种新的编程语言。我说的是拥有一种新的机器代码语言,它包含足够的额外信息,当执行时,会发生将其转换为体系结构机器代码的非常简单的过程。 这样,C 编译器就可以将其可执行文件编译成通用机器代码,并且可执行文件可以在任何地方运行。
【问题讨论】:
-
“不是字节码而是本地机器码”——但你已经认识到不同的机器有不同的机器码。所以,至少,你说的是发生了某种程度的翻译。
-
您如何看待“加载速度稍慢(希望不存在),因为它在将可执行文件加载到 ram 中时将通用机器代码转换为本机机器代码”,在质量上与“加载”不同(Java?)字节码,编译成机器码”
-
C 编译器已经这样做了,对吗?每个操作系统都有编译器,对吗?
-
这就是 Java 虚拟机的本意。它没有达到理想。
-
哦,这是不断提出的问题(我要提出更多问题)。不同的操作系统为其用户模式程序提供不同的功能。一个操作系统可能“内置”的东西可能只在另一个操作系统的库中可用。您希望如何处理?
标签: assembly computer-science computer-architecture machine-code