Редактировать 4:Оказывается, на самом деле это просто ограничение ввода TTY в целом; в OCaml, Coq или Emacs нет ничего конкретного, что вызывает проблему.
Я работаю над программой Coq, используя Proof General в Emacs, и обнаружил ошибку со слишком длинным вводом. Если область для отправки в coqtop
через Proof General содержит более 1023 символов, Proof General (, но не Emacs ), зависает в ожидании ответа, а буфер *coq*
содержит один дополнительный символ ^G
для каждый символ старше 1023. Например, если область из 1025 -символов была отправлена в coqtop
, то буфер *coq*
закончится двумя дополнительными символами ^G^G
. Я не могу пройти дальше этой точки в файле, и мне нужно убить процесс coqtop
(либо с помощью C -c C -x , либо kill
/ killall
с терминала ).
Что-то в этом ограничении вытекает из самого coqtop
. Если кто-то сгенерирует строку из 1024 -символов или длиннее и передаст ее, например, запустив
perl -e 'print ("Eval simpl in ". (" " x 1024). "1.\n")' | coqtop
тогда все работает нормально. (Точно так же отлично работает coqc
.)Однако , если я запускаю coqtop
в терминале, я не могу ввести более 1024 символов в одной строке, , включая завершающий символ возврата. Таким образом, ввод строки из 1023 -символов, а затем нажатие клавиши возврата работает; но после ввода 1024 символов нажатие любой клавиши, включая возврат (, но не включая удаление и т. д. ), ничего не делает, кроме звукового сигнала. И получается, чтоocaml
(верхний уровень OCaml )ведет себя так же:
perl -e 'print ((" " x 1024). "1;;")' | ocaml
работает отлично,но я не могу ввести более 1024 символов в одной строке при запуске ocaml
с терминала. Поскольку я понимаю, что coqtop
полагается на верхний уровень OCaml (более очевидно при запуске какcoqtop -byte
), я полагаю, что это связанное ограничение.
Соответствующие версии программного обеспечения::
И мои вопросы:
ocaml
и coqtop
обеспечивает соблюдение этого ограничения на количество символов? И почему только для ввода из терминала или Emacs, а не для ввода из канала или файла?^G
s?Редактировать 3:Обнаружив, что ограничение на ввод 1024 -символов также существует на верхнем уровне Ocaml (, что, как мне кажется, связано ), я добавил эту информацию и удалил исходное описание проблемы, так как оно было полностью скрыто и заменено. (См. историю редактирования при необходимости ).