いくつかのOCaml値の内部表現を見ました。空の配列の表現はatom(0)
、すなわちtag=0
とsize=0
のブロックです。浮動小数点の空の配列はatom(0)
でも表されます。値のOcaml表現 - Atoms
アトムで表されるOCaml値はtag > 0
ですか?そうでない場合:OCamlバイトコードセットにはどのような目的のためにATOM n
命令が含まれていますか?
いくつかのOCaml値の内部表現を見ました。空の配列の表現はatom(0)
、すなわちtag=0
とsize=0
のブロックです。浮動小数点の空の配列はatom(0)
でも表されます。値のOcaml表現 - Atoms
アトムで表されるOCaml値はtag > 0
ですか?そうでない場合:OCamlバイトコードセットにはどのような目的のためにATOM n
命令が含まれていますか?
引数を持つコンストラクタにはタグ> 0が使用され、アトムではありません。一方、引数のないコンストラクタはブロックではなくintとして格納されるため、アトムではありません。ですから、私はatom(0)が使われていないと思います。例外...
空のインラインレコードを持つコンストラクタはどうでしょうか?
# type t = A of int | B of { };;
Error: Syntax error
空のレコードは許可されていないようです。このようなブロックを直接作成する以外に、タグを使って0サイズのブロックを作成する別の方法は考えられません。しかし、それはATOM命令を使用しないでしょう。
私は、[PICマイクロコントローラ用のOCamlバイトコードインタープリタのポート](http://www.algo-prog.info/ocapic/web/index.php?id=ocapic)を見つけました。 [関連論文](http://studia.complexica.net/Art/AC-JFLA11-07.pdf)では、タグ<> 0のアトムで表されるOCaml値は存在しないと主張している。 – pifu
いくつかのCコードが一部を作成しないか、Objモジュールを使ってコードを作成することを意味します。それはGcのための有効なものであり、抽象型は何かのためにそれをうまく使うことができます。 –
ocaml-4.04.0ソースツリーで 'make world'が生成したすべてのバイトコードファイルを検査しました。' ATOM n'命令も 'PUSHATOM n'も見つかりませんでした。 'ATOM0'の多くは... – pifu
bytecompとbyterunコードは、自然に起こるとは思えませんが、これが可能だと思っているようです。おそらく、Coqのような魔法のOCamlを生成する他の言語がこれを使用します。私はバイトコードについてよく知らないので、同僚と確認する必要があります。 – PatJ
更新:明らかに使用されていません。このコードは、可能性が面白かったために存在し、おそらく処理するために多くの作業を必要としませんでした。たぶん役立つかもしれませんが、多分それはいつか役に立つかもしれません、多分いくつかのあいまいな図書館はその指示に依存しています。それは主に「我々はそれを取り除く理由がない」ために存在する。私はそれが使用されていないことを私は確信していないので、私は答えをつけるつもりはないが、私はあなたが得る最高だと思う。 – PatJ