Pregunta

Y ¿por qué no cambiar?

Editar:La razón que pido es porque soy nuevo en emacs y me gustaría usar Emacs, como un "programador de la calculadora".Así, puedo manipular 32-bits & 64-bits enteros y disponer de ellos se comportan como lo harían en la máquina nativo.

¿Fue útil?

Solución

Emacs-Lisp es una forma dinámica de lenguaje escrito.Esto significa que usted necesita etiquetas de tipos en tiempo de ejecución.Si quería trabajar con números, por lo tanto, normalmente tiene que empacar en algún tipo de etiquetado del contenedor que se puede apuntar a (es decir,"cuadro" de ellos), ya que no hay manera de distinguir un puntero de un equipo entero en tiempo de ejecución sin algún tipo de esquema de etiquetado.

Por razones de eficiencia, la mayoría de las implementaciones de Lisp por lo que no uso en crudo, punteros, pero lo que creo que se llama de los descriptores.Estos descriptores son generalmente de una sola palabra de máquina que puede representar un puntero, un sin embalaje número (los llamados fixnum), o uno de varios otros rígida estructuras de datos (que es a menudo vale la codificación de NIL y los contras de las células especialmente, demasiado, por ejemplo).

Ahora, obviamente, si se agrega el tipo de etiqueta, no tienes el de 32 bits a la izquierda por el número, por lo que está a la izquierda con 26 bits como en el MIT Esquema o 29 bits como en Emacs o cualquier otro número de bits que no lo uso hasta para el etiquetado.

Algunas implementaciones de los distintos lenguajes dinámicos de la reserva de varias etiquetas para fixnums por lo que se le puede dar de 30 bits o incluso de 31 bits fixnums.SBCL es una aplicación de Common Lisp que hace esto.No creo que la complicación que esto hace es la pena para Emacs, aunque.¿Con qué frecuencia usted necesita rápido de 30 bits fixnum aritmética frente a los 29 bits fixnum aritmética en un editor de texto que ni siquiera compilar su código Lisp en código máquina (o no?No recuerdo, en realidad)?Estás escribiendo un distributed.net cliente en Emacs-Lisp?Mejor cambiar a Common Lisp, entonces!;)

Otros consejos

El resto de los 3 bits se utilizan como indicadores de la intérprete de Lisp.(Usted puede obtener más enteros mediante la compilación de Emacs para una máquina de 64 bits.)

Otros han comentado sobre por qué fixnums son sólo 29 bits de ancho.Pero si quieres una calculadora de programación, echa un vistazo calc.Ofrece precisión arbitraria enteros, operaciones de matriz, conversiones de unidades, de gráficos a través de gnuplot, funciones estadísticas, funciones financieras, funciones científicas, RPN y la notación algebraica, la fórmula de la simplificación...y es ya parte de Emacs, así que para empezar, visita la Info del nodo para "calc" y comenzar en el tutorial.

Los otros tres bits se utilizan como una etiqueta del tipo de objeto.Esto solía ser tan frecuente que un número de arquitecturas de CPU incluye, al menos, algún tipo de apoyo para el etiquetado de los números enteros en sus conjuntos de instrucciones:Sparc, Alfa, Burroughs, y el K-Máquina por ejemplo.Hoy nos vamos a la Lisp tiempo de ejecución de acuerdo con etiquetas, sin necesidad de hardware adicional de apoyo.Me gustaría recomendar la lectura del primer enlace, sobre Sparc, si desea obtener una visión general rápida de la historia.

En muchas implementaciones de Lisp, algunos de los bits en una palabra se utiliza para una etiqueta.Esto permite que cosas como el recolector de basura saber lo que es un puntero y lo que no, sin tener que adivinar.

¿Por qué te importa lo grande que Elisp fixnum es?Usted puede abrir archivos gigantescos como es.

Yo uso el Común de la intérprete de Lisp CLISP como una calculadora de programación.Common Lisp tiene la sanest el manejo de las cifras que he visto en cualquier lenguaje de programación;más en particular, no ha enteros de tamaño arbitrario, es decir,bignums, así como los números racionales.También tiene una entrada en un número arbitrario de bases y bit a bit funciones para bignums.Si desea calcular a partir de dentro de Emacs, se puede ejecutar CLISP en un M-x shell.Como un bono, la sintaxis es casi exactamente igual a lo que usted utilizaría en Emacs Lisp.

Que sólo es cierto para las arquitecturas de 32 bits, y puede ser cambiado en las opciones de compilación.Los otros bits son utilizados para el etiquetado de los datos básicos de las estructuras.

Usted puede usar un sistema de 64 bits construir que tiene más números enteros, y hay paquetes para arbitrariamente grande aritmética de enteros.

O, solo estamos pidiendo una pregunta retórica, tratando de sonar enojada e importante...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top