質問

ってどのようにプログラミング言語で作業していバーチャルスクールと呼ばれる。モバゲーさんやグリーさんとは何らかの形でのエミュレーションのプログラミング言語やその他のプログラミング言語で、その作品のようにどのように作成言語のように実行され、スタックです。かんそうなんですか?

の"なお書き"しっかりとしたうbamboozles私は多くのコンパイルされた言語を変数と"教養"タイプシステム。Python例えば、私はあまり書けます:

x = "Hello world!"
x = 2**1000

文字列は、大きな整数を完全に無関係を占めている空間の記憶が、どのようにしてできるこのコードで代表されるので、アクチュエータに基づくのでしょうか。何が起こる。Xが新しい場所のスタックの文字列データを左unreferenced?これらの言語では使用しないでスタック?なかしているのでしょうかを表す変数内部?

役に立ちましたか?

解決

おそらく、あなたの質問は、と題されるべき「の動的言語の仕事はどうすればよいです?。」

それは簡単です、彼らはメモリにそれと一緒に変数の型情報を格納します。これは唯一の解釈またはJITコンパイルされた言語だけでなく、Objective-Cのようなネイティブコンパイル言語で行われていない。

他のヒント

多くのVMの言語、数指定することができ館としてのポインタは参考文献)のメモリーのヒープの場合でも、変数自体はスタックです。言語とプリミティブ型(intとはbool型のJavaなど)については保存されることをスタックがどのようにできない割り当て新しいタイプます。

を無視してプリミティブ型、すべての変数に存在するスタックを実際の値に格納されたヒープ.この場合は動的に設定し直しの値は、元の値は放棄およびメモリの掃除を経由して一部のガベージコレクションアルゴリズムに新たな価値が割り当てられ、新たなビットのメモリを消費します。

VMは、言語とは何の関係もありません。任意の言語は、VM(Java VMがすでに数百の言語を持っている)の上で実行することができます。

VMを実行するための「アセンブリ言語」へのコンパイラを適応に、よりフィット感のある1の異なる種類を可能にします。 VMで行わすべてはCPUで行うので、CPUのようにVMを考えることができました。 (いくつかは、実際にハードウェアに実装されている)。

これは、非常に低いレベルだし、多くの場合に多額のスタックベース - 代わりのレジスタ、マシンレベルの数学は、すべての現在のスタックポインタの相対的な位置に相対的である。

通常のコンパイル言語では、多くの命令は、単一のステップのために必要とされます。 +「、REG Aにスタックポインタを基準ポイントから項目をグラブREG Bに別のものをつかむようになります。REG AおよびBを追加します。スタックポインタに対して適所にREG aを入れます。

VMがないすべてのこの単一の、短い命令ではなく、命令当たり4または8バイトの可能性の1または2バイト機械語で(32または64ビットアーキテクチャに依存する)(推測)が16または32の周囲を意味すべきですマシンコードの1-2バイトのためのx86のバイト。 (私が間違っている可能性が、私の最後のx86コーディングは80286時代にあった。)

Microsoftはコードの量を減らすために自分のオフィス製品に(おそらくまだ使用しています)のVMを使用します。

VMコードを作成するための手順は、本質的に機械語だけ異なるプロセッサタイプの作成と同じである。

VMは、言語に非常に密接に関連している独自のセキュリティ、エラー回復やメモリのメカニズムを実装することができます。

私の説明のいくつかは、ここでは概要とメモリからです。あなたはバイトコードの定義を自分で探検したい場合は、それはちょっと楽しいます:

http://java.sun.com /docs/books/jvms/second_edition/html/Instructions2.doc.htmlする

の多くの鍵は、「VMはこの様またはその変数を扱うんか本当にメタデータにダウンしています...メタ情報は、記憶され、その後更新されたVMを割り当てる方法についてのより良いハンドルを与えてみませんか変数と正しいこと。

多くの場合、これは実際にパフォーマンスの方法で得ることができるオーバーヘッドのタイプです。しかし、現代の実装、などが正しいことを行うには長い道のりを歩んできます。

あなたの具体的な質問については - バニラオブジェクトの/ etcなどの変数を処理する...ダウン新しい割り当てのメタ情報を再評価/再割り当てに来る - xが一方通行を見て、その後、次のことができます理由です。

ご質問の一部に答えるために、私は、Pythonについて Googleのハイテク関連のトークをお勧めします、動的言語に関するご質問の一部が回答しているところ。例えば変数が何であるか(それがポインタ、も参照されないが、Pythonのラベルの場合)。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top