私は、機械語がどのようにアーキテクチャーに固有のものであるか、および Javascript が (ほぼ) すべてのブラウザーでどのように機能するかについて考えてきました。私は、いくつかの深刻な計算を行う必要があるプロジェクトに取り組んできました。これは Javascript ベースであり、計算を完了するのに 1 分かかります。私は C のスピードを切望しています。しかし、プロジェクトが Javascript であるすべての理由は、単純さと移植性のためです。
Javascript に似た移植性があり、すべてのアーキテクチャで実行可能ファイルとして実行される言語があったらどうなるでしょうか。ほとんどの人は Java を指しますが、私はオーバーヘッドが少なく、OS によって処理されるものを考えています。バイト コードではなく、ネイティブ マシン コードです。
このタスクの不可能性に到達するために、少し調査して考えました。特定のアーキテクチャ用に C でネイティブにコンパイルされた場合と同じ速度ですべてのアーキテクチャで動作する、特定のアーキテクチャ用の通常の C で記述されたアプリケーションと同じくらい小さい実行可能ファイルを作成するにはどうすればよいでしょうか?
それが私の次のアイデアになります。ネイティブ マシン コードはアーキテクチャに固有のものであり、各アーキテクチャには特定の特別な機能があり、同じタスクを異なる方法で処理する場合があります。また、特定の最適化はアーキテクチャごとに固有です。ユニバーサルマシンコードがあったとしたら? OS が命令を RAM にロードすると、命令がアーキテクチャに適応するように自動的に変換されます。または、おそらく (よりクレイジーなアイデア) CPU にユニバーサル マシン コードを受信し、ユニバーサル マシン コードをネイティブ マシン コードに自動的に適合させる機能を含めることができますか?
Universal Machine Code 仕様は、通常の Machine Code 機能をカバーするのに十分な汎用性を持つ必要があります。
もちろん、Universal Machine Code が機能した場合、すべての OS で処理されるユニバーサルな実行形式が必要になるでしょう。そうすれば、実行可能ファイルを OS 間で変更する必要はありません。これは、マシン間で普遍的になるように特別に作成する必要があるフレームワークにつながります。さらに重要なのは、OS 固有の機能と、私が知っている以上の入出力機能です。
Universal Machine Code でコンパイルされた実行可能ファイル:
長所:
- ネイティブにコンパイルされた実行可能ファイルとほぼ同じサイズ
- ネイティブでコンパイルされた実行可能ファイルと同じではないにしても、ほぼ同じパフォーマンス
短所:
- RAMに実行可能ファイルをロードするときにユニバーサルマシンコードをネイティブマシンコードに変換するため、ロードがわずかに(存在しないことを願って)遅くなります
それは実現可能ですか?
編集:
私は Java を使用し、その中でゲームを作成しました。それは私が望むほど * 普遍的ではなく、友好的でもありません。* Oracle が管理する独自のプログラミング言語です。独自のもので、少し大きすぎます。一部のマシンへのインストールが必要です。
より具体的に言えば、新しいプログラミング言語について話しているわけではありません。私が話しているのは、実行時に、それをアーキテクチャのマシン コードに変換する非常に薄いプロセスが発生するのに十分な追加情報を保持する新しいマシン コード言語を持つことです。そうすれば、C コンパイラは実行可能ファイルをユニバーサル マシン コードにコンパイルでき、実行可能ファイルはどこでも実行できます。