2011-01-30 10 views
8

エラーが発生しましたデータ構造をマーシャリングしました(エラー抽象タイプ(カスタム))。 1つの既知の抽象タイプ、すなわちBig_intが使用されています。しかし、そのマーシャルは大丈夫です。アプリケーションにカスタムCコードはありません。 Numのほかに、Unixライブラリも使用されています(ただし、そのタイプのアクティブなオブジェクトはないと思います)。私たちは閉鎖でマーシャルをしています。どのOCaml標準ライブラリタイプをマーシャリングできないのですか?

OCSスキーム(Schemeインタプリタ、純粋なOcaml)とDypgen(拡張可能なGLRパーサ、純粋なOcaml)の2つのサードパーティライブラリが使用されています。問題は、動的に拡張されたパーサーを保存するDypgenの新機能です。

Ocamlエラーメッセージは無用です(カスタムタグを持つどの抽象タイプが原因であるかはわかりません)。

LexbufはOcamlチャネル上のクロージャを含んでおり、マーシャルされていない可能性があるため、Lexbufが原因と思われましたが、これは問題ではないようです。だから私の質問は:

マーシャルにできない標準ライブラリコンポーネントはどれですか?

答えて

7

弱い配列をマーシャリングすることはできません。私はOCS Schemeに精通していませんが、OCamlで書かれたガベージコレクション言語のインタプリタは、弱いポインタを使用することを期待しています(OCamlのメモリ管理についてピギーバックする)。

OCamlの防衛では、カスタムメソッドブロックに型の名前が含まれているとは思いません(遡って、これは良いことだと思われます)。

EDIT:うん:

$ grep Weak ~/Downloads/ocs-1.0.3/src/*.ml 
/Users/pascal/Downloads/ocs-1.0.3/src/ocs_sym.ml:module SymTable = Weak.Make (HashSymbol) 

EDIT2:ygrekで指摘したように 、カスタムメソッドブロック内の名前の余地があります。私は、弱い配列はカスタム値ではないことを明確にする必要があります。なぜなら、私の答えはそれを暗示しているようだったからです。弱い配列には抽象タグがあり、ガーベッジコレクタが収集サイクルの特別な弱点関連のフェーズでそれらをトラバースできるように、データの最初の単語を使用して連鎖されます。

+2

カスタム値は、custom_ops(マーシャリングタグとして使用)の名前へのポインタを持つことができます。 – ygrek

+0

Hm。弱い配列をマーシャリングしようとするとどうなりますか?私は間違いなく診断で(カスタム)取得しています。 – Yttrill

+1

@Yttrill "Marshal.to_string(Weak.create 3)[] ;;"結果: "例外:Invalid_argument" output_value:抽象値(要約) " –

関連する問題