3

我一直在思考机器代码是如何特定于架构的,以及 Javascript 如何在(几乎)每个浏览器中工作。我一直在做一个必须做一些严肃计算的项目,它是基于 Javascript 的,需要一整分钟才能完成计算。这让我渴望 C 的速度。但该项目使用 Javascript 的全部原因是为了简单和可移植性。

这给了我一个想法,如果有一种类似于 Javascript 的语言在每个架构上都可以移植并作为可执行文件运行呢?大多数人会指向 Java,但我在想一些开销更少并由操作系统处理的东西。不是字节码,而是本机机器码。

做了一些研究和思考来完成这项任务的不可能。您如何为特定架构制作一个与普通 C 编写的应用程序一样小的可执行文件,该文件可以在每个架构上以相同的速度运行,就好像它是为该架构在 C 中本地编译的一样?

这是我的下一个想法。本机机器代码是特定于架构的,每个架构都有某些特殊功能,有时处理相同的任务会有所不同。此外,某些优化是特定于每个架构的。如果有通用机器码怎么办?当操作系统将指令加载到内存中时,它会自动转换指令以适应架构。或者也许(更疯狂的想法)CPU 可以包含接收通用机器码并自动将通用机器码适应其本机机器码的能力?

通用机器代码规范必须足够通用以涵盖正常的机器代码功能。

当然,如果通用机器代码确实有效,那么人们可能会想要一种可由所有操作系统处理的通用可执行格式。这样,可执行文件不需要跨操作系统更改。这导致需要专门制作跨机器通用的框架。更重要的是操作系统特定的功能,以及超出我所知的输入和输出能力。

通用机器码编译的可执行文件:

优点:

  • 与本机编译的可执行文件几乎相同的大小
  • 与本机编译的可执行文件几乎相同的性能

缺点:

  • 加载速度稍慢(希望不存在),因为它在将可执行文件加载到 ram 时将通用机器代码转换为本机机器代码

可行吗?

编辑:

我用过Java,用它做了一个游戏。它不像我想要的那样普遍,也不友好。* 它是它自己的编程语言,由 Oracle 维护。专有的,有点太大了。需要在某些机器上安装。

更具体地说,我不是在谈论拥有一种新的编程语言。我说的是拥有一种新的机器代码语言,它包含足够的额外信息,当执行时,会发生将其转换为架构机器代码的非常简单的过程。这样,C 编译器就可以将其可执行文件编译成通用机器代码,并且可执行文件可以在任何地方运行。

4

3 回答 3

6

已经有类似的东西了,它叫做p-code

http://en.wikipedia.org/wiki/P-code_machine

这些天来,虚拟机基本上扮演着这个角色

于 2013-01-31T20:15:55.723 回答
4

Lambda 演算和/或图灵机。其他一切都只是语法糖。

于 2013-01-31T20:21:50.523 回答
3

您不会让芯片供应商就通用机器代码达成一致。一个供应商不能用一个新的机器代码接管世界,否则他们会拥有(ARM 几乎有,但最终它不会)。

在今天的专利诉讼中,您甚至无法制造 VLIW 处理器,并且在一个薄的软件层中模拟各种指令集,而且您无论如何也无法接管世界,您能说 transmeta 吗?

所以你被软件中的解释器困住了。因此,它可以追溯到 JAVA 的“已经尝试过”和几十年前的 p 代码(pascal),以及 python 在做什么等等。甚至是 llvms 字节码。

您对“每台机器的速度相同”的要求不会发生。

您已经在 javascript 中使用了最便携的语言,而且它的速度和它一样快。C 是您所追求的通用语言,它相当快并且可以在任何地方运行(比任何其他语言都多),问题在于操作系统,而不仅仅是用户界面。

于 2013-01-31T20:49:26.753 回答