【问题标题】:Accessing bytes beyond most-positive-fixnum in emacs lisp在 emacs lisp 中访问超出 most-positive-fixnum 的字节
【发布时间】:2014-01-28 09:38:36
【问题描述】:

TL;DR:32 位 emacs-lisp 字节范围能否超出文件的前 512 MB?

我喜欢将 emacs-lisp 用于各种数据处理任务,因为它(显然)与编辑器的高度集成。

在编写自定义函数时,我有时会遇到most-positive-fixnum 施加的限制。虽然我可以忍受并理解无法将整个 1GB 文件加载到缓冲区中的原因,但insert-file-contents[-literally] 接口也不允许访问文件前 512 MB 之外的数据块,因为它需要参数一个整数字节范围。

有没有办法绕过这个限制?据我所知,目前insert-file-contents 是 emacs-lisp 可用的最低级文件读取功能,insert-file-contents-literally 只是通过设置几个变量配置的第一个变体,即 emacs-lisp 似乎没有提供任何低级fopen 类型的文件接口。

奇怪的是,在某些时候(可能使用自编译的二进制文件)使用浮点参数调用 insert-file-contents-literally 对我有用,允许访问高字节范围,但代价是舍入错误的风险。但是,使用来自 ftp.gnu.org 的最新预编译 emacs 版本(撰写时为 24.3),这样做会产生 (wrong-type-argument file-offset NUMBER) 错误。

【问题讨论】:

  • 看来你必须使用像headtail这样的外部命令,见emacswiki.org/emacs/VLF。在这种情况下,您可以摆弄emacs-calc 任意精度数字。
  • 使用外部命令可悲地引入了我想避免的平台依赖性;我主要在 Windows 上使用 emacs。

标签: file-io elisp filesize emacs24


【解决方案1】:

仅在 Emacs 中无法做到这一点。您必须以某种方式使用一些外部程序。这是一个已知的限制,我相信它已经在错误跟踪器中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多