Frage

Und warum sie es nicht ändern?

Edit: Der Grund fragen, weil ich zu Emacs bin neu, und ich möchte Emacs verwenden, als „Programmierer-Rechner“. Also, ich kann manipulieren 32-Bit und 64-Bit-Integer und sie verhalten sich ähnlich wie bei den nativen Maschinen.

War es hilfreich?

Lösung

Emacs-Lisp ist eine dynamisch typisierte Sprache. Dies bedeutet, dass Sie Tags zur Laufzeit eingeben müssen. Wenn Sie mit Zahlen arbeiten wollten, würden Sie daher in der Regel haben sie in eine Art von markierten Containern zu packen, die Sie (zB „Box“ sie) zeigen können, da es keine Möglichkeit, einen Zeiger von einer Maschine integer zur Laufzeit zu unterscheiden, ohne irgendeine Art von Tagging-Schema.

Aus Gründen der Effizienz, die meisten Lisp-Implementierungen verwenden deshalb nicht roh Zeiger aber was ich denke, ist die Deskriptoren genannt. Diese Deskriptoren sind in der Regel eine einzige Maschine Wort, das einen Zeiger darstellen kann, eine unboxed Nummer (eine sogenannte Fixnum ) oder eine von verschiedenen anderen hartcodierte Datenstrukturen (es ist oft wert kodieren NIL und Nachteile Zellen speziell auch zum Beispiel).

Nun, natürlich, wenn Sie den Typ-Tag hinzufügen, haben Sie nicht die vollen 32 Bits für die Zahl links, so dass Sie mit 26 Bits nach links, wie in MIT Schema oder 29 Bits, wie in Emacs oder jede anderen Zahl von Bits, die Sie verbrauchen nicht für Tagging.

Einige Implementierungen von verschiedenen dynamischen Sprachen reservieren mehrere Tags für fixnums, so dass sie ihren 30-Bit geben können oder sogar 31-Bit-fixnums. SBCL ist eine Implementierung der Common Lisp, die href="http://sbcl-internals.cliki.net/tag%20bit" rel="noreferrer"> . Ich glaube nicht, die Komplikation, die dies bewirkt, dass sich lohnt, für Emacs, though. Wie oft muss man schnell 30-Bit-Arithmetik Fixnum im Gegensatz zu 29-Bit-Arithmetik Fixnum in einem Texteditor , die nicht einmal seinen Lisp-Code in Maschinencode nicht kompiliert (oder ist das? I don‘ t erinnern, tatsächlich)? Schreiben Sie einen distributed.net Client in Emacs-Lisp? Bessere Umstellung auf Common Lisp, dann! ;)

Andere Tipps

Die verbleibenden 3 Bits werden als Flags von dem Lisp-Interpreter verwendet. (Sie können größere Zahlen erhalten, indem Emacs Kompilieren für einen 64-Bit-Rechner.)

Andere haben kommentiert, warum fixnums sind nur 29 Bit breit. Aber wenn Sie ein Programmierer Rechner wollen Besuche ber . Es bietet beliebige Genauigkeit ganze Zahlen, Matrix-Operationen, die Umrechnung von Einheiten, Grafiken über gnuplot, statistische Funktionen, finanzielle Funktionen, wissenschaftliche Funktionen, RPN und algebraische Notation Formel Vereinfachung ... und es ist bereits Teil des Emacs, so begonnen zu erhalten, besuchen Sie die Info-Knoten für "calc" und im Tutorial beginnen.

Die anderen drei Bits werden als Tag von der Art des Objekts verwendet. Dies ist früher so weit verbreitet sein, dass eine Anzahl von CPU-Architekturen mindestens enthielt einige Unterstützung für getaggten ganze Zahlen in ihren Befehlssätzen: Sparc , Alpha , Burroughs und die K-Maschine zum Beispiel. Heute lassen wir die Lisp-Laufzeitvertrag mit Tags, ohne zusätzliche Hardware-Unterstützung. Ich würde empfehlen, den ersten Link, über Sparc lesen, wenn Sie einen schnellen Überblick über die Geschichte erhalten möchten.

In vielen Lisp-Implementierungen werden einige der Bits in einem Wort für einen Tag verwendet. Auf diese Weise können Dinge wie die Garbage Collector wissen, was ein Zeiger ist und was nicht, ohne zu erraten ist.

Warum interessieren Sie sich, wie groß ein Elisp Fixnum ist? Sie können gigantische Dateien öffnen, wie es ist.

Ich verwende den Common Lisp-Interpreter CLISP als Rechner des Programmierers. Common Lisp hat die vernünftigste Zahl Umgang mit, dass ich in einer beliebigen Programmiersprache gesehen habe; insbesondere die meisten, hat es ganze Zahlen von beliebiger Größe, das heißt bignums sowie rationale Zahlen. Es hat auch Eingang in beliebigen Anzahl Basen und bitweise Funktionen für bignums. Wenn Sie von Emacs berechnen möchten, können Sie CLISP in einem M-x Shell ausgeführt. Als Bonus ist die Syntax fast genau das gleiche wie das, was Sie in Emacs Lisp verwenden würden.

Das ist nur wahr für 32-Bit-Architekturen und kann basierend auf Build-Optionen geändert werden. Die anderen Bits werden zum Markieren der grundlegenden Datenstrukturen verwendet.

Sie können mit einer 64-Bit-Build, die größer ganzen Zahlen hat, und es gibt Pakete für beliebig große Integer-Arithmetik.

Oder du bist nur eine rhetorische Frage zu stellen versucht, wütend und wichtig zu klingen ...

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top