10

Erlang VM で使用されるオペコードには明らかな意味を持つものもあれば、不可解なものもあり、微妙な違いによって互いに異なっているように見えます。

例として:

  1. call_extcall_ext_onlyオペコードの違いは何ですか?
  2. allocateオペコードとオペコードの違いは何allocate_zeroですか?
  3. test_heapオペコードは何に使用されますか? それはある種のチェックですか、それとも実際にヒープにスペースを割り当てますか? タプルとリストの使用法に何らかの形でリンクされていますが、どの用語でしょうか?
  4. allocateスタンドの引数は何ですか?

Erlang VM で使用されるオペコードについて入手可能なドキュメントを誰かが教えてくれたり、少なくとも上記の点について教えてくれたりしたら、非常にありがたいです。

4

1 に答える 1

4

同様の SO-questionerlang-documentationで述べられているように:

アセンブラ ファイルの形式は文書化されておらず、リリース間で変更される可能性があることに注意してください。このオプションは、主に内部デバッグ用です。

何が起こっているのか本当に知りたい場合は、ソースコードで追跡する必要があるようです。ほとんどの作業は erts/emulator/beam/beam_emu.c で行われます (私は otp_src_R15B02 を調べました):

  1. call_ext:継続ポインター現在の命令 + 2に設定し、ディスパッチ/外部呼び出しを行います。call_ext_only: CP には触れず、発送するだけです。(~1520行目)
  2. どちらもメモリを割り当てますがallocate_zero、初期化します0x00(〜334行目)。
  3. test_heap: ヒープの Nh ワードが使用可能かどうかを確認します。そうでない場合は、ガベージ コレクションを実行します。(~390行目)
  4. allocate(StackNeeded, NumberOfRegistersToPreserve)(~316行目)

ファイル全体は#definesgotosの複合であり、一部のマクロは同じフォルダー内の ops.tab 内で定義されています。私も erlang-asm の専門家ではないので、何か見落としているかもしれません。そのことを念頭に置いて、作業を開始する前に私のステートメントをクロスチェックしてください。

リンクされた SO-awnser から TamasNagy を引用するには:

これで何を達成しようとしているのかはわかりませんが、コア erlang はコード操作を行うためのより良いレベルかもしれません。

詳細については、そちらをご覧ください。Erlang には強みがありますが、ドキュメントはその 1 つではありません。

よろしく。

于 2012-11-16T11:06:52.240 に答える