編集 4 : これは、実際には一般的な TTY 入力の制限にすぎないことがわかりました。問題の原因となっている OCaml、Coq、または Emacs については特に何もありません。
Emacs で Proof General を使用して Coq プログラムに取り組んでいますが、入力が長すぎるバグを発見しました。Proof Generalを介して送信する領域にcoqtop
1023 文字を超える文字が含まれている場合、Proof General (Emacs ではありません) は応答を待っている間にハングし、*coq*
バッファーには^G
1023 文字を超える文字ごとに 1 つの余分な文字が含まれます。たとえば、1025 文字の場合region が に送信されたcoqtop
場合、*coq*
バッファは 2 つの余分な文字で終了し^G^G
ます。ファイルのこのポイントを超えて先に進むことができず、coqtop
プロセスを強制終了する必要があります (C-c C-xまたはターミナルからkill
/を使用killall
)。
この制限に関する何かは、coqtop
それ自体から生じます。1024文字以上の文字列を生成し、それをパイプする場合
perl -e 'print ("Eval simpl in " . (" " x 1024) . "1.\n")' | coqtop
その後、すべて正常に動作します。(同様に、正常にcoqc
動作します。) しかし、ターミナルで実行するcoqtop
と、1 行に 1024 文字を超える文字を入力できません。これには、最後の改行文字が含まれます。したがって、1023 文字の行を入力してから改行を押すと機能します。しかし、1024 文字を入力した後、return を含む (delete などは含まない) 任意のキーを押しても、ビープ音が鳴るだけです。そして、ocaml
(OCaml トップレベル) が同じ動作をすることがわかりました:
perl -e 'print ((" " x 1024) . "1;;")' | ocaml
ocaml
正常に動作しますが、端末から実行している場合、1 行に 1024 文字を超える文字を入力できません。私の理解ではcoqtop
、OCaml のトップレベルに依存しているため (より明らかに as として実行した場合coqtop -byte
)、これは関連する制限であると思います。
関連するソフトウェア バージョンは次のとおりです。
- HomebrewのOCaml 3.12.1 ;
- HomebrewのCoq 8.3pl3 (および 8.3pl2) ;
- 証明 一般4.1;
- Emacs for Mac OS XからのGNU Emacs 24.1.1のビルド。と
- Mac OS X 10.6.7。
そして私の質問は次のとおりです。
- この文字数制限の実施
ocaml
についてはどうですか?coqtop
そして、なぜパイプやファイルからの入力ではなく、端末や Emacs からの入力だけなのですか? - Proof General がこの制限を (明らかに) 無知であるために、エラーがハングしたり、謎
^G
の s が発生したりするのはなぜですか? - この制限を回避するにはどうすればよいですか? 私の最終目標は、Proof General/Emacs 内で Coq を使用することなので、根本的な問題を回避する回避策は問題ありません。
編集 3: 1024 文字の入力制限が Ocaml トップレベルにも存在することを発見した後 (関連していると思われるもの)、その情報を追加し、元の問題の説明を削除しました。(必要に応じて編集履歴を参照してください)。