Доступ к байтам за пределами most-positive-fixnum в emacs lisp - программирование
Подтвердить что ты не робот

Доступ к байтам за пределами most-positive-fixnum в emacs lisp

TL; DR: Может ли 32-разрядный байт emacs- lisp превышать первые 512 МБ файла?

Мне нравится использовать emacs- lisp для различных задач обработки данных из-за его (очевидно) высокого уровня интеграции с редактором.

При написании пользовательских функций я иногда сталкиваюсь с ограничениями, налагаемыми most-positive-fixnum. Хотя я могу жить и понимать причины невозможности загрузки всего 1 ГБ файла в буфер, интерфейс insert-file-contents[-literally] также не позволяет получить доступ к кускам данных за пределами первого 512 МБ файла, так как он требует как аргумент - целочисленный диапазон байтов.

Есть ли способ обойти это ограничение? Насколько я знаю, в настоящее время insert-file-contents - это самая низкоуровневая функция чтения файлов, доступная для emacs- lisp, insert-file-contents-literally, являющаяся просто вариантом первого, настроенного с помощью установки пары переменных, то есть emacs- lisp похоже, не обеспечивает никакого низкоуровневого файлового интерфейса типа fopen.

Любопытно, в какой-то момент (возможно, с помощью самокомпилированного двоичного кода) вызов insert-file-contents-literally с аргументами с плавающей запятой работал у меня, позволяя получать доступ к диапазонам с высоким байтом за счет риска ошибок округления. Однако, используя последнюю версию precompiled emacs из ftp.gnu.org(24.3 с момента написания), это приводит к ошибке (wrong-type-argument file-offset NUMBER).

4b9b3361

Ответ 1

Нет никакого способа сделать это исключительно в Emacs. Вы должны каким-то образом использовать какую-то внешнюю программу. Это известное ограничение, я считаю, что оно уже находится в трекере ошибок.