TL; DR: Kann 32bit Emacs-Lisp-Byte über die ersten 512 MB einer Datei?Zugriff auf Bytes jenseits der meisten positiven-Fixnum in Emacs lisp
Ich benutze Emacs-Lisp für verschiedene Datenverarbeitungsaufgaben wegen seiner (offensichtlich) hohen Integrationsebene mit dem Editor.
Beim Schreiben von benutzerdefinierten Funktionen stößt ich manchmal in die Grenzen von most-positive-fixnum
. Während ich mit den Gründen leben und verstehen kann, warum ich nicht in der Lage bin, eine ganze 1-GB-Datei in einen Puffer zu laden, erlaubt die insert-file-contents[-literally]
Schnittstelle auch keinen Zugriff auf Datenblöcke jenseits der ersten 512 MB einer Datei, da sie als Argument ein benötigt ganzzahliger Bytebereich
Gibt es eine Möglichkeit, diese Einschränkung zu umgehen? Soweit ich weiß, insert-file-contents
ist derzeit die niedrigste Datei-Lesefunktion für Emacs-Lisp, insert-file-contents-literally
ist nur eine Variante der ersten konfiguriert durch die Einstellung ein paar Variablen, dh emacs-lisp scheint keine Low bereitzustellen -level fopen
Typ Dateischnittstelle.
Seltsamerweise an einem Punkt (möglicherweise mit einer selbst kompilierten Binärdatei) Aufruf insert-file-contents-literally
mit Gleitkomma-Argumente für mich gearbeitet, den Zugriff auf hohe Byte-Bereiche zu Lasten der Gefahr von Rundungsfehlern. Bei Verwendung der neuesten vorkompilierten Emacs-Version von ftp.gnu.org (24.3 zum Schreiben) führt dies jedoch zu einem (wrong-type-argument file-offset NUMBER)
Fehler.
Scheint, dass Sie externe Befehle wie 'head' und' tail' verwenden müssen, siehe http://www.emacswiki.org/emacs/VLF. In diesem Fall könntest du mit 'emacs-calc' willkürlichen Präzisionszahlen herumspielen. – Tobias
Die Verwendung externer Befehle führt leider zu einer Plattformabhängigkeit, die ich vermeiden möchte; Ich verwende hauptsächlich Emacs unter Windows. – kdb